我的数据库中记录了多个地址,并且我使用 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 ) ) ;
}