MySQL中使用空间位置需注意的问题

版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/woson_wang/article/details/88828107

空间位置数据类型

MySQL支持的空间数据类型 1
GEOMETRY
POINT
LINESTRING
POLYGON

最常用的为GEOMETRY,POLYGON,POINT。因为目前很多应用都是判断是否某个点在所画范围内,或者是两个多边形范围的交叉情况。

GEOMETRY

GEOMETRY是一种强大的空间数据类型,可以用来表示POINT, LINESTRING, and POLYGON,即另外的三种空间数据类型均可以使用GEOMETRY来表示(线上也推荐使用此种模式,避免出现兼容性问题

.
.

常见问题

空间索引

所有的空间字段不能为NULL,不然在创建空间索引的时候会报错:

mysql> create table spatest(id int auto_increment primary key, userspace geometry default null,  SPATIAL KEY `idx_userspace` (`userspace`));
ERROR 1252 (42000): All parts of a SPATIAL index must be NOT NULL

.

关于使用polygon数据类型

polygon中的打点,必须为首尾相连,形成闭合图形(在应用中容易打点时忽略最后一个点

mysql> select st_astext(ST_geomfromtext('POLYGON(( 119.41667 24.078513,115.416761 26.078578,115.41725 24.078327,113.4177 24.078027,115.418154 25.077749, 119.41667 26.078513))')); 
ERROR 3037 (22023): Invalid GIS data provided to function st_geomfromtext.


mysql> select st_astext(ST_geomfromtext('POLYGON(( 119.41667 24.078513,115.416761 26.078578,115.41725 24.078327,113.4177 24.078027,115.418154 25.077749, 119.41667 24.078513))')); 
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| st_astext(ST_geomfromtext('POLYGON(( 119.41667 24.078513,115.416761 26.078578,115.41725 24.078327,113.4177 24.078027,115.418154 25.077749, 119.41667 24.078513))')) |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| POLYGON((119.41667 24.078513,115.416761 26.078578,115.41725 24.078327,113.4177 24.078027,115.418154 25.077749,119.41667 24.078513))                                 |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

**注意**
MySQL8.0将astext函数转换为st_astext。

空间相关函数

常用的空间相关函数2
ST_Intersects(g1, g2):
Returns 1 or 0 to indicate whether g1 spatially intersects g2.

ST_Contains(g1, g2):
Returns 1 or 0 to indicate whether g1 completely contains g2. This tests the opposite relationship as ST_Within().


  1. MySQL空间数据类型 ↩︎

    扫描二维码关注公众号,回复: 6009550 查看本文章
  2. MySQL支持的空间函数 ↩︎

猜你喜欢

转载自blog.csdn.net/woson_wang/article/details/88828107