标签:postal-code gis mysql
多亏了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)使距离的计算更精确?
解决方法:
专注于(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))
然后可以使用SQL宽松地计算距离(例如,acos(xaxis * $xaxis yaxis * $yaxis zaxis * $zaxis)* 6367.0 / 1.852)(其中以$开头的那些对象以相同的方式针对相关起点进行了预先计算如上)
以这种方式进行的预计算将相对昂贵的触发推向一次事件,并简化了查询.
标签:postal-code,gis,mysql 来源: https://codeday.me/bug/20191210/2102021.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。