使用MySQL找出地理围栏中心(重心)的简单方法

12 篇文章 4 订阅

需求

把地理围栏信息的中心(重心又或者叫做质心)找出来

注意点
一定要注意,需要第一个点和最后一个点相同,才能形成闭合多边形,这点很重要,不然会报错

> 3037 - Invalid GIS data provided to function st_geometryfromtext.

下面是正文

数据库:mysql

1.创建表 需要用MyISAM引擎

建表的时候要用MyISAM引擎才有geometry数据类型
在这里插入图片描述

字段类型 选择geometry

我这里建表只用了一个id和一个value字段
在这里插入图片描述

2.插入数据,使用POLYGON数据格式

插入数据values里面使用 ST_GeomFromText ( ‘POLYGON( 你的点位经纬度list )’)
经纬度用空格分割,点位用逗号分隔
插入示例:

INSERT INTO test (value ) VALUES
    ( ST_GeomFromText ( 'POLYGON((104.141035 30.744607,104.141969 30.745554,........,104.143137 30.743148,104.14116 30.744064,104.141035 30.744607))' ) ),
    ...多个围栏...
    ( ST_GeomFromText ( 'POLYGON((104.141035 30.744607,104.141969 30.745554,........,104.143137 30.743148,104.14116 30.744064,104.141035 30.744607))' ) );

插入结果
在这里插入图片描述

3.使用函数 ST_Centroid(A)查询

要用质心函数 ST_Centroid(A) 来进行查询

select ST_Centroid(value) from test;

结果出来是point点,也就是这个围栏对应的中心,也就是重心:

mysql> select id,ST_Centroid(value) from test;
+-----+----------------------------------------+
| id  | ST_Centroid(value)                       |
+-----+----------------------------------------+
| 287 | POINT(104.773746348887 30.691273417045)  |
| 288 | POINT(104.732713791771 30.6562428532069) |
| 289 | POINT(104.62874195557 30.7420878262838)  |
| 290 | POINT(104.496235043799 30.617476753851)  |
| 291 | POINT(104.475694673563 30.8735092913122) |
| 292 | POINT(104.467878382901 30.9512705394996) |
| 293 | POINT(104.378651196693 30.7213556078043) |
| 294 | POINT(104.383316868526 30.4877856514958) |

再强调一下
注意点
需要第一个点和最后一个点一样才能形成闭合多边形
否则会报错

3037 - Invalid GIS data provided to function st_geometryfromtext.

参考:
MYSQL空间查询函数
MySQL的空间查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值