mysql两点间的距离简便算法

MySQL的空间扩展(MySQL Spatial Extensions),它容许在MySQL中直接处理、保存和分析地理位置相关的信息,看起来这是使用MySQL处理地理位置信息的“官方解决方案”。 但偏偏很惋惜的是:它却不支持某些最基本的地理位置操做,好比查询在半径范围内的全部数据。它甚至连两坐标点之间的距离计算方法都没有(MySQL Spatial的distance方法在5.*版本中不支持)spa

官方指南的作法是这样的:code

GLength(LineStringFromWKB(LineString(point1, point2)))

这条语句的处理逻辑是先经过两个点产生一个LineString的类型的数据,而后调用GLength获得这个LineString的实际长度。orm

这么作虽然有些复杂,貌似也解决了距离计算的问题,但读者须要注意的是:这种方法计算的是欧式空间的距离,简单来讲,它给出的结果是两个点在三维空间中的直线距离,不是飞机在地球上飞的那条轨迹,而是笔直穿过地球的那条直线。ci

因此若是你的地理位置信息是用经纬度进行存储的,你就没法简单的直接使用这种方式进行距离计算。it



目前用到的一个数据信息io

SELECT *, GLENGTH(LINESTRINGFROMWKB(LINESTRING(ss.GPS_LOCATION, GEOMFROMTEXT('POINT(102.749938 25.105486)')))) AS DISTANCE FROM senic_spot ss WHERE GLENGTH(LINESTRINGFROMWKB(LINESTRING(ss.GPS_LOCATION, GEOMFROMTEXT('POINT(102.749938 25.105486)')))) < 5.0 ORDER BY DISTANCE;扩展

相关文章
相关标签/搜索