0

在两个多边形上运行 ST_EQUALS 时,我得到了这些奇怪的结果:

SELECT ST_EQUALS(
ST_GEOMFROMTEXT(
'POLYGON((81.65 34.8667,81.65 5.9167,75.9833 34.8667,75.9833 5.9167,81.65 34.8667))',4326), 
ST_GEOMFROMTEXT(
'POLYGON((81.65 34.8667,81.65 5.9167,75.9833 34.8667,75.9833 5.9167,81.65 34.8667))',4326));

多边形的坐标完全相同,但 MYSQL 返回 0 表示它们不相等。

当我在没有 SRID(默认 = 0)的情况下运行查询时,

SELECT ST_EQUALS(
ST_GEOMFROMTEXT(
'POLYGON((81.65 34.8667,81.65 5.9167,75.9833 34.8667,75.9833 5.9167,81.65 34.8667))'), 
ST_GEOMFROMTEXT(
'POLYGON((81.65 34.8667,81.65 5.9167,75.9833 34.8667,75.9833 5.9167,81.65 34.8667))'));

MySQL 返回 1 表示它们确实相等。

我在这里缺少什么吗?谢谢你。

4

1 回答 1

1

这是一个无效的多边形:

SELECT ST_IsValid(ST_GEOMFROMTEXT('POLYGON((81.65 34.8667,81.65 5.9167,75.9833 34.8667,75.9833 5.9167,81.65 34.8667))',4326)) AS v

0

对于无效的几何图形,任何地理空间函数的结果都是未定义的——它可以给出正确的结果,或者可以给出随机值。使用几何 SRID (0) 似乎可以正常工作,并使用测地线 SRID (4326) 给出不同的结果。

有关有效几何的更多详细信息,请参见: https ://dev.mysql.com/doc/refman/5.7/en/geometry-well-formedness-validity.html

多边形不是自相交的规则在这里被打破了。

对于无效几何,该文档说“由于计算费用,MySQL 不会显式检查几何有效性。空间计算可能会检测到无效几何的某些情况并引发错误,但它们也可能返回未定义的结果而没有检测到无效性。 "

于 2022-02-13T03:40:32.230 回答