在MySql中使用空间函数找到两个坐标之间距离的正确方法

时间:2011-03-16 11:59:30

标签: mysql gis spatial

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

位置一 - Lat:42.260223; Lon:-71.800010

位置二 - Lat:42.245647; Lon:-71.802521

使用的SQL查询:

SELECT DISTANCE(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英里

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:5)

在上面的例子中,MySql只是应用毕达哥拉斯定理:c2 = a ^ 2 + b ^ 2。在这个具体案例中,SQRT((42.245647 - 42.260223)^ 2 +( - 71.802521 ^ 2 - -71.800010)^ 2)= 0.014790703。

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

要获得真正的衡量标准非常复杂,许多个人和公司已经从中做出了这样的事业。