转载: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)→查看代码→在弹出的对话框中粘贴如下代码:
-
Sub 两列组合()
-
'EXCEL880.COM产品,2017-7-12
-
Dim n1, n2, arr, brr, i, j, k
-
n1 = [D65536].
End(xlUp).Row
-
n2 = [E65536].
End(xlUp).Row
-
arr = Range(
"D2:D" & n1)
-
brr = Range(
"E2:E" & n2)
-
ReDim crr(
1
To n1 * n2,
0)
-
Dim dic
-
Set dic = CreateObject(
"scripting.dictionary")
-
For i =
1
To UBound(arr)
-
For j = i +
1
To UBound(brr)
-
Key = arr(i,
1) &
"," & brr(j,
1)
-
'If Not dic.Exists(Key) And Not dic.Exists(brr(i, 1) & "," & arr(j, 1)) Then
-
'字典检测是否双向重复
-
dic.Add
Key,
""
-
k = k +
1
-
crr(k,
0) =
Key
-
'End If
-
Next
-
Next
-
[F2:F65536].Clear
-
[F2].Resize(k) = crr
-
End
Sub
点击弹出框上方的“运行”→“运行子过程/用户窗体”。截图如下
对F列以","逗号为分隔符进行分列并将最终结果粘贴至新的表格,添加OIDMINE列用于XY To Line工具的ID输入字段,结果如下图所示:
四、在arcgis中使用XY To Line工具运行即可。
在arcgis中,ArcToolbox→Data Management Tools→Features→XY To Line,并输入相应参数即可。