在SWMM中,管线需要输入上下游节点检查井编号,那么在GIS中可否实现自动获取上下游节点编号呢?思路是这样的,首先获得管线两端节点,然后对端点进行融合,删除重复的节点,最后根据坐标关系分别建立管线起点和终点与节点之间的联系。
1. 先形成管线两端节点(实际41个):对于上一节形成的管线修正shp文件,选择DateManagement Tools—要素—要素折点转点工具—点类型(Both_Ends),形成管线折点shp文件,这里形成了78个节点。
2.再对重复节点删除:这里有两种方法,第一种方法是在管线折点shp文件的属性列表中添加X和Y坐标,DateManagement Tools—要素—添加XY坐标,然后删除XY坐标相同的节点,DateManagement Tools—常规—删除相同的—勾选XY坐标,删除后的节点还有44个,也即这种方法形成的节点数量还是与实际不符合。这里介绍第二种方法:构建缓冲区,原理是这样的,相连接的两个管线实际并严丝合缝连接在一起,也即两条线形成的端部节点并非完全重合,有一定的距离,可以分别对这两个节点画个圈圈即缓冲区,然后两个圈圈相交组合成一个大的圈圈,最后生成这个大圈圈的重心即为两条线端部相连接的唯一节点,当然这个唯一节点可能并非在管线上,但这没关系,后续还有解决的办法。
选择工具箱中AnalysisTools—邻域分析—缓冲区—线性单位300mm—融合类型ALL,形成缓冲区shp文件。这里的线性单位需根据CAD中绘图单位确定,比如CAD中以mm绘制管线,300这个数据是感觉着来的,也即两条管线如果不重合,缝隙间距约300mm,这个可以多尝试几次。
此时行的缓冲区为一个大的面图层,即所有的管线节点处画的大圈圈形成了一个大的面域,为了得到单个的节点,需要对其进行炸开操作,具体操作如下:
1)内容列表—缓冲区shp文件—右键选中选择编辑要素—开始编辑,进而使得该shp文件处于编辑状态;
2)然后上边工具栏空白处右键操作调出高级编辑工具栏;
3)接下来内容列表—缓冲区shp文件—右键选中选择全选,也即选择了整个面域作为炸开对象;
4)点击高级编辑工具栏—拆分多部件要素—停止编辑并保存,此时的缓冲区shp文件有一个面域形成了41个面,拆分就是把里面的圈圈分割成一个一个,至此删除并融合了管线节点形成了41个节点面。
3.将形成的41个面转化为节点,DateManagement Tools—要素—要素转点,将缓冲区shp文件转化为管线修正折点shp文件。随后对其添加XY坐标,同上。
4.对于两个几乎重合或本身就是重合的点而言,如何判断是否为一个点呢,最简单的办法是判断他们的坐标,单纯只匹配X坐标或Y坐标误差较大,比如X轴上的点X坐标始终都相同,但是点不同;其次,由于线端点始终在线上,而上述缓冲区形成的检查井节点未必在线上,就像线端点的X坐标是3.14,上述通过缓冲区形成的折点X坐标是3.1415,如何将这两个点匹配在一起呢,那么就需要对后者截断,只取3.1415中的3.14即可,这时候两个3.14就可以建立一一对应的关系了。再比如,管线起点坐标(2.1415,3.2658),管线起点处检查井坐标(2.1428,3.2673),按道理两个点应该是一致的,但是处理过程中出现了不一致,这时候需要拟合两者关系,通过建立文本字符串,管线起点字符串2.14-3.26,检查井字符串2.14-3.26,一次性的可以同时比对XY坐标,这时候两个数据一致了,就可以建立一一对应关系了。
5.建立管线修正折点,也即检查井处属性列表中“整合”文本字符串,通过字段计算器将X和Y坐标整合进该字段。X坐标和Y坐标均取整。
在字段计算器中通过Python代码将XY坐标连接在在一起,连接符为-,代码如下:
def f(POINT_X,POINT_Y):
a=str(POINT_X)
b=a[:9]
c=str(POINT_Y)
d=c[:10]
e=b+"-"+d
return e
整合=f( !POINT_X! , !POINT_Y! )
代码含义是将X坐标和Y坐标均由双精度数据转化为字符串数据,然后字符串长度分别取9和10,也即X和Y坐标均取整数,然后再对这两个取整后的字符串合并在一起,之所以合并是为了增加匹配的精度,可以同时匹配XY数据。
6.对于管线采用同样的方法,在管线修正属性表中增加QX、QY、ZX、ZY、QZ、ZZ字段,前四个字段分别为起点和终点的XY坐标,后两个分别为起点坐标整合和终点坐标整合。
7. 建立连接关系,也即一一对应关系,内容列表—管线修正shp右键选择连接和关联—连接,将管线终点整合ZZ和管线修正折点属性表中的整合建立一一对应连接。可以看出有3个管线没有匹配上,这是因为管线终点与检查井离得太远,按照上述方法拟合了也不行,这时候需要手动编辑建立关系。然后将该数据框整体导出形成管线终点对应shp文件,同理在此文件基础上再对管线起点整合QZ和管线修正折点整合一一对应,建立连接关系,之后再次形成数据框,形成新的管线一一对应shp文件。
对于没有建立一一对应关系的检查井标号,需要处于编辑状态下手动需填写井的编号,当然这个工作量很小。
至此,管线上下游编号建立完成