【问题标题】:Finding the overlapping locations for a 5 mile and 10 mile radius for a list of location data with latittude and longitude查找具有纬度和经度的位置数据列表的 5 英里和 10 英里半径的重叠位置
【发布时间】:2017-01-31 02:04:52
【问题描述】:

我有一个包含 10,000 个观察数据集的位置信息列表,如下所示:

 ADDRESS                 |    CITY        |  STATE | ZIP   |LATITUDE   |LONGITUDE

1189 Beall Ave           |  Wooster       | OH  | 44691 | 40.8110501   |-81.93361870000001

580 West 113th Street    |  New York City | NY  | 10025 | 40.8059768   | -73.96506139999997

268 West Putnam Avenue   |  Greenwich     | CT  | 06830 | 40.81776801  |-73.96324589997

1 University Drive       |   Orange       | CA  | 92866 | 40.843766801 |-73.9447589997

200 South Pointe Drive   |  Miami Beach   | FL  | 33139 | 40.1234801   |-73.966427997

我需要在 5 英里和 10 英里半径范围内找到重叠的位置。我听说他们是一个名为 geodist 的功能,它可以让我这样做,尽管我从未使用过它。问题是,为了让 geodist 工作,我可能需要所有纬度和经度的组合并排,这可能会使文件非常大且难以使用。我也不知道如何才能让每个组合并排的纬度/经度。

有谁知道我可以得到我正在寻找的最终输出的方法吗?

【问题讨论】:

  • 要获得最佳答案,请先尝试简单的方法,并展示您的作品。套用一句格言,100M 记录已不再是过去,SAS 应该可以轻松扩展到该范围。如果由于某种原因您的环境有限(例如,您正在与 Excel 交互),那么有许多明智的方法来预处理数据。人们会很高兴通过大量方法来奖励您的努力。

标签: sas latitude-longitude geocode proc-sql


【解决方案1】:

以下是解决此问题的一种可能方法的概述:

  • 通过将坐标四舍五入到最接近的 0.01 度或类似的值,将每个地址分配到经纬度“网格”中。
  • 在每个单元格中,将所有地址编号为 1 到 n,以便每个地址都有唯一的 ID。
  • 编写一个数据步,通过 set 语句将地址数据集作为输入,并将其加载到哈希对象中。您的数据集相当小,因此在内存中拟合相关位应该没有问题。
  • 对于每个地址,仅计算到同一单元格中的其他地址或某个半径内的其他单元格的距离,即
    1. 决定查找哪个单元格
    2. 使用您之前创建的唯一 ID 遍历该单元格中的所有地址,从哈希对象中查找每个地址的坐标
    3. 使用geodist计算每个人的距离,如果是守门员则输出记录。

这需要更多的编程工作,但它比 O(n^2) 蛮力搜索更有效。我曾经使用过一个类似的算法,数据集包含 180 万个英国邮政编码和大约 6000 万个坐标数据点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多