【问题标题】:Correct way of finding distance between two coordinates using spatial function in MySql在MySql中使用空间函数查找两个坐标之间距离的正确方法
【发布时间】:2011-07-16 13:03:59
【问题描述】:

我正在尝试使用 Mysql 和 PostgresSQL 中的空间函数计算两个位置之间的距离。我从谷歌获取了纬度和经度。详情如下

位置一 - 纬度:42.260223;朗:-71.800010

位置二 - 纬度:42.245647;朗:-71.802521

使用的 SQL 查询:

选择距离(GEOMFROMTEXT('Point(42.260223 -71.800010)'),GEOMFROMTEXT('Point(42.245647 -71.802521)'))

两个数据库都给出相同的结果 0.014790703059697。但是当我在其他系统中计算距离时,结果是不同的。请参考以下链接

http://www.zip-codes.com/distance_calculator.asp?zip1=01601&zip2=01610&Submit=Search = 1.44 英里

http://www.distancecheck.com/zipcode-distance.php?start=01601&end=01610 = 1.53 英里

所以我想知道我的计算方法/查询是否正确。如果它是错误的,那么查询数据库距离的正确方法是什么。

【问题讨论】:

  • this的可能重复

标签: mysql gis spatial


【解决方案1】:

简单的答案是使用Haversine 公式。这假设地球是一个球体,但事实并非如此,但这不是一个糟糕的近似值。本演示文稿中描述了这一点以及许多其他细节:

http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

【讨论】:

  • 这个演示文稿可能是我遇到的最简洁、最直接的解决方案。它被配置为以英里为单位返回距离,但只需将地球半径的值换成公里当量,你就可以参加比赛了。
  • 是的,这是我找到的最好的推算器。只想确认公式返回的距离是公里还是英里?
  • 如果您使用 3956 作为半径,您的数字将以英里为单位。
【解决方案2】:

在上面的例子中,MySql 只是简单地应用了勾股定理:c2 = a^2 + b^2。在这种特定情况下,SQRT((42.245647 - 42.260223)^2 + (-71.802521^2 - -71.800010)^2) = 0.014790703。

使用 MySql 距离函数来计算球体上坐标的距离实际上有两个问题。 (1) MySql 正在计算平面上的距离,而不是球体。 (2) 结果是以度数而不是英里数的形式返回。要获得以英里、公里、英尺等为单位的真实球面距离,您需要通过确定从地球中心穿过纬度的直线的半径,将纬度和经度转换为要测量的单位你在测量。

要获得真正的衡量标准是相当复杂的,许多个人和公司都以此为职业。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多