问题
我们在获取一些osm等开源地理数据网站获取数据后(比如建筑物数据),往往需要对数据进行处理后,才可以进行分析,对于面数据,处理面自相交问题是必须操作。如下图,就是自相交的面。
解决方案
该问题可以使用ArcGIS轻松解决:
-
新建线要素,选择相同坐标系;
-
对线要素进行编辑,选中并复制所有面图层;
-
将面图层粘贴到线图层,得到面轮廓对应的线;
-
停止编辑并保存线图层,并再次对面图层进行编辑,删除所有面(也可以新建一个面要素,对新建的面进行编辑);
-
选中之前的线图层,使用构造面工具构造面,得到不存在自相交的面图层。
-
带有洞的多边形需要再进行一次交集取反操作,去除闭合线填充的洞-在存在其他拓扑错误时,可能导致交集取反操作失败
2020/12/10补充: 解决线构造面后,多边形的洞被填充问题
带洞的自相交多边形处理
- 通过上述步骤1-5,得到如下多边形,先解决自相交问题。
但是通过步骤1-5虽然解决了自相交问题,但是多边形的洞被填充了。
-
尝试一:交集取反
思路: 使用交集取反-对原始自相交面(poyRaw)和填充洞的面图层(poy),进行交集取反操作。
结果如下:
通过交集取反后,因为poyRaw存在自相交,所以导致结果出错,缺失了自相交的部分。
在用其他数据进行尝试时,发现当原始面存在其他拓扑错误时,可能会导致交集取反操作失败。 -
尝试二:按位置选择:
思路: 使用按位置选择,选取poy为目标图层,poyRaw为源图层,选择与原图层要素相交的查询方法。
结果如下:
因为被填充的洞与外侧面共用边,所以洞与外侧面是相交状态,故无法单独选择外侧面。 -
解决方法:
- 对poy(解决自相交后,洞被填充的多边形图层)进行要素转点(数据管理工具-要素-要素转点)操作,并勾选内部;
- 使用按位置选择,选取在poyRaw(存在自相交的图层)内的点,导出得到tempPoints图层;
- 对poy使用按位置选择,选取与tempPoints点相交的元素,导出得到不存在自相交、没有填充洞的多边形。