【问题标题】:Match point to polygons in a big polygon list将点与大多边形列表中的多边形匹配
【发布时间】:2013-02-04 09:50:03
【问题描述】:

我有一个大的多边形列表(比如大小 250,000)和一个大的点列表(比如大小 100,000)。我需要做的是找出每个点属于哪个多边形。

多边形始终是具有 5 个点的矩形/菱形,其中第一个点和最后一个点相同。它们还具有与多边形相关的近似中心点。 示例多边形如下: Polygon(a;b;c;d;a) = (3,1; 5,3; 3,5; 1,3; 3,1) 和中心点 (x) = (3 , 3).见下图:

          c (3,5)
         /\
        /  \
(1,3) d/    \b (5,3)
       \ x  /
        \  /
         \/
          a (3,1)

这是一个简化的示例。这些点大部分是纬度/GIS 坐标。

输入的点列表可能与任何多边形都不匹配,或者可能与多边形列表中的一个或多个多边形匹配。

目前我有一个函数,它需要一个点和一个多边形来查看该点是否在多边形内。每当我想看到一个点在多边形中时,我必须遍历完整的多边形列表以查看它是否匹配。此外,由于一个点可能位于多个多边形中,因此我每次都必须遍历完整列表。这是非常低效的。

我正在寻找的是将这些多边形排序为 HashMap 或其他东西,以便我可以快速获取一些需要检查每个点的多边形,而不是完整的多边形列表。由于这些点同时具有 x 和 y 参数,因此我无法找到对多边形进行排序的好方法。 另请注意,每个多边形都有一个中心点。那么有没有办法以这些中心点为关键点对多边形进行排序,以便我们轻松查找?

对此有任何想法/想法吗?谢谢!

【问题讨论】:

    标签: java algorithm gis polygon


    【解决方案1】:

    将您的 2D 空间拆分为方形单元,每个单元存储与单元相交的多边形列表。当需要检查点时,首先找到该单元点所属的单元格点,然后遍历与该单元格相交的所有多边形并进行测试。选择像元大小,以便每个像元有合理数量的多边形。

    如果您的多边形分布不均匀,您可能需要使用quadtree 而不是方形单元格。

    【讨论】:

      【解决方案2】:

      使用k-d树,这是一种有效的空间划分

      http://en.wikipedia.org/wiki/K-d_tree

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        • 2016-04-03
        • 1970-01-01
        • 2011-12-19
        • 2012-02-09
        相关资源
        最近更新 更多