原图,每个面的点太多,导致文件数据太大,并且不需要这么高精度,需要简化图形,减少坐标点数
卧龙:QGIS,Vector -> Geometry Tools -> Simplify
,功能太弱了,看起来只是简单的每个去掉了坐标点,压根不理会相邻的面,导致图形错位(边缘重叠、或产生空隙)
凤雏:ArcMap,ArcToolBox -> Cartography Tools -> Generalization -> Simplify Polygon
,初测试以为是个王者,没想到竟然是个青铜,居然都会有一边几乎完全没有处理
正在入门学习 GIS,电脑上只装了上面两款软件,应该是专业软件,不过在这个算是核心的一个功能上,又显得不那么专业。
已经折腾好几天了,其实 ArcMap 的精简结果已经基本快达到求了,但未精简的那条边完全可以做到精简,准备再研究研究;实在不行就准备自己写代码来处理,啃下这块鸡肋,粗略估计:2 小时的代码量基本上就能达到 QGIS 的效果,3 天的代码量就能完美实现出 ArcMap 这种结果还不带 bug 的🐶
发本帖的目的:
谢谢大家
已经搞定了,基本上不考虑使用QGIS的Simplify,ArcMap的Simplify Polygon结果非常符合需求,至于刚开始为什么有一边没有被精简,是因为我这个数据那些边存在重叠和间隙(非常微小),导致没有被精简;
后面测试通过清除那些微小的重叠和间隙(ArcToolBox -> Data Management Tools -> Feature Class -> Integrate
1cm的容差),就正常能全部精简了。
修正后的结果(100米的容差 坐标点数是原图形的3% 效果非常满意):
1
ck65 2021-10-12 16:52:27 +08:00
|
2
yuhangch 2021-10-12 17:01:22 +08:00
精简算法经典的就那几个,道格拉斯扑克巴拉巴拉
qgis 里三种可选方法都试了吗? The algorithm gives a choice of simplification methods: 1 、including distance based (the "Douglas-Peucker" algorithm) 2 、area based ("Visvalingam" algorithm) 3 、snapping geometries to a grid. |
3
Sglight 2021-10-12 17:03:01 +08:00
|
4
pkoukk 2021-10-12 17:07:46 +08:00
arcmap 应该是可以选择简化算法和容差的,改改参数试试。
这个边没有简化很可能是因为折弯太多,不平滑,被容差限制无法简化 |
5
xiangyuecn OP @ck65
@yuhangch @Sglight @pkoukk ArcMap 、QGIS 所有参数组合都试了; QGIS 基本上都没有考虑相邻的图形,虽然能有效的简化图形,但还是放弃使用 QGIS ; ArcMap 这种结果其实已经符合需求了,正常的那些边简化的结果非常满意,就是没有被处理的那条边比较头痛。刚才换了一个数据的 shp 文件测试,发现所有的边都完美的精简好了;然后分析了一下要处理的这个数据的拓扑,发现一大堆拓扑错误,并且主要集中在那几条未简化的边上,都是非常细微的重合,看起来是因为数据本身拓扑错误的原因,导致 ArcMap 没有去精简那些边。 ArcMap 没有问题,完全可用,是我的这个数据的问题。 |
6
Rheinmetal 2021-10-12 18:07:11 +08:00
算法处理 trivial part
然后手绘调整 corner case |
7
huarch 2021-10-13 06:15:06 +08:00 via iPhone
抽稀,多试试几个精度
|
8
xiangyuecn OP |