由于维基解密,在英国,我们现在可以访问我们的经度和纬度协调每一个邮编维基解密英国邮编重要。不要在公共应用程序中使用这些数据--人们担心这些数据已经被故意破坏,而且您可能被认为违反了版权法。尝试使用像以下邮政编码英国网站这样的开源站点的数据
现在,可以使用以下计算来计算每个点之间的距离(最初来自精细图书Pro Mysql):
两点(x1,y1)和(x2,y2)之间的距离d可以根据以下公式计算(只要x值是纬度,y值是弧度,r是球体半径,以英里为单位): acos(sin(x1)*sin(x2)+cos(x1)*cos(x2)*cos(y2-y1)) *r
这是否足够好,或者我应该使用新的GIS数据类型和功能,如果是的话,如何将我的经度和纬度引用转换为Point数据类型?我意识到,因为地球不是一个完美的球体,所以我上面引用的距离计算并不完美,但是它对我的目的来说已经足够好了。使用新的GIS功能( a)使距离计算更快( b)使距离计算更精确吗?
发布于 2009-09-22 10:29:23
以(A)为重点:
在过去,我预先计算了部分,存储lat、long、xaxis、yaxis和zxais,其中x、y&z定义为:
xaxis = cos(radians(Lat)) * cos(radians(Lon))
yaxis = cos(radians(Lat)) * sin(radians(Lon))
zaxis = sin(radians(Lat))
然后,可以使用类似于(acos( xaxis * $xaxis + yaxis * $yaxis + zaxis * $zaxis ) * 6367.0 / 1.852)
的SQL来计算距离(其中,以$开头的距离将以与上面相同的方式为所讨论的起始点预先计算)
预计算以这种方式将相对昂贵的trig推到一个时间事件,并简化了查询。
https://stackoverflow.com/questions/1461695
复制