介绍了 H3 API 参考polyfill
,其理念是“在围绕给定地理围栏定义的 k 环中的每个六边形上进行点内多边形操作”。问题是:
- 我不明白“围绕地理围栏定义的 k 环”是什么意思,这是一个“环”吗?它的中心实际上是整个地理围栏?
- 如果判断是基于六边形的中心位置,并进行“多边形中的点”操作,则地理围栏和六边形有可能重叠,但六边形的中心不在地理围栏内,我无法得到它的索引使用
polyfill
. 那么,有什么方法可以分别获得完全在地理围栏内的两种六边形和与地理围栏部分重叠的六边形?
介绍了 H3 API 参考polyfill
,其理念是“在围绕给定地理围栏定义的 k 环中的每个六边形上进行点内多边形操作”。问题是:
polyfill
. 那么,有什么方法可以分别获得完全在地理围栏内的两种六边形和与地理围栏部分重叠的六边形?你实际上可以忽略这k-ring
部分——它是一个实现细节,事实上,这个细节在最新版本的库中已经改变了。这两种实现的基本思想是我们收集一组覆盖整个多边形的“测试”单元格,然后根据每个单元格的中心进行多边形点检查。
听起来您需要的是获取所有完全包含的单元格和所有相交单元格的方法。这个功能有一个现有的特性请求,虽然我们想添加这个,但目前库中不支持其他 polyfill 模式。
自己滚动并不难,但对于大型系列来说可能会很慢。您需要对单元格和多边形进行多边形相交检查 - 一个简单的实现将简单地检查任何两个线段是否相交(O(polygonVertices)
因为单元格顶点的计数实际上是恒定的)。
运行polyfill
以获得起始设置。这包括完全包含的单元格和一些(但不一定是全部)部分包含的单元格。
对于起始集中的每个单元格,检查它是否与多边形相交
现在识别不在初始polyfill
集中的部分包含的单元格。当单元格保留在边界队列中时,弹出第一个单元格并使用kRing(cell, 1)
它来获取其邻居。对于每个邻居:
polyfill
集合中,则忽略。当边界队列为空时,您的两个集合(包含和部分包含)是完整的。