目录空间函数ST_Distance_Sphere()的使用测试st_distance_sphere计算两坐标点距离例子空间函数ST_Distance_Sphere()的使用 返回球体上两个点和/或多点之间的最小球面距离(
返回球体上两个点和/或多点之间的最小球面距离(以米为单位)
官网(https://dev.Mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html)
表结构如下:
create table t_geo_test
(
ID int auto_increment
primary key,
NAME varchar(64) not null,
SHAPE geometry not null
)
engine = InnoDB
charset = utf8;
测试数据:(插入坐标时,以下两种写法都可以)
INSERT INTO t_geo_test VALUES (1, '测试', POINT(121.590347, 31.388094));
INSERT INTO t_geo_test VALUES (2, 'somewhere', ST_GeomFromText('POINT(121.366961 31.190049)'));
计算距离:
SELECT st_distance_sphere(POINT(121.590347, 31.388094),SHAPE) AS distant FROM t_geo_test;
查询到某点的距离小于一个值的所有数据:
SELECT *, ST_Distance_Sphere(POINT(121.590347, 31.388094),SHAPE) AS distant FROM t_geo_test WHERE ST_Distance_Sphere(POINT(121.590347, 31.388094),SHAPE) < 1000 ORDER BY distant;
注意:
坐标不能随意写测试数据,注意官网中的说的条件:
否则则会报错:
[HY000][1210] Incorrect arguments to st_distance_sphere
最近项目中需要计算一个坐标点与多个点的距离,发现用python来实现效率很低。经同事推荐,将这些坐标点存入了mysql数据库,然后用数据库自带的方法st_distance_sphere计算距离。经过比较发现确实效率提高了很多,特此记录一下。
注意:使用st_distance_sphere需要Mysql数据库版本为5.7及以上。
现数据库表中有如下坐标点数据:
需要找出与第一个坐标点(113.8064049, 22.7300434)相距小于3500米的坐标点(表中共有3500个点)。
sql实现:
select t.num,t.city,t.wgs84_lng,t.wgs84_lat,
TRUNCATE(st_distance_sphere(point (113.8064049, 22.7300434),point(t.wgs84_lng,t.wgs84_lat)),2) as distance
from moran_point t
where t.city = '深圳'
HAVING distance > 0 and distance < 3500
ORDER BY distance;
查询结果:
可以看到,共找出41个满足条件的坐标点,且耗时仅为0.066秒,效率提升非常多。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
--结束END--
本文标题: MySQL空间函数ST_Distance_Sphere()的使用方式
本文链接: https://www.lsjlt.com/news/173110.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0