使用PostGIS简化相邻的多边形?


24

我在简化一组相邻的多边形时遇到了一个问题。如果我使用Douglas-Peucker算法(许多开放源代码工具都使用过的算法)分别简化每个多边形,则生成的多边形通常不再相邻。例如,在简化国家/省的边界时会出现此问题。

有人使用PostGIS有解决方案吗?

Answers:


19

拓扑矢量模型将满足您的需求。在非拓扑存储(例如shapefile)中,几何之间的单个边存储两次。在拓扑向量中,区域与线分开存储,因此可以在不影响拓扑的情况下进行调整。我找不到合适的图,所以我创建了这个简单的示例,其中A,B和C的面积是根据将它们分开的线的交点(连接1-4)计算出来的。 拓扑向量的示例

ArcInfo将此模型用作coverage,GRASS将该模型用作默认矢量模型,并且可以将其与实验性PostGIS拓扑工具一起用于PostGIS 。也许一个更简单的解决方案是将数据转换为线条,删除多余的部分,然后在简化后重新创建多边形。


15

您想将多边形变成线,使这些线成为简单的coverage边缘,简化这些边缘,然后再次将其重新构建为多边形,最后使用多边形点将旧多边形的属性与新的。

CREATE TABLE rings AS SELECT (ST_DumpRings(polys)).geom AS rings FROM polytable;
CREATE TABLE simplerings AS SELECT ST_Union(rings) AS simplerings FROM rings;
CREATE TABLE newpolycollection AS SELECT ST_Polygonize(ST_Simplify(simplerings, 10.0)) AS geom FROM simplerings;
CREATE TABLE newpolysnoattributes AS SELECT (ST_Dump(geom)).geom FROM newpolycollection;
CREATE TABLE newpolytable AS SELECT new.geom, old.attr FROM newpolysnoattributes new, polytable old WHERE ST_Contains(new.geom, ST_PointOnSurface(old.polys));

上面有错误,但是核心概念在那里。如果愿意,您可以在一个查询中完成所有操作。



-1

您需要细分。在旧的创建几何的ARC / INFO理论中,一条折线创建了两个相邻的几何并共享了该折线。因此,当您泛化时,它泛化了两个边界,因为它引用了相同的折线。

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.