我在我的数据库中记录了多个地址,并且我使用Google地理编码服务获取了他们的经度,纬度等。如果我拥有多个地址的所有Google地址解析数据,我如何计算他们的邻近度?
我需要做些什么来计算距离另一个地址的距离?
理想情况下,我想显示一个条目,然后在下面说:“以下记录的地址在附近。”
我在我的数据库中记录了多个地址,并且我使用Google地理编码服务获取了他们的经度,纬度等。如果我拥有多个地址的所有Google地址解析数据,我如何计算他们的邻近度?
我需要做些什么来计算距离另一个地址的距离?
理想情况下,我想显示一个条目,然后在下面说:“以下记录的地址在附近。”
例如参见http://www.movable-type.co.uk/scripts/latlong.html。
在仪表:
D_AB = 6378137 * acos(cos(PI/ 180 * latA) * cos(PI/ 180 * lngA) *
cos(PI/ 180 * latB) * cos(PI/ 180 * lngB) + cos(PI/ 180 * latA) *
sin(PI/ 180 * lngA) * cos(PI/ 180 * latB) * sin(PI/ 180 * lngB) +
sin(PI/ 180 * latA) * sin(PI/ 180 * latB))
有几种算法转换纬度/经度坐标,距离英里。
参考: http://www.meridianworlddata.com/Distance-Calculation.asp
我测试了所有的人,如果你真的担心的表现,你可以使用:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 53.0 * (lon2 - lon1)
这是一个足够好的近似。
如果你所担心的是接近那么曼哈顿距离可能就足够了。
boolean isProximate (double latE , double longE)
{
return ((Math . abs (latA - latB) < latE) && (Math . abs (longA - longB) < longE)) ;
}