ArcGIS中,一個點集里的點兩兩連線,比如有4個點,就連6條線


一、目標

  一個點集里的點兩兩連線,比如有4個點,則連3+2+1=6條線;有38個點,則連37+36+35+···+3+2+1=703條線,其原始坐標數據及最終樣式類似於以下這種: 

  原始數據    目標

圖一:原始數據及最終效果

二、總體思路

  使用arcgis中的XY To Line工具,如下圖所

  

  其中,Start X Field、Start Y Field、End X Field、End Y Field分別為起點和終點的坐標值,Line Type為要構建的大地測量線的類型,包括GEODESIC(默認)、GREAT_CIRCLE、RHUMB_LINE、NORMAL_SECTION這四種構造方法,ID為輸入表中的字段,此字段和坐標值包含在輸出中,可用於將輸出要素與輸入表中的記錄相連接。Spatial_Reference為空間參考。

  可以看到,要准備的數據是包含起點和終點坐標值、ID的一張表。

三、表數據准備

  (一)坐標值數據准備

  首先,是要將Start X、Start Y合並,為了便於區分,將StationName也合並到一個單元格。即在XYOld列中,即D2單元格輸入“=A2&","&B2&","&C2”,並下拉至列尾;

  其次,將D列復制到E列(XYOldCopy);

  

  (二)坐標值排列組合

  對D列和E列進行排列組合。右鍵左下方sheet1名稱(本例為PointstoTest)→查看代碼→在彈出的對話框中粘貼如下代碼:

 1 Sub 兩列組合()
 2 'EXCEL880.COM產品,2017-7-12
 3     Dim n1, n2, arr, brr, i, j, k
 4     n1 = [D65536].End(xlUp).Row
 5     n2 = [E65536].End(xlUp).Row
 6     arr = Range("D2:D" & n1)
 7     brr = Range("E2:E" & n2)
 8     ReDim crr(1 To n1 * n2, 0)
 9     Dim dic
10     Set dic = CreateObject("scripting.dictionary")
11     For i = 1 To UBound(arr)
12         For j = i + 1 To UBound(brr)
13             Key = arr(i, 1) & "," & brr(j, 1)
14             'If Not dic.Exists(Key) And Not dic.Exists(brr(i, 1) & "," & arr(j, 1)) Then
15                 '字典檢測是否雙向重復
16             dic.Add Key, ""
17             k = k + 1
18             crr(k, 0) = Key
19             'End If
20         Next
21     Next
22     [F2:F65536].Clear
23     [F2].Resize(k) = crr
24 End Sub

  點擊彈出框上方的“運行”→“運行子過程/用戶窗體”。截圖如下

  

  對F列以","逗號為分隔符進行分列並將最終結果粘貼至新的表格,添加OIDMINE列用於XY To Line工具的ID輸入字段,結果如下圖所示:

  

四、在arcgis中使用XY To Line工具運行即可。

  在arcgis中,ArcToolbox→Data Management Tools→Features→XY To Line,並輸入相應參數即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM