在excel中,如何用lat / long计算2大点之间的距离?

时间:2011-06-06 16:06:53

标签: excel spatial worksheet-function

问候每个人,我在Excel中有两组点(A组和B组),每组有大约1000个包含lat / long的条目。我想要做的是将A组与B组进行比较,并找出A组中每个点B组中最接近的点。在excel中最简单的方法是什么?

我开始研究的一个解决方案是将两个点相互比较的宏。

    Sub distance()
'
' distance Macro
'
' Keyboard Shortcut: Ctrl+d
'
    Range("D4:E4").Select
    Selection.Copy
    Sheets("Analog Data").Select
    Range("F3:G3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("D3:E3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Cluster 58").Select
    Range("FT4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("D5:E5").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Analog Data").Select
    Range("F3:G3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("D3:E3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Cluster 58").Select
    Range("FT5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

现在我如何告诉visual basic设置范围以转到下一个范围,这样我就不必将每个个体一直打到Range(“D1237:E1237”)?

4 个答案:

答案 0 :(得分:2)

您可以使用此公式查找差异的最小值,您可能需要创建自己的方法来确定纬度/经度的差异(如UDF)。将此公式放在另一列中,然后向下拖动:

=SUMPRODUCT(ABS(MIN(A1-B:B)))

答案 1 :(得分:1)

帖子正文中的问题(关于代码)与帖子标题中的问题完全不同。

现在我将非常直接地回答前者,但需要注意的是,这是一种非常糟糕的做事方式。你要的是这样的东西:

Sub distance()

Dim i As Long

For i = 0 To 1236

    Range("D4:E4").Offset(i, 0).Copy
    Sheets("Analog Data").Select
    Range("F3:G3").Offset(i, 0).PasteSpecial Paste:=xlPasteValues, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Range("D3:E3").Offset(i, 0).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Cluster 58").Select
    Range("FT4").Offset(i, 0).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Next i

End Sub

稍微清理这个可怕的混乱导致这个单一的声明,它与你的百万行代码完全相同:

    Sheets("Analog Data").Range("F3:G3").Resize(1237, 2).Value _
        = Sheets("Cluster 58").Range("D4:E4").Resize(1237, 2).Value

现在进入长期的事情。你知道,我认为,以度数给出的(纬度,长度),点(0,0)和(0,0.1)相距约10公里,而点(90,-131)和(90,74) )正好相距0公里?这是假设球形地球。假设一个更真实的数据,例如WGS84会导致更复杂的距离计算。

在询问如何在Excel中执行此操作之前,您应该问自己(并告诉我们)如何在一张纸上执行此操作。

答案 2 :(得分:0)

关于lat-long事项,您应该了解如何将lat / long转换为false east-east或UTM坐标。 This page可以帮助你解决这个问题,但是如果你需要确定不同时区或地球半球之间的距离,那么就会产生西班牙语问题。

关于编程部分和几乎无宏的解决方案将是:

(假设UTM坐标中的所有内容以及相同的时区和相同的半球)

  • 将3个单元格保留为以下数据:

ID_Point_in_GroupA

NORTH_of_ID

EAST_of_ID

  • 可以通过添加基于ID_Point_in_GroupA的“索引”功能来确定NORTH_ID和EAST_ID。
  • 计算B组中每个点的毕达哥拉斯距离到NORTH_ID和EAST_ID
  • 确定壁橱。
  • 确定最近点的ID(“匹配”功能有帮助。)
  • 将gropu A中的所有ID_Point_in_GroupA循环到troguht并存储结果。

此致

答案 3 :(得分:-1)

经过一些乏味的搜索后,这是我能提出的最好的公式..

您可以将其直接复制到Excel并使用您的值进行更新..

Location-1  Latitude    Longitude   Location-2  Latitude    Longitude   Distance in Kilo Meters
POI-1   40.634068   -73.941248      POI-2       41.634068   -73.941248  

=ACOS((COS((B2*PI()/180))*COS((E2*PI()/180))*COS((-1*(F2*PI()/180))-(-1*(C2*PI()/180))))+(SIN((B2*PI()/180))*SIN((E2*PI()/180))))*6371