繁体   English   中英

PostGIS:两个相等的几何图形不相等?

[英]PostGIS: Two equal geometries are not equal?

我在不同的表中有两个几何图形,它们看起来相同,但一个有效,另一个无效。 我检查了一下:

select  ST_IsValid(_s.geom) as _gvalid, 
        ST_IsValid(s.geom) as gvalid,
        _s.geom = s.geom as  geom_bin_equal, 
        ST_SRID(_s.geom)=ST_SRID(s.geom) as srid_equal, 
        ST_EQUALS(_s.geom, s.geom), 
        ST_AsText(_s.geom) = ST_AsText(s.geom) as text_equal 
from _spatial_object _s, spatial_object s
where _s.id_spatial_object = 314 and s.id_spatial_object = 314

Output 这里:

在此处输入图像描述

到底怎么可能?

实际上,这两个几何图形都应该是无效的(内部在点 58.182000000000002 51.457000000000001 或附近断开连接)

几何学:

POLYGON((58.169 51.456,58.176 51.458,58.18 51.458,58.182 51.457,58.183 51.456,58.182 51.453,58.184 51.451,58.182 51.449,58.183 51.448,58.181 51.445,58.179 51.443,58.177 51.444,58.179 51.445,58.178 51.446,58.178 51.448,58.178 51.448 ,58.177 51.448,58.173 51.447,58.17 51.449,58.173 51.45,58.174 51.451,58.178 51.451,58.178 51.452,58.178 51.452,58.176 51.452,58.173 51.451,58.169 51.456),(58.169 51.456,58.1732222222222 51.4569444444444,58.182 51.457,58.169 51.456))

select ST_ISValid(geom), ST_IsValid(ST_GeomFromText(ST_AsText(geom))) from _spatial_object

输出

真假

在 2.4 版之前,使用=的相等性仅依赖于边界框比较,因此两个非常不同的几何图形仍然可以被视为相等。

使用ST_Equals时,两个几何图形必须“看起来”相同(但顶点顺序无关紧要)。 但是,该文档指出

[重要的]

如果任一几何无效,则此 function 将返回 false,除非它们是二进制相等的。

但也提到

已更改:2.2.0 如果它们是二进制相等的,即使对于无效几何也返回 true

因此,因为您使用的是旧版本,所以结果是不可靠的/错误的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM