在R或Python中查找一组对象中的最小距离

时间:2016-12-08 14:14:27

标签: python r geocoding geospatial geocode

我有一组县以及每个质心的纬度和经度:

county    lat       lon 
Abiline   32.134   -23.322
Cook      43.324   -32.219
Allegheny 31.949   -30.123

我还列出了许多医院,每个医院的经度和纬度。我想找到每个县中心距离最近医院的距离。

到目前为止,我已经使用ggmap中的geocode()函数查找每个县与每家医院的距离,然后选择最小距离。但是,因为我有很多县和很多医院,所以这个问题很快变得很高,并且可能需要很长时间。

我想避免使用arcgis - 在R或Python中有这么简单的方法吗?

1 个答案:

答案 0 :(得分:0)

我认为你想要达到的目标就像这个问题 closest pair of points这里有完整的算法和解释来实现相同的目标:

  

我们在平面上给出了一个n个点的数组,问题是要找出数组中最近的一对点。这个问题出现在许多应用中。例如,在空中交通管制中,您可能希望监视太靠近的飞机,因为这可能表示可能发生碰撞。回想下两个点p和q之间的距离的公式。   蛮力解是O(n ^ 2),计算每对之间的距离并返回最小值。我们可以使用Divide and Conquer策略计算O(nLogn)时间的最小距离。

<强>算法

以下是O(n(Logn)^ 2)algortihm的详细步骤。 输入:n个点P []的数组 输出:给定数组中两点之间的最小距离。

作为预处理步骤,输入数组按x坐标排序。

  1. 找到排序数组中的中间点,我们可以将P [n / 2]作为中间点。
  2. 将给定的数组分成两半。第一个子阵列包含从P [0]到P [n / 2]的点。第二个子阵列包含从P [n / 2 + 1]到P [n-1]的点。
  3. 递归地找到两个子阵列中的最小距离。让距离为dl和dr。找到dl和dr的最小值。让最小值为d。
  4. 递归地找到两个子阵列中的最小距离。让距离为dl和dr。找到dl和dr的最小值。让最小值为d。
  5. 根据y坐标对数组strip []进行排序。这一步是O(nLogn)。它可以通过递归排序和合并优化为O(n)。
  6. 找出strip []中的最小距离。这很棘手。从第一眼看,它似乎是一个O(n ^ 2)步骤,但它实际上是O(n)。几何上可以证明,对于条带中的每个点,我们只需要在其后检查最多7个点(注意条带根据Y坐标排序)。
  7. 最后返回上述步骤(步骤6)中计算的最小d和距离
  8. 实施 is here

    希望这有助于:)

    资料来源:Geeksforgeeks.org