【问题标题】:Quadtree on android maps utils安卓地图工具上的四叉树
【发布时间】:2014-02-20 18:57:01
【问题描述】:

我正在使用 google maps v2 开发一个在 google maps 上绘制多边形的 android 应用程序。但是现在我必须确定单击某个多边形并弹出一个窗口。

I found this useful library on github

这个库实现了 containsLocation 方法。此方法接收一个 LatLng(通过点击地图)和一个 List(多边形)。这很好,但如果我在地图中有 100 万个多边形,我将无法全部迭代并测试某个 LatLng 是否属于某个多边形。我记得我可以使用四叉树来获得更高的性能,并且这个库也实现了四叉树,但它使用点。这样做的最佳方法是什么?我可以为 LatLng 的四叉树重新实现这个四叉树吗?或者在每次点击中我必须将此点击转换为点并在点四叉树上搜索?

问候

【问题讨论】:

    标签: android google-maps polygon quadtree


    【解决方案1】:

    我认为您需要实现一个存储多边形的四叉树,然后查询该树以查看哪个多边形(如果有)包含 LatLng。如果您四处搜索,我相信您可以找到一个不错的实现。

    【讨论】:

    • 我正在搜索,但我找不到任何用于使用 LatLng 存储多边形的四叉树。我能找到的最好的是linkquadtree 存储带有点[/link] 的项目。但我有一些问题。这个四叉树与 LatLng 的界限是什么?如果我存储多边形(具有多个 LatLngs 点)我使用什么 LatLng 来存储多边形?
    • LatLng 与 x,y 相同。阅读这篇论文,将多边形存储在四叉树中:infolab.usc.edu/csci585/Spring2008/den_ar/p182-samet.pdf。您可以使用 PM 四叉树找到一个点所在的区域(这是您想要做的):cs.umd.edu/users/meesh/420/Notes/KingaNotes/… 如果您查找 PM 四叉树,我相信您可以在线找到更多资源。
    【解决方案2】:

    你不能使用点四叉树,你的多边形需要一个对象四叉树。对象四边形使用多边形的边界框或任何对象添加到树中。

    您不需要考虑 latLong,使用 x,y,x= 经度,y = 纬度。

    考虑阅读 Hanan Sammet:多维数据结构的基础。

    【讨论】:

    • 使用对象四叉树可以存储四叉树折线、多边形和点(在地图上用小圆圈绘制)吗?我将在地图上拥有所有这些形状,当我在地图中单击时,我需要将 LatLng 单击点提供给四叉树,她必须给我一个可以包含此 LatLng 的点、折线或多边形的列表。所以,在那之后,我将尝试这个返回列表中的每个元素,并测试 LatLng 是否包含在一个元素中,从而识别对某个形状的点击。我想对了吗?这是最好的方法吗?我能找到任何可以做到这一点的开源实现库吗?
    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2014-06-14
    相关资源
    最近更新 更多