Postgresql postgis消除多边形的内部边界

Postgresql postgis消除多边形的内部边界,postgresql,postgis,Postgresql,Postgis,我在PostgreSQL中构建了一个postgis表,其中包含一组多边形,这些多边形是连接许多较小多边形的结果。连接的结果是具有外部边界的多边形,其中一些多边形具有内部边界(内部多边形)。我喜欢去除内部边界 新表的构造包括: insert into dl_table select 1 as id_level, 18 as id_sublevel, ST_snaptogrid(ST_Union(geom),0.0001) as geom from small_

我在PostgreSQL中构建了一个postgis表,其中包含一组多边形,这些多边形是连接许多较小多边形的结果。连接的结果是具有外部边界的多边形,其中一些多边形具有内部边界(内部多边形)。我喜欢去除内部边界

新表的构造包括:

insert into dl_table 
    select 1 as id_level, 18 as id_sublevel, 
        ST_snaptogrid(ST_Union(geom),0.0001) as geom 
    from small_polygons_table 
    where id_sp in 
          (select id_sp from cdl where id_level=1 and id_sublevel=18);
geom的结果是:

<Polygon>
  <outerBoundaryIs>
    <LinearRing>
      <coordinates>
         ...points...
      </coordinates>
    </LinearRing>
  </outerBoundaryIs>
  <innerBoundaryIs>
    <LinearRing>
       <coordinates>
         ...points...
       </coordinates>
    </LinearRing>
  </innerBoundaryIs>
  <innerBoundaryIs>
    <LinearRing>
      <coordinates>
         ...points...
      </coordinates>
    </LinearRing>
  </innerBoundaryIs>
</Polygon>

…点。。。
…点。。。
…点。。。
现在我想删除这些内部边界。

ST_Union()
将分解内部边界,因此您确定所有坐标都完全相同吗

您的查询通常是使用如下方式编写的
JOIN

insert into dl_table 
  select id_level, id_sublevel, ST_snaptogrid(ST_Union(geom),0.0001) as geom 
  from small_polygons_table
  join cdl using (id_sp)
  where id_level = 1 and id_sublevel = 18;

仅供以后发现此问题的其他人参考:这里的问题是源数据不包含任何拓扑。没有“神奇”的方法来清理不应该重叠的重叠多边形,或者应该共享公共边界的多边形之间的间隙。这里的一个选项是在
St_Union
之前执行
St_snaptogrid
,这将至少清理一点,但代价是失去准确性。但最终它确实取决于源数据,需要大量的尝试和错误,也可能需要手工操作。有关更多信息,请参阅。

多亏了您的评论,我仔细检查了数据,发现并非所有行都在同一投影中。更正了这一点并重写了查询,尽管连接表的公共键是id_级别和id_子级别,但问题仍然存在。检查数据时,有许多未闭合的多边形(因此“捕捉到栅格”)以及源多边形之间的交点。关于如何纠正这个问题有什么想法吗?