如何智能地降低或平滑GIS数据(简化多边形)?

53

我有详细的美国县地图,来自TIGER LINE数据集。我应该如何对数据进行采样、平滑或降级,以便获取更直、更盒状且噪声较少的形状,以代表地理特征 - 在这种情况下仅限于县界和州界,但也可能适用于一般情况?

如果可以有效地完成渲染,采样可以在渲染时发生,或者可以生成并存储并行数据集。我正在使用PostGIS,而这些线是通过shp2pgsql生成的多段折线 - 但任何将曲线减少为大致相同重要性的平滑线的解决方案都将非常有用。

7个回答

64
Douglas-Peucker绝对是正确的方法。对于那些遇到类似问题的人,我想在这里添加一些在PostGIS和QGIS中访问其实现的简单方法。目标是从像这样的东西开始:

alt text

最后得到像这样的东西:

alt text

在PostGIS中,Douglas-Peucker算法被实现为simplify,语法详见 bostongis.org,大致为: SELECT transform(simplify(transform(the_geom, 2249), 500),4326) from the_geo_table 这甚至在完整的全国数据集上也很好地运行,只有少量错误似乎是由于不良底层数据造成的。同时,在QGIS中,菜单项工具 > 几何工具 > 简化几何形状将导出任何几何形状的简化形状文件,并将其作为图层添加到您当前的项目中。
这是一个非常基本的工具集,我提出的问题过于简单,虽然了解底层数学很好,但这里有一个很好的解释:http://www.mappinghacks.com/code/PolyLineReduction/,其中包括样例代码,但实际上并不太必要!

5
好的。有没有一种方法可以在保持与其他多边形的共同边缘的同时完成这个操作?例如,简化欧洲国家,使其具有共同的边界。 - naught101
在姐妹站点GIS-SE上的如何在QGIS中平滑/概括多边形问题中介绍了其他多边形概括选项。 - matt wilkie
2
很酷,但是当多个多边形相邻时该如何处理?比如当你有不同邮政编码区域的形状时? - Gerwald
在 QGIS 2.14.1-Essen 中:处理 > 工具箱 > QGIS 地理算法 > 矢量几何工具 > 简化几何体。 - Rick Mohr
仅针对PostGIS的新版本,函数simplify的名称已更改为st_simplify。同样适用于transform。 - Grzegorz Grabek
请使用ST_SimplifyPreserveTopology。它使用与ST_Simplify(Douglas-Pecker)相同的算法,但保证不会产生无效几何图形。 - Rauni Lillemets

31
简单地丢弃点的问题在于,您可能会迅速扭曲原始多边形的形状。更好的方法是从另一个方向来解决问题;从基本的多边形近似开始,然后向复杂的形状进行逐步改进。
这种方法的一个很好的例子是Douglas-Puecker算法。您可以从完整多边形中选择两个顶点开始。通过选择距离第一二个顶点之间的边最远的那个顶点来添加第三个顶点。继续添加点,直到您有了足够类似于原始多边形的东西。

26
不要使用QGIS,我建议使用ogr2ogr,因为它不会删除多边形
ogr2ogr output.shp input.shp -simplify 0.0001

3
简化单位与投影单位相同吗?例如,它们可能是纬度或经度度数吗? - Lucas Walter
看起来文件中使用的确实是坐标单位。 - Sam van Herwaarden
请使用ST_SimplifyPreserveTopology。它使用与ST_Simplify(Douglas-Pecker)相同的算法,但保证不会产生无效几何图形。 - Rauni Lillemets
嘿,我知道这已经过时了,但是你的链接已经失效了。我实际上正在努力解决我的参考数据集过于精确的问题。 - undefined
1
@jcollum 我在快速的网页搜索后更新了链接。 - undefined

8

这里是一个简单的迭代平滑算法:

对于路径上的每三个连续点,如果中间点没有交叉,并且在两个外部点之间的直接路径的一些小阈值角度内,则将其删除。

重复此过程直到满意为止。


8

5

2

@unmounted 的回答是正确的,但我想再添加一个建议。

在PostGIS中,始终使用ST_SimplifyPreserveTopology函数而不是ST_Simplify函数。两者都使用相同的基础算法(Douglas-Peucker),但前者避免了任何会导致无效几何体的简化。例如,ST_Simplify可能会导致几何体相交。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接