PostGIS中的环形自交点


10

这是先前问题的后续内容。您将看到我是PostGIS的新用户。

我查看了数据中拓扑的有效性,并在Landcover(多边形)数据集中发现了约1700个拓扑问题。这些都是“ Ring Self_intersection”。

使用Paul Ramsay此演示文稿中的一些有用信息(第20页),我试图相应地缓冲数据:

UPDATE schema.data SET the_geom = buffer(the_geom,0.0)在哪里有效(the_geom)= false和isvalid(buffer(the_geom,0.0))= true;

但是我得到了回应:

注意:在或接近点的环形自相交(已编辑)错误:关系“ sgm_buffer”的新行违反了检查约束“ enforce_geotype_the_geom”

**********错误**********

错误:关系“ sgm_buffer”的新行违反了检查约束“ enforce_geotype_the_geom”的SQL状态:23514

我也尝试过:

更新csgn.sgm_buffer SET the_geom = buffer(the_geom,0.0)

并获得:

错误:关系“ sgm_buffer”的新行违反了检查约束“ enforce_geotype_the_geom”

**********错误**********

错误:关系“ sgm_buffer”的新行违反了检查约束“ enforce_geotype_the_geom”的SQL状态:23514

那么,我是否认为该缓冲技术无法解决我的问题?还是我做错了什么?

拉姆齐先生随后在同一文档中继续提出了另一种处理“ 8位数字”多边形的技术。我不完全理解如何用代码完整地写出来(或者它在做什么以及是否对我有帮助):

选择ST_BuildArea(ST_Union('LINESTRING EMPTY',ST_ExteriorRing('POLYGON((...))'

所以....有人可以帮忙吗?由于时间紧迫,PostGIS技能有限,这真是一场噩梦。


1
返回什么“从sgm_buffer限制1中选择geometry_type(the_geom)”?另外,与另一个问题中提到的40小时运行时间有关,表上是否定义了空间索引?
diciu 2011年

您可能需要a ST_Multi()强制所有多边形均为MULTIPOLYGONs(这是一个假设)
Mike T

感谢您的评论-diciu我认为有索引,它们似乎在pgAdminIII中可见,但是也许我需要刷新它们?我可以找出解决方案以加快查询速度-我不知道运行它的合理时间是多少?Landcover具有大约2000万个功能。
ESRIHelp 2011年

Answers:


12

我认为发生的情况是缓冲时您的自相交多边形变成了MULTIPOLYGONS。

您有两种选择:

1删除约束“ enforce_geotype_the_geom”,您可以在pgAdmin中这样做
2将结果放入新表中,而不是更新旧表。这通常是一种很好的处理方式,因为这样您就无需在原始表中进行任何更改。该查询可能类似于:

CREATE TABLE new_buffered_table as
SELECT ST_Buffer(the_geom,0.0) as the_geom, gid FROM original_table;

当然,您可能希望将更多字段添加到新表中。

首先尝试缓冲区技巧。在第二种方法中,Paul可以告诉自己什么影响空线串。我不记得那魔术是怎么发生的。


0

几个月前我也遇到了同样的问题。我的数据库中有很多带有自相交的多边形。我使用了Niklas Aven的方法,但是没有用。我还使用了其他方法。

我的方法是从多边形中删除自相交。这是我使用的SQL查询:

     -- Create the new polygons 

SELECT ST_GeomFromText(polygone) as geom

   from (

    SELECT st_astext(ST_MakePolygon(linear)) as polygone

        from (
              SELECT st_astext
                ((ST_dump
                   (st_boundary
                      (ST_MakeValid
                     (ST_Transform
                        (ST_SETSRID
                           (geometry,4326),32631))))).geom) 
                          as linear from tables_name)
        as query2)

  as query1

where ST_area(polygone) > 1

我计算了多边形和自相交1的面积,由于自相交的面积很小,因此我将仅保留面积> 1.的多边形为公差。另请注意,如果您具有度数数据,则将SRID转换为米非常重要。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.