如何智能降级或平滑GIS数据(简化多边形)?
解决方案
用简单的扔远点的问题是,您可以快速歪曲原多边形的形状。更好的方法是从另一个方向过来吧;开始与多边形的基本近似,然后向上修正其对你的复杂的形状。
这种方法的一个很好的例子是道格拉斯 - Puecker算法。你开始从全多边形绘制两个顶点。通过选择位于最远从两个顶点之间绘制边缘的一个添加第三顶点。继续添加点,直到你有一些类似足够你原来的多边形。
其他提示
道格拉斯 - 普克肯定是正确的方法。有访问PostGIS的它实现一些简单的方法和QGIS,我以为我会在这里补充对于那些谁遇到这个帖子有类似的问题。我们的目标是开始是这样的:
和与像这样结束了:
在PostGIS的道格拉斯 - 普克被实现为simplify
,语法,这里详细在bostongis.org ,是一些变体:
SELECT transform(simplify(transform(the_geom, 2249), 500),4326) from the_geo_table
这工作得很好,即使在全民族的数据集,以及我们认为,由于恶劣的底层数据的一些一些错误。这也证明,在QGIS菜单项Tools > Geometry Tools > Simplify Geometries
将出口任何几何形状的简化shape文件并将其添加为一个层当前的项目。
这是一个非常基本的工具集,我问的问题在过低的水平,但它是很好的学习基础数学外,还有就是一个很好的解释的这里:http://www.mappinghacks.com/code/PolyLineReduction/ ,与原来不是太必要的示例代码
我建议使用 ogr2ogr 而不是 QGIS,因为它 不删除多边形!
ogr2ogr output.shp input.shp -simplify 0.0001
下面是一个简单的迭代平滑算法:
对于任何路径上的每个三个连续点,如果中间点没有交叉点和是两个外点之间的直接路径的一些小的阈值的角度范围内,将其删除。
重复直到满意为止。
您还可以尝试 Visvalingam 算法,该算法会迭代删除线条中最不易察觉的部分。这是该算法的一个很好的解释:
通过@unmounted回答是正确的,但我想添加一个建议。
始终使用功能ST_SimplifyPreserveTopology代替ST_Simplify在PostGIS的。两者都使用相同的底层算法(道格拉斯 - 普克),但前者避免了会导致无效的几何图形任何简化。例如,ST_Simplify可能导致几何相交本身。