确定一组地理空间点是否包含在另一个组中

时间:2014-06-02 08:11:12

标签: python geospatial

在项目的这个阶段,我有两种类型的卫星数据(MODIS和AMSR-E)已经过滤和地理空间聚类。我的下一步是确定AMSR-E数据中的任何集群是否位于任何MODIS集群的范围内。

我使用SciKit中的DBSCAN库在python中单独聚集来自两个数据集的高值点 - 但我不确定如何识别一种类型的簇是否位于另一种簇中。

来自每个数据集的输入存储在python词典中,将群集ID映射到点列表及其值。换句话说,字典看起来像这样(虽然数字代替变量名称自然而然)。

{group_id:[(lat,long,data_val),(lat,long,data_val)]}

任何有助于找到算法以有效识别群集是否包含在彼此内部的任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:0)

在我看来,你需要两个基本的算法(其中有很多实现)

Point-in-polygon algorithm: 一种算法,用于确定点是否包含在由一组点给出的多边形内。

Convex-hull algorithm: 粗略地说,一种算法,给定一组点,即完全包围点的最小多边形。

以下是关于如何使用这些算法来实现目标的两个想法:

  1. 找到每个MODIS群集的凸包。
  2. 通过从每个群集中选择一个随机测试AMSR-E点,并在所有计算出的MODIS凸包上使用多边形点算法,确定哪些AMSR-E群集可能位于哪个MODIS群集点内。
  3. 对于可能位于MODIS凸包中的每个AMSR群集,在每个AMSR-E点上使用多边形点算法,以确定该群集中的所有AMSR-E点是否都在已识别MODIS凸壳。
  4. 由于凸包算法和多边形点算法需要不同的计算量,这取决于每个集群中有多少点,这个过程可能更有效:

    1. 找到每个MODIS群集的凸包。
    2. 找到每个AMSR-E群集的凸包。
    3. 通过从每个AMSR-E凸包中挑选一个随机点,并在所有计算出的MODIS凸包上使用多边形点算法,确定哪些AMSR-E集群可能位于哪个MODIS点集群内。
    4. 对于可能位于MODIS凸包中的每个AMSR群集,在AMSR-E凸包中的每个点上使用多边形点算法来确定是否所有AMSR-E凸包都指向该群集位于已识别的MODIS凸壳中。