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

是否有人可以使用PostGIS解决此问题?

#1 楼

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


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

评论


回复:您的最后一点:当然,如果将多边形转换为线,然后简化这些线,您仍然会遇到相同的问题。只有这一次,您的线条才会彼此不对齐。

–Theo F
20 Dec 10'在13:29

教程:trac.osgeo.org/postgis/wiki/…

– Francesco Frassinelli
20 Dec 27'9:36



#2 楼

您想将多边形变成线,使这些线成为简单的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));


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

评论


我发现我无法ST_SIMPLIFY ST_UNION的一组LINESTRINGS(即,我可以简化复杂的多线串)

–Theo F
20/12/11的1:31

#3 楼




为避免此问题,应使用拓扑约束对数据进行建模。
http://mapshaper.org/可以。

#4 楼

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