存储地图数据的理想数据结构?


12

面试中有人问我这个问题。我在测试中做的还不错,但对回答这个问题的认识不足。我很好奇我可以使用哪种数据结构快速查询数据。

基本上,想法是在某种数据结构中存储路段(由点组成的线)。应该快速查询哪些路段(或点)在距点(半径)一定距离内。


要真正了解更多信息,我将继续阅读:cgal.org,然后查看以下项目:cgal.org/projects.html#gis,找到与所需内容相似的项目,然后研究API的用法,最后研究API的组成。
Job

Answers:


16

存储地理数据的典型方法是使用空间数据结构,例如R树(或某些变体,例如R + tree,R * tree等)。这就是通常在具有GIS功能的GIS中实现地理数据类型的方式。 RDBMS。(我知道Microsoft的SQL Server 2008和PostGIS都使用R树来表示地理类型。)它们满足您描述的所有基本要求,并且简单地支持交集,位置,距离和其他查询类型。

根据数据的类型,您可能还会发现常用的kD树,四叉树,八叉树,边界体积层次结构(包括轴对齐的边界框树)等东西。实际上,这在3D游戏中更为常见,因为对象的大小和形状与交集查询更相关。与R树相比,它们在GIS中使用较少。


0

对地图数据进行不同类型的操作将需要不同的存储格式以获得最佳结果。例如,考虑以下三个任务:

  1. 给定一个点,找到离该点最近的道路
  2. 给定一个特定大小的地理区域,找到该区域内的所有道路。
  3. 给定两条道路,找到它们之间的最短路线。

需求之间的差异非常大,以至于除非一个人需要适应地图的“实时”更改,否则最好通过存储三个单独的数据副本(每个副本针对上述任务之一进行了优化)来比尝试更好。提出一种可以很好地处理所有三个任务的格式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.