簡體   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