1. 程式人生 > >ArcGIS中,實現兩點間連線

ArcGIS中,實現兩點間連線

轉載:ArcGIS中,一個點集裡的點兩兩連線,比如有4個點,就連3+2+1=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,並輸入相應引數即可。