mysql两点间的距离简便算法

本文深入分析了MySQLSpatialExtensions作为处理地理位置信息的官方解决方案存在的局限性,如无法实现基本的地理位置操作和计算两点间距离等问题。同时,介绍了通过复杂的计算逻辑来间接实现距离计算的方法,并指出这种方法计算的是欧式空间的距离而非实际路径距离。最后,提出了一些替代方案以解决在实际应用中遇到的地理信息系统需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

转载于:https://my.oschina.net/u/2356499/blog/531520

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值