【问题标题】:Datastructure for googlemap like application?谷歌地图之类的应用程序的数据结构?
【发布时间】:2009-04-06 22:14:58
【问题描述】:

我正在做一个地图路由应用程序。有几个人建议我做一个数据结构,将地图分割成一个网格。从理论上讲,这听起来确实不错,但我不确定,因为我在实现它时性能很差。

在最坏的情况下,您必须绘制每条道路。如果将地图划分为网格,则网格中所有单元格中的道路总和将远大于将所有道路放在列表中的情况。(如果道路通过,每个单元格的道路必须比实际需要的多它)。

如果我必须放大,我可以看到使用网格的一些巧妙之处,但如果我将其保留在列表中,我可以在每次放大时减少道路数量。 现在(通过使用列表)它并不是真的很快,所以我全力以赴让它更快。但在实践中,以网格划分会让我变慢。

关于我应该使用什么数据结构和/或我可能做错了什么有什么建议吗?

【问题讨论】:

    标签: data-structures


    【解决方案1】:

    相关信息请参阅此问题:

    What algorithms compute directions from point A to point B on a map?

    以写这种软件为生的人已经回答了。

    关于渲染参见:

    What is the best way to read, represent and render map data?

    我不太确定您是在尝试快速路由还是渲染!

    【讨论】:

    • 谢谢!为了回答你的问题,我只要求渲染。那里有很多信息,这里已经很晚了,但我明天一定会读完:)
    【解决方案2】:

    如果你想让它走得快,你最好把你的道路组织成主要和次要道路。

    使用次要道路列表查找到最近的主要道路的路线。 使用主要道路让您靠近目的地。 然后回到小路完成路线。

    如果没有这样的分割,就会有很多路要搜索,其中大部分都是很慢的路线。

    【讨论】:

    • 好主意——我还没有想到。实际上我的问题只是关于绘制道路,但我以后可以使用这个建议:)
    【解决方案3】:

    google 不会在每次刷新屏幕时绘制每条道路。他们使用预先绘制的地图图块。他们可以根据需要重新绘制它们。例如当有地图更新时。他们甚至使用透明的覆盖层、成堆的瓷砖来添加和删除细节层。

    非常聪明,但非常简单。

    您可能想查看 openlayers javascript 库。免费,几乎可以用地图做任何你需要做的事情。

    Maptraction JS 也可用 - 它不如 OpenLayers 完整

    【讨论】:

    • 谢谢!我只用 Java 和 C# 做了 1 年的编程,所以这看起来对我来说有点先进。不过还是很高兴知道。
    【解决方案4】:

    使用网格作为空间数据结构更理想,可能是四叉树,因为它以对数方式分解地图。通过研究源,我的猜测是谷歌使用(那个或)类似的数据结构。

    至于获取方向,您可能希望首先考虑分层路径查找来近似方向并加快过程;在这种复杂程度下,通用路径查找算法往往会很慢。

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      相关资源
      最近更新 更多