MySQL:向函数 st_geometryfromtext 提供的 GIS 数据无效

Posted

技术标签:

【中文标题】MySQL:向函数 st_geometryfromtext 提供的 GIS 数据无效【英文标题】:MySQL: Invalid GIS data provided to function st_geometryfromtext 【发布时间】:2016-04-04 02:29:26 【问题描述】:

这是我的代码:

SET @poly =
    'Polygon((-98.07697478272888 30.123832577126326,
              -98.07697478272888 30.535734310413392,
              -97.48302581787107 30.535734310413392,
              -97.48302581787107 30.123832577126326))';

SELECT name
FROM county_shapes
WHERE MBRContains(ST_GeomFromText(@poly), SHAPE);

每当我运行时,我都会收到“mysql:提供给函数 st_geometryfromtext 的 GIS 数据无效”错误。

这会返回相同的错误:

SELECT name
FROM county_shapes
WHERE MBRContains(ST_GeomFromText('Polygon((-98.07697478272888 30.123832577126326,
              -98.07697478272888 30.535734310413392,
              -97.48302581787107 30.535734310413392,
              -97.48302581787107 30.123832577126326))'), SHAPE);

有什么想法吗?

【问题讨论】:

究竟是哪个版本的 MySQL 5.7?在5.7.5 之前,环必须通过将其序列中的第一个点和最后一个点定义为相同来显式关闭。 5.7.10。但是将第一个点和最后一个点定义为相同确实解决了这个问题。谢谢! 这个帖子引导我创建this one。 【参考方案1】:

您需要将第一个点和最后一个点指定为相同。

试试这个。

SET @poly =
    'Polygon((-98.07697478272888 30.123832577126326,
              -98.07697478272888 30.535734310413392,
              -97.48302581787107 30.535734310413392,
              -97.48302581787107 30.123832577126326,
              -98.07697478272888 30.123832577126326,))';

SELECT name
FROM county_shapes
WHERE MBRContains(ST_GeomFromText(@poly), SHAPE);

SELECT name
FROM county_shapes
WHERE MBRContains(ST_GeomFromText('Polygon((
              -98.07697478272888 30.123832577126326,
              -98.07697478272888 30.535734310413392,
              -97.48302581787107 30.535734310413392,
              -97.48302581787107 30.123832577126326,
              -98.07697478272888 30.123832577126326))'), SHAPE);

【讨论】:

哇,这很有道理!!! (从几何学的角度来看,多边形是一个封闭的平面图形,因此起点和终点必须相等……)太棒了! 您好!我这里还有一个问题:***.com/questions/45808396/…,你可以看看吗?谢谢【参考方案2】:

这是我的查询

SELECT * FROM my_table WHERE ST_Within(point(`lon`, `lat`),ST_GeomFromText('MultiPolygon(((-58.5832214 -34.5365410,-58.5832214 -34.5365410,-58.5832214 -34.5365410,-58.5832214 -34.5365410,-58.5832214 -34.5365410)),((-58.5887184 -34.6642799,-58.2893410 -34.6642799,-58.2893410 -34.5280609,-58.5887184 -34.5280609,-58.5887184 -34.6642799,-58.5887184 -34.6642799),(-58.4351311 -34.5975914,-58.4347000 -34.5976410,-58.4346085 -34.5977516,-58.4348602 -34.5979195,-58.4351311 -34.5975914,-58.4351311 -34.5975914)))'))>'0'

如果你看到第一个多边形的点,都是一样的,它不是一个有效的多边形

mysql 5.7 抛出了无效的 GIS 错误,但 mysql 8 没有抛出错误

删除第一个多边形解决了我的问题

【讨论】:

以上是关于MySQL:向函数 st_geometryfromtext 提供的 GIS 数据无效的主要内容,如果未能解决你的问题,请参考以下文章

mysql中,通过json_insert函数向json字段插入键值?json_insert函数的使用?

Mysql中使用函数处理时间

MySQL更新时间

MySQL

《源码分析转载收藏向—数据库内核月报》

phpmysql函数库