回答

收藏

获取半径内的位置

技术问答 技术问答 241 人阅读 | 0 人回复 | 2023-09-14

在一个数据库中,我存储了大约500条记录,每条记录都有一个经度和纬度。& ^, u0 y' e0 d8 h2 _  e2 i6 H! c
在一个Activity中,我实现了-
1 X- A$ g8 L" g" A: sLocationListener,在onLocationChanged-method中,我需要显示距离从该侦听器接收到的位置XX米以内的记录。
. |  R1 D% R  N* i/ N; ?在SQL或Java中是否有(简便)方法来做到这一点?- Y: D) v. Z! {' C; o( V
               
5 d3 |; A/ O3 L7 D解决方案:
$ {- u  x2 N6 I+ h% K  N9 |9 j                % g) d6 g  W3 B, R8 F$ j8 h
" i" E) D: o8 g$ `+ z" j
# y0 \; T. s( p9 c8 a8 W- {! M8 [
                试试这个示例代码,
! n& o; F! c2 V& m: ^8 I3 s$ crs = st.executeQuery("SELECT longititude,latitude FROM  location");
' S% Q. |% e; r0 s8 w4 S" F                while (rs.next()) {2 W8 ?+ x( |0 {# f7 q8 P
                double venueLat =rs.getDouble("latitude");5 v  b. Q  M* w; w9 X6 n7 k4 g6 [
                double venueLng = rs.getDouble("longititude");2 X5 E, m( ^( E4 ]2 j$ |
                double latDistance = Math.toRadians(userLat - venueLat);
9 @. I) ^3 c! Y& R                double lngDistance = Math.toRadians(userLng - venueLng);* d: ^4 S7 N7 @- `1 I, _( k
                double a = (Math.sin(latDistance / 2) * Math.sin(latDistance / 2)) +0 t0 |: N" [! v5 U5 e$ C
                                (Math.cos(Math.toRadians(userLat))) *
- Z1 g8 M5 e' @/ A- m                                (Math.cos(Math.toRadians(venueLat))) *
5 Q0 F' F4 i. V, F, A" z: H                                (Math.sin(lngDistance / 2)) *
1 j' O8 n/ b# r3 f7 n                                (Math.sin(lngDistance / 2));
) ]& Y4 v) u" Q2 N7 n                double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));) _% f, C( P7 q7 _* `( j& ~
                double dist = 6371 * c;             3 Z/ M3 d! {7 m* J6 @' a$ \
                if (dist<50){/ P6 T, H! J/ o# {: t
                    /* Include your code here to display your records */   j7 n+ g( ]3 x
                }
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则