(,,・∀・)ノ゛hello,小编又来啦(一不小心又拖更这么长时间),感觉大家都是催更小能手,天天定时定点的发消息催更,(其实很感谢大家的关注与催更,说明我写的这些对大家都有很大的用处!让我感到挺高兴的,而我自己在写水文的过程中也会加深自己对此方法的理解!互惠互利!)
上一篇呢我写了拓扑面要素的修改方法,这篇我讲一下线要素拓扑修改的具体方法和一些小技巧。线拓扑的建立过程与ArcGis拓扑的那些事儿(拓扑应用过程一)这个面要素拓扑建立过程一致,我这里就不写啦!这篇呢主要写一下线拓扑的规则是怎样的,怎么样去修改线段的拓扑错误!下一篇呢会和大家说一下关于点的拓扑技巧!希望大家持续关注。
因为每种项目的规程不同,数据库的规则也不一样,有的允许存在拓扑错误,有的不允许出现,所以我在这里就说说每个线拓扑的规则与修改方法吧,大家在建立拓扑过程中看情况择优选用!
Ps:每次写这些都感觉脑细胞死一万个
规则解释:此规则和面要素中的不能重叠规则是一致的,此规则不允许同一个图层中的任何线段发生重叠,任何重叠的线都会报错。修改方法:①.建立好拓扑之后,使用拓扑错误查看工具,一个一个修改,这个方法最为稳妥,可以自主选择哪条线段与哪条线段合并、或者选择性的剪除重叠部分(此方法适用于有不可更改属性的线段【例如行政界线,权界线、地类界线、三调,二调,基本农田补划等等精细且要求高的线数据】)
②.选中全部线段,使用编辑器菜单栏下的合并工具,使其所有线段合并,然后使用高级编辑中的拆分多部件要素工具(俗称:炸开工具?) 把线段分开(此操作适合无任何属性的线段【当然有属性的也可以做这一步操作,然后把有正确属性的线段与拆分开的线段进行一个空间赋值就可以了】)
③.选中全部线段,使用编辑器菜单栏下的合并工具,使其所有线段合并,然后调用工具箱中的多部件到单部件工具,使其不连续线段都拆分开(此操作适合无任何属性的线段【当然有属性的也可以做这一步操作,然后把有正确属性的线段与拆分开的线段进行一个空间赋值就可以了】)
④.使用菜单栏地理处理下拉菜单中的融合工具,选中长度、属性相同的字段进行相同属性合并(这个方法小编是不怎么推荐的,弊端很大)⑤.在编辑状态下使用高级编辑器中的打断相交线,这个功能可是不能小看噢,它的隐藏属性就是删除重复线!你选中重叠的线段之后点击这个功能,然后你就会发现这重复的线段神奇的合并成一条线段了(这个方法唯一的缺点就是把所有交点处的线段都会打断!不过我们可以结合第二种修改方法来进行使用【如果有特定序号的话,一定要先建立一个序号字段噢,然后在进行打断相交线这一操作,最后配合使用融合工具合并相同顺序号的线段】)
以上方法的排序顺序没有先后啊,若还有其他好的修改方法,请告知小编这菜鸟,让我也学习学习。
规则解释:此规则说的是同一图层中的线段互相不能相交与叠置,不管是任何情况下的相交与叠置,此规则都认为是错误的。修改方法:①.建立好拓扑之后,使用拓扑错误查看工具,一个一个修改,这个方法最适合新手使用!简单、实用、不会出错,就是麻烦。(此方法适用于精细数据,例如三调,二调,基本农田补划等等精细且要求高的线数据)②.使用工具箱中的在折点处分割线,可以打断所有折点处的线段。③.在编辑状态下使用高级工具中的打断相交线,这个功能在上面就详细的说啦,这里就不解释啦!
以上方法的排序顺序没有先后啊,若还有其他好的修改方法,请告知小编这菜鸟,让我也学习学习。
规则解释:此规则说的是一个图层的线必须与另一个图层中的线要素重合,此规则认为第一个图层的任何线段未与第二个图层的线段重合都是错误的
修改方法:①.建立好拓扑之后,使用拓扑错误查看工具,一个一个修改,这个方法最适合新手使用!简单、实用、不会出错,就是麻烦。(此方法适用于精细数据,例如三调,二调,基本农田补划等等精细且要求高的线数据)
③.使用组合工具(以县界和乡界来解释):要素转点——要素折点转点——在点处分割线——复制——粘贴——合并——多部件到单部件——空间链接赋值必要属性(一定要使用备份后的数据并且在编辑状态下进行复制粘贴),具体操作过程如下:县界转点,乡界折点转点,拿县界的点标记乡界线,然后统一删除被标记的乡界线段,把乡界折点转成的点使用在点处分割线工具,分割县界,把分割后的县界框选选中复制到乡界中,把乡界线段全部选中使用编辑器下拉菜单中的合并,合并之后呢选用工具多部件到单部件把全部不连续线段炸开,再把一些必要的属性用原始数据挂接进去!(这些步骤应该不难,大家可以试着操作一次【倒是小编感觉脑袋有点晕晕的,被绕进去了。。。】)
④.其实呢,上面三种方法完全可以解决这个重合问题了,但是呢我还想给大家多提供一个工具,可以解决很多数据未发现的问题,这个工具就是整合,此工具也是根据特定容差内来把相近坐标点数据进行一个坐标聚类(这个工具我就是提一提,大家根据情况使用吧,慎用【这个工具点、线、面通用】)以上方法的排序顺序没有先后啊,若还有其他好的修改方法,请告知小编这菜鸟,让我也学习学习。
规则解释:此规则说的是一个图层的线要素不能与另一个图层中的线要素重叠,但是可以相交,此规则认为第二个图层的任何线要素与第一个图层的线要素有任何重合都是错误的
这个拓扑规则一般都不会使用,我感觉只适用于地类图斑勾画草图阶段?例如分村画图斑,村界一圈的地类界线有可能会重叠?如果是这样的话,在总工计划工作流程时候就会解决这个问题的,如果确实有这样的问题的话,请参考规则一的修改方法来,同理!
规则解释:此规则说的是一个图层中的线要素必须与另一个图层的面要素的边界重合,此规则认为线图层中的线要素与面层边界不重合的线要素都是错误的。修改方法:①.建立好拓扑之后,使用拓扑错误查看工具,一个一个修改,这个方法最适合新手使用!简单、实用、不会出错,就是麻烦。(此方法适用于精细数据,例如三调,二调,基本农田补划等等精细且要求高的线数据)②.如果要达到规则中的效果,那么我们就认为这个重合的地方是一个公共线,就借用整合工具来进行处理,使用此工具会把要素位于指定的X,Y容差范围内的公共要素通过使要素重叠来保持公共要素边界的完整性,位于指定 x,y 容差范围内的要素将使低等级的要素向高等级的靠拢,位于指定 x,y 容差范围内的要素会插入公共坐标折点,并在要素线段相交的地方添加折点,使其完全一致。这里要注意两个重点啊,如果要素间的距离小于容差,则折点或点将被聚类(移动至重合状态)。等级较低的要素类或图层将捕捉到等级较高的要素类或图层中的要素(其中 1 级高于 2
级)。请注意,如果使用的 x,y 容差较大,则等级为 1 的要素类中的要素甚至也可能发生移动。③.如果是要验证县界、村级调查区界线、乡级行政区界线与地类图斑是否存在跨界情况的话,这个规则一定要使用哦,解决方法为吗,新建三个个字段(KZJX、XZQDM、CJDCQDM),提取坐落单位代码前六位、九位、十二位分别依次赋值到新建字段中,以此字段融合形成县界、村级调查区、乡级行政区,然后转线炸开,这样就不会出现不重合问题了。
④.还有一个骚方法,就是用拓扑中的聚类来解决,使用不同级别的容差,使不准的界线与标准界线逐渐靠拢,这个方法不大推荐,就给大家提供这么个思路!!!主要是小编用白话也写不出来,O(∩_∩)O哈哈~,大家回去自己试验吧!经过你自己的不断实验,或许会有小惊喜???以上方法的排序顺序没有先后啊,若还有其他好的修改方法,请告知小编这菜鸟,让我也学习学习。规则解释:此规则说的是每一条线段的端点都不能孤立,必须和其他要素或和自身相接触,此规则认为线图层中的任何端点未与其他线接触都是错误的。小编一直都认为悬挂点与悬挂线是一致的,但是听人说有区别,但是也没说区别在哪儿,让我很苦恼啊!难过(ಥ﹏ಥ)。修改方法:①.这第一种修改方和上面其余规则的第一种修改方法都一样,都是用拓扑查看器来查看和修改。②.使用修剪线工具,此工具可以移除线上超过交点指定距离的部分(悬挂线,也是悬挂点)。可修剪两个端点均未与其他线相接触的任何线,但只能移除超过交点指定距离的线段噢。这个工具会将修剪长度短于指定“悬挂长度”且两个端点均未接触到其他线的线段(悬挂线)。如果未指定“悬挂长度”的话,则会将所有悬挂线(两个端点均未接触到其他线的线段)均修剪至交点处,而不考虑悬挂线的长度。③.使用延伸线工具,此工具可将线段延伸至指定距离范围内的第一个相交要素,如果在指定距离范围内不存在相交的要素,则不会延伸该线段。以上方法的排序顺序没有先后啊,若还有其他好的修改方法,请告知小编这菜鸟,让我也学习学习。规则解释:此规则说的是每一条线段的端点都不能孤立,必须和其他要素或和自身相接触,此规则认为线图层中的任何端点未与其他线接触都是错误的。修改方法:①.这第一种修改方和上面其余规则的第一种修改方法都一样,都是用拓扑查看器来查看和修改。②.对于这个错误小编一直是以容差聚类作用去解决,只要把容差设的足够小就OK啦(聚类参考上一篇文章)。③.使用FME软件,调用Line joiner函数进行处理。以上方法的排序顺序没有先后啊,若还有其他好的修改方法,请告知小编这菜鸟,让我也学习学习。规则解释:此规则说的是同一个图层中的线要素不能与同一图层中的线要素重叠,此规则认为任何重叠的线都是错误的,相比规则一的不能重叠来说,这个规则更适合拓扑线要素!(推荐)规则解释:此规则说的是同一个图层中的线要素不能自相交,此规则认为任何存在要素自叠置的线都是错误的。这个错误容小编多说一点,自相交这个问题在数据生产中是个很严重的错误,也是最常见的一个错误自相交若是不处理,则会导致要素无法转换成指定格式,或者是无法完成写入库等操作。发生自相交的根本原因情况很多,有些是因为作图人员不小心误操作,采集要素节点的时候反复添加引起的错误;还有就是因为一些检查或处理的软件再对数据进行处理的时候设置的数据精度不同,也可能会导致自相交!小编下面的有几种方法都是2018底至2019年中旬做三调矢量化检查过程中使用过的一些方法!都是根据百度整理得来的,具体作者小编真是忘记了(作者大佬们勿怪!)。②.这个错误小编推荐GIS的自带工具——修复几何,不过使用这个功能之前需要备份数据噢,因为此方法会改变要素的几何,各位酌情使用~~~(小编通常都是先检查几何看一下问题大不大,处理之后会不会影响面积,然后才做修复几何)。
③.使用Arcpy,不过这个咱们基层工作人员会使用的不多(我们都是社畜工具人!),我直接把代码贴出来,大家直接使用吧,就不解释了!import arcpy
import os
#检查相交或重复的问题
A = r"D:\data\test.shp"
fold = r'D:\data\bb'
#打开覆盖写入
arcpy.env.overwriteOutput=True
index=A.rfind("\\")
B=fold+A[index:-4]+"B.shp"
C=fold+A[index:-4]+"C.shp"
D=fold+A[index:-4]+"D.shp"
E=fold+A[index:-4]+"E.shp"
G=fold+A[index:-4]+"G.shp"
if not os.path.exists(fold):
os.makedirs(fold)
#问题区域 相交的问题
prob=fold+A[index:-4]+"H.shp"
prob2=fold+A[index:-4]+"__WT.shp"
#关闭结果加入图层
arcpy.env.addOutputsToMap=False
arcpy.FeatureToLine_management(A,B)
arcpy.FeatureToPolygon_management(B,C)
arcpy.Intersect_analysis([C,A],G)
arcpy.FeatureToPoint_management(G, D)
arcpy.FeatureToPoint_management(A, E)
arcpy.Erase_analysis(E,D,prob)
#添加字段 问题类型
arcpy.AddField_management(prob, "problem", "TEXT","","", 12)
with arcpy.da.UpdateCursor(prob, "problem") as cursor:
for row in cursor:
row[0] = "相交"
cursor.updateRow(row)
del cursor
#检查重复的问题,根据坐标是否一致判断
#E = r'D:\data\fumz\test\testE.shp'
sets = set()
sets2 = set()
arcpy.AddField_management(E, "problem", "TEXT","","", 12)
fields = ['SHAPE@WKT','problem','SHAPE@X','SHAPE@Y']
with arcpy.da.UpdateCursor(E, fields) as cursor:
for row in cursor:
id = row[0]
id2 = '%s,%s'%(row[2],row[3])
if id in sets:
row[1] = '重复'
cursor.updateRow(row)
elif id2 in sets2:
row[1] = '疑似相交'
cursor.updateRow(row)
else:
cursor.deleteRow()
#cursor.updateRow(row)
sets.add(id)
sets2.add(id2)
del cursor
#打开结果加入图层
arcpy.env.addOutputsToMap=True
#合并图层
arcpy.Merge_management([E, prob], prob2)
#arcpy.env.addOutputsToMap=False
delete = False
#删
if delete:
arcpy.Delete_management(B)
arcpy.Delete_management(C)
arcpy.Delete_management(D)
arcpy.Delete_management(E)
arcpy.Delete_management(G)
arcpy.Delete_management(prob)
④.强大如ArcGIS也是有检查不出来的自相交,因为不管是拓扑、Shp、MDB或者是GDB都是有容差的,小于这个容差的自相交都是无法检测到的,所以呢小编在这里推荐使用PostGIS将Shp文件导入Postgresql数据库中,从表里提出自相交的多边形,然后删除原表中的自相交图形,修复自相交图形,把修复完的数据恢复到原来的表中,最后通过PostGIS插件导出Shp!⑤.使用FME软件来处理,用转换器GeometryOGCValidator过滤出自相交的要素,利用SelfIntersector转换器将面自相交的要素进行处理,在通过GeometryFilter转换器把有效图形,这个过程中要注意的是参数一定要选择Valid,因为我们要检查的是图形的有效性!规则解释:此规则说的是同一个图层中的线要素不能具有一个以上的构成部分,此规则认为任何具有超过一个构成部分的线要素都是错误的规则解释:此规则说的是一个图层内的线要素必须在其端点处与同一图层中的其他线要素接触。此规则认为任何要素存在叠置与相交点都是错误的。②.使用组合工具解决,编辑器下拉菜单合并——拆分多部件要素——在折点处分割线规则解释:此规则说的是一个图层内线要素的端点必须被另一个端点覆盖,此规则认为任何未被任何点要素覆盖的端点都是错误的。③.使用整形与追踪功能联合进行修改,在这里说一下这个追踪啊,一定右键设置一下追踪选项(根据项目的要求来),设置一下偏移量,追踪特定所选要素等!规则解释:此规则说的是一个图层内线要素不能与另一个图层中的线要素发生相交或者叠置,此规则认为第一个图层中的线要素若和第二个图层中的线要素发生相交或者叠置都是错误的。这个规则与规则四很相似,规则四允许相交但是不允许重叠!
规则解释:此规则说的是一个图层内线要素必须与另一条线在其端点处接触,此规则认为第一个图层的任何线段与第二个图层的线段发生相交或者叠置都是错误的。嘿嘿,这个功能小编还没有使用过,所以就不在这儿瞎撇了,若大家有其他好的修改方法,请告知小编这菜鸟,共同学习学习。
规则十五:必须位于内部
规则解释:此规则说的是一个图层线要素必须包含在另一个图层的面要素内,此规则认为若第一个线要素图层中未被第二个面要素图层所包含的任何线都是错误的。修改方法:①.方法同上面所有的第一个修改方法。
②.组合工具修改,融合(面要素)——裁剪(面裁线)——导出新数据
这次的文章写了大概有五个小时??小编感觉死了十万个脑细胞。我感觉这个文章应该能满足催更的小伙伴们了吧!除了规则十四小编没有用过以外,其余的规则小编都把修改方法写了出来(都是我们基层社畜工具人可以看懂且可以直接上手操作使用的)!
闲话就说到这里,喜欢这期内容的就给小编点点赞,点点关注,转发转发,让小编也涨涨粉丝数。
欢迎规范转载!可以直接加我微信,我给你设置白名单!
这次不给大家分享工作用的东西拉,给大家分享《速度与激情》全系列的电影!,可以闲暇之余解解乏(摸摸鱼?)
因为网盘的规则限制,不能直接分享链接,如果喜欢这个系列的朋友可以关注我公众号,点击菜单栏的联系作者,加我好友!