【发布时间】:2021-07-14 14:02:19
【问题描述】:
我对 st_3darea、st_3dintersection 等 sfcgal 扩展方法有问题,使用多面体。
当多边形接触时,我收到一条错误消息,指出多边形正在相交。 这两个三角形显然不相交,只是接触:
SELECT st_3darea(ST_GeomFromText(
'MULTIPOLYGON Z (((1 0 0, 1 1 0, 0 1 1, 1 0 0)),
((1 0 0, 0 1 1, 0 0 1, 1 0 0)))'));
但我得到了一个错误:
ERROR: MultiPolygon is invalid : intersection between Polygon 0 and 1 : MULTIPOLYGON(((1/1 0/1 0/1,1/1 1/1 0/1,0/1 1/1 1/1,1/1 0/1 0/1)),((1/1 0/1 0/1,0/1 1/1 1/1,0/1 0/1 1/1,1/1 0/1 0/1)))
SQL state: XX000
请帮忙。
欢迎提出建议
【问题讨论】:
-
你试过 ST_MakeValid 了吗?
SELECT st_3darea(st_makevalid('MULTIPOLYGON Z (((1 0 0, 1 1 0, 0 1 1, 1 0 0)), ((1 0 0, 0 1 1, 0 0 1, 1 0 0)))'::geometry)); -
谢谢,它正在使用 makevalid。但是为什么它不是有效的呢?
-
doc 说 “ST_Overlaps、ST_Touches、ST_Within 都暗示空间相交。如果上述任何一个返回 true,则几何图形也在空间相交。不相交意味着空间相交为 false。”
-
@GrigoryIlizirov postgis 抱怨,因为多边形“共享一些坐标”(触摸)。我相信 JGH 的评论已经足够清楚了。欢呼
标签: postgresql postgis