【问题标题】:Comparing goegraphic points where X and Y are in two columns比较 X 和 Y 在两列中的地理点
【发布时间】:2018-02-22 11:31:46
【问题描述】:

我有一个巨大的数据集,其中包含 x 和 y 坐标。我正在查看两个事件是否彼此接近,如果是,请突出显示这些事件或将它们拉出并将它们放在单独的工作表中。

X 坐标在 V 列中
Y坐标在W列中

我正在寻找彼此之间给定距离内的点。我想突出显示或将它们放入新的工作表中。

一个问题是如何举报。我可能有两个彼此靠近的点,它们远离另外两个彼此靠近的点。

我的目标是列出数千个事件,并在地图上找出彼此接近的事件,而无需真正搜索所有事件。我的数据集不断增长,因此从长远来看,这将节省大量时间。

【问题讨论】:

  • 这个网站不是为了让人们简单地请求为他们编写预打包的代码。你自己尝试过吗?如果您可以简单地突出显示有问题的行,您是否考虑过只使用条件格式?
  • 我什至不知道如何从这个问题开始。我做了很多谷歌搜索,但我之前没有发现任何人有这样的问题。如果您有一个与我正在寻找的类似内容的链接,其中条目与某个阈值内的其他条目进行比较,我很乐意从那里开始,稍后再回来提供更具体的查询。
  • 您想比较点还是只比较纬度?
  • 积分。我只是认为最简单的方法是将所有 x 坐标相互比较,取出具有相似 x 坐标的事件,然后从该组中比较所有 y 坐标,然后复制适合两者的所有事件新工作表的标准。我认为这很复杂,但我没有看到更好的方法。

标签: vba excel


【解决方案1】:

我不确定您是否只想比较 x 坐标。您可以找到两个接近但 y 坐标相距很远的 x 坐标。不确定这是否是你想要的,只是在一个方面接近的东西。如果那是您想要的,只需循环从另一行减去一行。如果您想查找两个地理点之间的距离,请参见下文。

你可以使用勾股定理得到两点之间的距离。

Dim OrigPoint As Double
Dim CheckPoint As Double
Dim Distance As Double

OrigPoint = point1X - point2X
CheckPoint = point1Y - point2Y

Distance = Sqr((OrigPoint * OrigPoint) + (CheckPoint * CheckPoint))

If Distance < 300 Then
    'Copy or highlight your data
End If

你需要循环行做这样的事情。然后在上面的代码中使用这些将当前行上的点与下一行上的点进行比较。

OrigPoint = ActiveWorkbook.Sheets("Sheet1").Range("V" & lrow).Value - ActiveWorkbook.Sheets("Sheet1").Range("V" & lrow + 1).Value

CheckPoint = ActiveWorkbook.Sheets("Sheet1").Range("W" & lrow).Value - ActiveWorkbook.Sheets("Sheet1").Range("W" & lrow + 1).Value

【讨论】:

  • 这会比较列中的所有坐标吗?换句话说,我没有选择坐标来比较所有条目,我想看看每个坐标是否在它们各自的两列中的任何其他坐标旁边。我怎样才能将这些条目转移到新工作表中?
  • 不,您必须编写一个遍历每一行的循环。然后将值加载到 OrigPoint 和 CheckPoint。要传输数据,您必须在从一个工作表到下一个工作表的范围内进行复制粘贴或类似的操作。以下是循环行的一些示例。 stackoverflow.com/questions/24377197/… 这是复制数据的方法。 stackoverflow.com/questions/28038263/…
  • 非常感谢您的建议。我是使用 VBA 的初学者,我需要我能得到的所有帮助。 :)
猜你喜欢
  • 2020-01-20
  • 2015-02-18
  • 2019-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多