【发布时间】:2020-12-21 12:21:51
【问题描述】:
我在不同的表中有两个几何图形,它们看起来相同,但一个有效,另一个无效。我查了一下:
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
在这里输出:
这到底是怎么回事?
实际上,这两个几何图形都应该是无效的(内部在点 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
输出
真假
【问题讨论】:
-
根据经验,永远不要使用无效的几何图形,因为某些(大多数?)函数会返回不可靠的结果。
-
您使用的是哪个版本的 PostGIS? 2.4版
=changed的定义(从边界框相等到完全相等) -
@JGH POSTGIS="2.1.8 r13780" GEOS="3.5.0-CAPI-1.9.0 r4090" PROJ="Rel. 4.8.0,2012 年 3 月 6 日" GDAL="GDAL 1.11 .1,发布于 2014 年 9 月 24 日" LIBXML="2.7.8" LIBJSON="UNKNOWN" RASTER
-
啊,那就这样吧,我加个答案
-
我主要担心的是验证给出了错误的结果
标签: postgresql geometry postgis