我试图在Mysql和PostgresSQL中使用空间函数计算两个位置之间的距离.我从谷歌那里获取了经纬度.详情如下
位置一 - Lat:42.260223; Lon:-71.800010
位置二 - Lat:42.245647; Lon:-71.802521
SQL Query使用:
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英里
所以我想知道我的计算方法/查询是否正确.如果它是错的,那么查询数据库距离的正确方法是什么.
简单的答案是使用Haversine公式.这假设地球是一个球体,它不是,但它并不是一个糟糕的近似值.本演示文稿中描述了许多其他详细信息:
http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL
小智 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)结果以度数的形式返回,而不是英里.要获得以英里,公里,英尺等为单位的真实球面距离,您需要通过确定从地球中心到纬度的线的半径,将纬度和长度转换为要测量的单位.你正在测量.
要获得真正的衡量标准是非常复杂的,许多个人和公司都已经从事这项工作.
| 归档时间: |
|
| 查看次数: |
12936 次 |
| 最近记录: |