记录mysql空间函数操作

空间函数理解

mysql 使用 point 类型保存几何图形数据,目前接触的场景是用于保存地址经纬度和地图网格边界数据。

当数据只保存一个经纬度数据,显示的就是一个点(下图所示)

当数据保存了多个经纬度数据,显示的就是一个网格,因为网格边界就是由多个经纬度组成(下图所示)

空间函数的基本操作

1)创建含地址坐标数据字段的表

CREATE TABLE `addr_example` (
  `ADDR` varchar(122) DEFAULT null COMMENT '地址',
  `LOCATION_BD` point DEFAULT NULL COMMENT '地址坐标'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2)ST_GeomFromText函数 插入地址坐标数据

 INSERT INTO addr_example(ADDR, LOCATION_BD)VALUES('广东省广州市', ST_GeomFromText('POINT(113.27324 23.15792)'));

3)ST_WITHIN函数,比较两个地址坐标数据是否相等。相等返回 1  不相等返回 0 (如果是面:某几何值是否在空间上包含于另一个几何值内部)

select ST_WITHIN(ST_GeomFromText('POINT(113.27324 23.15792)'),LOCATION_BD) res from addr_example

4)查询地址坐标数据(空间函数类型返回)

select addr,location_bd from addr_example 

空间函数类型返回 对应 java 对象 

select addr,location_bd from addr_example 
-- 空间函数类型返回 对应 java 对象 
@TableName("addr_example")
public class GdGridBoundInfo extends BaseBean {
	private String addr;
	private GmpPolygon locationBd;
}

5)查询地址坐标数据(字符串类型返回)

select addr,st_AsText(location_bd) location_bd from addr_example 

 字符串类型返回 对应java 对象 

@TableName("addr_example")
public class GdGridBoundInfo extends BaseBean {
	private String addr;
	private String locationBd;
}

6)查询地址经度和纬度

select st_x(location_bd) x,st_y(location_bd) y from addr_example

 7)查询地址距离(单位米)

SELECT st_distance_sphere(ST_GeomFromText('POINT(113.27324 22.15792)'),location_bd) AS distant FROM addr_example;

8)查询一个点为圆心,方圆2000米内的数据
round函数说明:查询select round(1123.26723,1);结果: 1123.3

SELECT
	st_x ( location_bd ) x,
	st_y ( location_bd ) y,
	round(( ST_DISTANCE_SPHERE (ST_GeomFromText('POINT(113.27324 22.15792)'), location_bd )), 1 ) AS distance 
FROM
	addr_example
HAVING 
	distance <=2000	

更多空间函数操作参考:19.5.2. Geometry函数_MySQL 中文文档 (mysqlzh.com)

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值