我需要从邮政编码中找到具有特定范围的所有邮政编码。我在数据库中拥有所有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后,我打算使用两者之间的标准搜索数据库表。 哪个公式正确?
答案 0 :(得分:1)
这取决于你的纬度/经度的单位。如果它们是度数,则需要转换为弧度。
答案 1 :(得分:0)
如果纬度和经度数据不是弧度数,那么您需要使用转换的数据。你应该知道,现在设置的方式你最终会得到 square 范围。
你最好在你的mysql查询中进行距离计算,使用毕达哥拉斯定理找到距离,这样你最终得到的是圆形范围。 这个问题可以帮助您开始使用它:mySQL select zipcodes within x km/miles within range of y。
如果您需要提高性能,可以使用Sphinx对其进行索引。
答案 2 :(得分:0)
我建议让db做所有繁重的工作。有几个数据库有地理附加组件,但这里有几个示例:MongoDB,postgres+postgis