gojs 节点右键点击事件_SWMM快速建模方法(3)—建立管线上下游节点编号
??? 在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文件。
??? 對于沒有建立一一對應關系的檢查井標號,需要處于編輯狀態下手動需填寫井的編號,當然這個工作量很小。
至此,管線上下游編號建立完成
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的gojs 节点右键点击事件_SWMM快速建模方法(3)—建立管线上下游节点编号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python基础学习_转行零基础该如何学
- 下一篇: 移动端实现文字轮播_移动端轮播图实现