所有纬度和经度值(包括当前位置和其他位置)都是mysql db表中的varchar数据类型。我正在努力获得所有的最大和最低纬度/经度值,是在2公里或5公里半径内的当前位置。我的当前位置、纬度和经度值以及其他位置lat/long值使用google存储在mysql表中。
我需要从表中获取位置记录(最大/最小纬度/经度值),这些记录都在当前位置的给定半径内。
投入:
位置: AA (或) Lat: 12.561,Lon : 77.48半径/Distance :2公里
表:
地点: Lat _ Long
AA = 12.561 \x{ 77.48 }
A2 _~_
A4 / 12.59 / 78.42
A6 / 12.57 - 77.45
产出:
满足上述条件的位置名称列表。
如果您只给出几行java代码,这将是很大的帮助。
我需要得到所有方向(N/E/S/W)的lat/long值的o/p,而不用轴承值,因为我的应用程序没有方位值。只需输入当前位置、纬度、/longitude和距离/半径值即可得到输出值。
发布于 2014-03-05 22:08:12
您需要将坐标从Varchar更改为十进制(8,6),以允许计算距离。
下面的SQL查询使用Spherical Law of Cosines计算表中的坐标和坐标之间的距离。
D= acos( sin(φ1).sin(φ2) + cos(φ1).cos(φ2).cos(Δλ) ).R
"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和center_long是给定点的坐标
PS使用3956英里的里程6367公里
https://stackoverflow.com/questions/22208554
复制相似问题