mysql-db表中所有的纬度和经度值(包括当前位置和其他位置)都是varchar数据类型。我正在努力获取距离当前位置2公里或5公里半径内的所有最大和最小纬度/经度值。我当前的位置纬度和经度值以及其他位置纬度/经度值使用谷歌地图api存储在mysqldb表中。
我需要从表中获取位置记录(最大/最小纬度/经度值),这些记录都在当前位置的给定半径内。
输入:
位置:AA(或)纬度:12.561,经度:77.48半径/距离:2km
表:
位置| Lat | Long
AA | 12.561 | 77.48
A2 | 12.567 | 77.489
A4 | 12.59 | 78.42
A6|12.57|77.45
输出:
满足上述条件的位置名称列表。
如果您能给出几行java代码,那将是一个很大的帮助。
我需要在不使用方位值的情况下获得所有方向(N/E/S/W)的纬度/经度值的o/p,因为我的应用程序没有方位值。它应该只使用当前位置的纬度/经度和距离/半径值的输入来获得输出值。
您需要将坐标从Varchar更改为DECIMAL(8,6)才能计算距离。
以下SQL查询使用余弦球面定律来计算坐标与表中坐标之间的距离。
d=acos(sin(φ1).sin(φ2)+cos(φ1
查询使用MySQL数学函数
"SELECT Location,Lat,Long,(6367 * acos( cos( radians(center_lat) )
* cos( radians( Lat ) ) * cos( radians( Long ) - radians(center_long) )
+ sin( radians(center_lat) ) * sin( radians( Lat ) ) ) ) AS distance FROM table
HAVING distance < radius ORDER BY distance ASC LIMIT 0 , 20"
其中center_lat
¢er_long
是给定点的坐标
PS使用3956英里6367公里