2

我需要从一个邮政编码中找到一定范围内的所有邮政编码。我在数据库中有所有的邮政编码纬度/经度。

我在网上找到了两个略有不同的公式。哪一个是正确的?

公式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)在获得最小/最大纬度/经度后,我打算使用 between 条件搜索数据库表。 哪个公式是正确的?

4

3 回答 3

1

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

于 2010-10-26T02:17:00.213 回答
0

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

于 2010-10-26T03:04:04.983 回答
0

如果您的纬度和经度数据还没有以弧度表示,那么您需要使用可以转换的数据。您应该知道,现在设置的方式最终会得到一个正方形范围。

你最好在你的mysql查询中进行距离计算,使用勾股定理来找到距离,这样你就得到了一个圆形范围。这个问题应该可以帮助您开始:mySQL select zipcodes within x km/miles within range of y

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

于 2010-10-26T02:35:45.443 回答