2011-03-16 353 views
8

我想要在Mysql和PostgresSQL中使用空间函数来计算两个位置之间的距离。我从Google获取了经纬度。详情如下在MySql中使用空间函数找到两个坐标之间的距离的正确方法

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

位置2-纬度:42.245647;经度:-71.802521

SQL查询中使用:

选定的距离(GEOMFROMTEXT( '点(42.260223 -71.800010)'),GEOMFROMTEXT( '点(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英里

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

+0

可能重复(http://stackoverflow.com/questions/5217819/effectively-selecting-the-closest-distance-从数据库中记录/ 5217888#5217888) – BigFatBaby 2011-03-16 12:03:06

回答

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)结果以度数形式返回,而不是数英里。要获得以英里,公里,英尺等为单位的真实球面距离,需要通过确定纬线(一个或多个)的通过地球中心线的半径来将您的纬度和长度转换为要测量的单位。你在测量。

为了得到一个真正的措施是相当复杂的,许多个人和公司已经从事这个职业。

8

简单的答案是使用Haversine公式。这假设地球是一个球体,事实并非如此,但它不是一个不错的近似值。这与很多其他的细节在本演示描述:中[这里]

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

+1

此演示文稿可能是我遇到的最简洁直接的解决方案。它被配置为以英里为单位返回距离,但只需换出相当于公里等量的地球半径值,即可参加比赛。 – 2011-10-03 12:05:56

+0

是的,这是我找到的最好的计算器。只是想确认公式返回的距离是以公里还是英里计算的? – Prasad 2012-05-23 16:04:42

+0

如果您使用3956作为半径,您的数字将以英里数显示。 – 2012-05-24 01:42:21

相关问题