需求
把地理围栏信息的中心(重心又或者叫做质心)找出来
注意点
一定要注意,需要第一个点和最后一个点相同,才能形成闭合多边形
,这点很重要,不然会报错
> 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.