mysql中point的使用详解
作者:Mcband
MySQL的point函数是一个用于处理空间坐标系的函数,它可以将两个数值作为参数,返回一个Point对象,这篇文章主要介绍了mysql中point的使用,需要的朋友可以参考下
前言
MySQL中的point用于表示GIS中的地理坐标,在GIS中广泛使用,本文主要讲解point类型的简单使用
一.创建带有point类型的表格
CREATE TABLE `test-point` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '序号', `point` point NOT NULL COMMENT '经纬度', `text` varchar(50) DEFAULT NULL COMMENT '描述', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4;
二.添加数据
INSERT INTO `test-point` ( point,text ) VALUES ( st_GeomFromText ( 'POINT(1 1)' ),'第1个点');
INSERT INTO `test-point` ( point,text ) VALUES ( st_PointFromText ( 'POINT(2 2)' ),'第2个点');
注意:其中st_GeomFromText ,st_PointFromText 是将字符串转换成point类型的数据,这两个都可以,其中st_GeomFromText 是父级,st_PointFromText 是子级.
三.查询数据
SELECT id,st_x(point) x,st_y(point) y,point,text FROM `test-point`
update `test-point` set point=st_GeomFromText('POINT(6 6)') where id =10;
注意:st_x(point)是获取POINT(1 2)中的1,st_y(point)是获取POINT(1 2)中的2,st_AsText(point)是将point类型转换成字符串.
四.更新数据
update `test-point` set point=st_PointFromText('POINT(5 5)') where id =10;
update `test-point` set point=st_GeomFromText('POINT(6 6)') where id =10;
五.查询一个点与数据库其他点之间的距离
SELECT id, st_x ( point ) latitude, st_y ( point ) longitude, round(( ST_DISTANCE_SPHERE ( st_GeomFromText ( 'POINT (1 1)' ), point )), 1 ) AS distance FROM `test-point`
注意:st_distance_sphere函数是将坐标距离转换成米也可以使用st_distancest_distance_sphere函数的计算结果要比st_distance转换为米的结果更精确。本人测试st_distance函数发现,随着点与点之间的距离增加误差越来越大.
六.查询一个点为圆心,方圆2000米内的数据
SELECT id, st_x ( point ) latitude, st_y ( point ) longitude, round(( ST_DISTANCE_SPHERE ( st_GeomFromText ( 'POINT (1 1)' ), point )), 1 ) AS distance FROM `test-point` HAVING distance <=2000
注意
- Mysql5.7版本的语法不需要加"st_"这个前缀
- POINT(经度,纬度) 经度和纬度不要写反,5.7查询不到结果,8.0版本查询为零,因为经度范围是 -180°-180°,纬度是-90°-90°,如果写反,纬度会超出范围,导致报错
- POINT类型里面单位是小数,不是度.POINT(12.1 14.6),可以看我以前的文章经纬度度数和小数之间的转化
到此这篇关于mysql中point的使用的文章就介绍到这了,更多相关mysql point使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!