邮编距离范围公式。哪个公式是正确的?

时间:2010-10-26 02:10:41

标签: geolocation geospatial haversine

我需要从邮政编码中找到具有特定范围的所有邮政编码。我在数据库中拥有所有zipcode lat / lon。

我发现在线的两个公式彼此略有不同。哪一个是正确的?

公式1:

def latRange = range/69.172
def lonRange = Math.abs(range/(Math.cos(Math.toRadians(zip.latitude)) * 69.172));
def minLat = zip.latitude - latRange
def maxLat = zip.latitude + latRange
def minLon = zip.longitude - lonRange
def maxLon = zip.longitude + lonRange

公式2 :(除了以下内容与公式1相同:)

def lonRange = Math.abs(range/(Math.cos(zip.latitude) * 69.172));

(第二个没有Math.toRadians) 在我得到最小/最大Lat / Lon后,我打算使用两者之间的标准搜索数据库表。 哪个公式正确?

3 个答案:

答案 0 :(得分:1)

这取决于你的纬度/经度的单位。如果它们是度数,则需要转换为弧度。

答案 1 :(得分:0)

如果纬度和经度数据不是弧度数,那么您需要使用转换的数据。你应该知道,现在设置的方式你最终会得到 square 范围。

你最好在你的mysql查询中进行距离计算,使用毕达哥拉斯定理找到距离,这样你最终得到的是圆形范围。 这个问题可以帮助您开始使用它:mySQL select zipcodes within x km/miles within range of y

如果您需要提高性能,可以使用Sphinx对其进行索引。

答案 2 :(得分:0)

我建议让db做所有繁重的工作。有几个数据库有地理附加组件,但这里有几个示例:MongoDBpostgres+postgis