postgresql - POSTGRES POSTGIS sfcgal - st_3darea 不工作

标签 postgresql postgis

我对 sfcgal 扩展方法(例如 st_3darea、st_3dintersection、使用多重多边形)有疑问。

当多边形接触时,我收到一条错误消息,指出多边形相交。 这两个三角形显然不相交,只是接触:

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

请帮忙。

欢迎提出任何建议

最佳答案

您的MULTIPOLYGON无效,因为多边形相交。使用 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));

    st_3darea     
------------------
 1.41421356237309
(1 row)

正如@JGH 所指出的(参见评论):

ST_Overlaps, ST_Touches, ST_Within all imply spatial intersection. If any of the aforementioned returns true, then the geometries also spatially intersect. Disjoint implies false for spatial intersection.

关于postgresql - POSTGRES POSTGIS sfcgal - st_3darea 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68379566/

相关文章:

database - Flask Migrate 和 PostgreSQL 数据更新

python - 安装 Postgis (PostgreSQL)(Django)(Mac OS x 10.7) 时遇到问题

sql - 表中的更新日期,Postgresql

postgresql加载sql脚本

postgresql - Postgis最近的坐标

postgresql - 如何将非空间表连接到 Postgis 数据库中的空间表(两个表都在不同的数据库中)

postgresql - ST_DWithin 不使用带有非文字参数的索引

在 postgresql 中创建扩展测试

postgresql - 强制 Ansible 从组中收集事实

django - Django 1.7、uwsgi 和 PostgreSQL 的随机数据库错误