mysql两点间的距离简便算法
2015-11-17 00:00
1226 查看
摘要: mysql两点间的距离简便算法
MySQL的空间扩展(MySQL Spatial Extensions),它允许在MySQL中直接处理、保存和分析地理位置相关的信息,看起来这是使用MySQL处理地理位置信息的“官方解决方案”。 但恰恰很可惜的是:它却不支持某些最基本的地理位置操作,比如查询在半径范围内的所有数据。它甚至连两坐标点之间的距离计算方法都没有(MySQL Spatial的distance方法在5.*版本中不支持)
官方指南的做法是这样的:
这条语句的处理逻辑是先通过两个点产生一个LineString的类型的数据,然后调用GLength得到这个LineString的实际长度。
这么做虽然有些复杂,貌似也解决了距离计算的问题,但读者需要注意的是:这种方法计算的是欧式空间的距离,简单来说,它给出的结果是两个点在三维空间中的直线距离,不是飞机在地球上飞的那条轨迹,而是笔直穿过地球的那条直线。
所以如果你的地理位置信息是用经纬度进行存储的,你就无法简单的直接使用这种方式进行距离计算。
目前用到的一个数据信息
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;
MySQL的空间扩展(MySQL Spatial Extensions),它允许在MySQL中直接处理、保存和分析地理位置相关的信息,看起来这是使用MySQL处理地理位置信息的“官方解决方案”。 但恰恰很可惜的是:它却不支持某些最基本的地理位置操作,比如查询在半径范围内的所有数据。它甚至连两坐标点之间的距离计算方法都没有(MySQL Spatial的distance方法在5.*版本中不支持)
官方指南的做法是这样的:
GLength(LineStringFromWKB(LineString(point1, point2)))
这条语句的处理逻辑是先通过两个点产生一个LineString的类型的数据,然后调用GLength得到这个LineString的实际长度。
这么做虽然有些复杂,貌似也解决了距离计算的问题,但读者需要注意的是:这种方法计算的是欧式空间的距离,简单来说,它给出的结果是两个点在三维空间中的直线距离,不是飞机在地球上飞的那条轨迹,而是笔直穿过地球的那条直线。
所以如果你的地理位置信息是用经纬度进行存储的,你就无法简单的直接使用这种方式进行距离计算。
目前用到的一个数据信息
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;
相关文章推荐
- mysql数据丢失问题讨论(转)
- mysql 批量添加数据
- MySQL CHAR和VARCHAR那些事
- mysql使用MRG_MyISAM(MERGE)实现水平分表
- Mysql 应该选择什么引擎
- mysql redhat 64位 安装
- 配置服务器(某项目部署文档,主要是Mysql)
- sqlserver2005表转到mysql数据库
- mysql数据库总是连接失败,Warning:mysql_connect() :Connection refused...
- mysql安装过程记录和后续学习
- MySQL添加用户、删除用户与授权
- MySQL重置root用户密码的方法
- mysql主从复制及双主结构
- Mysql 锁粒度
- mysql中left join中的on条件 和 where条件区别
- MySQL完全备份+增量备份
- Navicat for Mysql的操作使用
- MySQL基本语法--函数1
- 解决hibernate向mysql插入中文乱码问题
- 如何正确获取MYSQL的ADO连接字符串