我在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>
现在我想删除那些内部界限。
答案 0 :(得分:1)
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;
答案 1 :(得分:0)
仅供其他人发现此问题参考:此处的问题是源数据不包含任何拓扑。没有&#34;魔法&#34;清理不应该重叠的重叠多边形的方法,或者应该共享共同边界的多边形之间的间隙。这里的一个选择是在St_snaptogrid
之前执行ST_Union
,这将至少清理一下,但代价是失去准确性。但最终它确实取决于源数据,并且将涉及大量的反复试验,也可能涉及手动工作。有关详细信息,请参阅https://gis.stackexchange.com/questions/31895/joining-lots-of-small-polygons-to-form-larger-polygon-using-postgis。