使用java程序查找具有指定半径的给定纬度和经度(即:位置)的纬度和纬度值

时间:2014-03-05 20:31:14

标签: java javascript mysql google-maps google-maps-api-3

所有纬度和经度值(包括当前位置和其他位置)都是mysql db table中的varchar数据类型。我正在努力获得当前位置2公里或5公里半径范围内的所有最大和最小纬度/经度值。我当前的位置纬度和经度值以及其他位置lat / long值使用google map api存储到mysql db表中。

我需要从表中获取位于当前位置的给定半径范围内的位置记录(最大/最小纬度/经度值)。

输入:

地点:AA(或)Lat:12.561和Lon:77.48 半径/距离:2km

表:

位置| Lat |长

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,因为我的应用没有轴承值。它应该仅使用当前位置纬度/经度和距离/半径值的输入来获得输出值。

1 个答案:

答案 0 :(得分:0)

您需要将坐标从Varchar更改为DECIMAL(8,6)以允许计算距离。

以下SQL查询使用Spherical Law of Cosines来计算表中坐标和坐标之间的距离。

  

d = acos(sin(φ1).sin(φ2)+ cos(φ1).cos(φ2).cos(Δλ))。R

查询使用MySQL Math functions

"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&amp; center_long是给定点的坐标

PS使用3956英里6367英里