【问题标题】:zipcode distance range formula. Which formula is correct?邮政编码距离范围公式。哪个公式是正确的?
【发布时间】:2010-10-26 02:10:41
【问题描述】:

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

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

一级方程式:

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 条件搜索数据库表。 哪个公式是正确的?

【问题讨论】:

  • 你应该用谷歌搜索“Haversine forumula”。充其量,您上面的代码正在确定一些矩形,我认为您想确定围绕中心点的圆圈内的邮政编码。

标签: geolocation geospatial haversine


【解决方案1】:

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

【讨论】:

  • 我不认为数据是弧度的。我在这里得到它:micahcarrick.com/…
  • @Tihom - 应该很容易分辨。如果您对 Pi 有任何值,则以度为单位。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 2016-02-27
      相关资源
      最近更新 更多