多亏了Wikileaks,在英国的英国我们现在可以访问每个邮政编码wikileaks postcodes uk重要信息的经度和纬度坐标.请勿在公共应用程序中使用此数据-担心数据已被故意破坏,您可能会被视为违反版权法.尝试使用来自Postcode UK site这样的开源网站的数据
现在,可以使用以下计算来计算每个点之间的距离(最初来自精美的Pro MysqL书):
The distance d between two points (x1,y1) and (x2,y2) can be calculated from the following equation (so long as x values are latitude and y values are longitude in radians,r is the radius of the sphere which is 3956 in miles):
d= acos(sin(x1)*sin(x2)+cos(x1)*cos(x2)*cos(y2-y1)) * r
现在这已经足够好了,还是应该使用新的GIS数据类型和功能,如果可以,如何将经度和纬度引用转换为Point数据类型?我意识到,由于地球不是一个完美的球体,因此我在上面引用的距离计算并不完美.但是对于我的目的来说已经足够了.使用新的GIS功能是否会a)使距离的计算更快b)使距离的计算更精确?
过去,我已经预先计算了部分,存储了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))
然后可以使用sql宽松地计算距离(例如,acos(xaxis * $xaxis yaxis * $yaxis zaxis * $zaxis)* 6367.0 / 1.852)(其中以$开头的那些对象以相同的方式针对相关起点进行了预先计算如上)
以这种方式进行的预计算将相对昂贵的触发推向一次事件,并简化了查询.