2

项目背景: 我正在为 java 编写一个可以使用 gdal2tile.py 瓦片的地图瓦片覆盖类。基本上,我最终会得到数千个 jpg 文件,它们位于“缩放级别/X 坐标/Y 坐标”之类的文件结构中。坐标是整数,但不一定从 0 或 1 开始。我将不得不搜索在一定范围内找出我需要渲染哪些。

我的问题: 我尝试使用文件结构本身进行迭代,但速度非常慢(不足为奇)。我尝试使用文件结构和 .contains() 字符串的 ArrayList 进行迭代,但它似乎更慢(不太令人惊讶)。理想情况下,我想使用一种数据结构,它可以让我在多个维度上选择一个范围,以便我可以调用类似的东西。

Tiles.getWhere(Zoom Level,min X,max X,min Y,maxY);

我认为某种 Collection 或 TreeMap 将是正确的选择,但我对 Java 的经验不足,无法确定,而且我不想对许多不同的方法进行基准测试。

我可以使用 SQLite 来做到这一点,但这似乎有点矫枉过正。

我的问题: 在给定多维约束的情况下,检查数据集是否存在的最有效方法是什么?

4

3 回答 3

0

考虑到您的问题,我可以找到三个方向,您可以接下来将搜索目标定位在哪些方向(这不是手把手指南,而是针对您遇到的卡住情况的开箱即用的脑洞大开器)

1) Java 内置结构的使用。是的,确实,列表是搜索方法的最坏情况。A Map,顾名思义,对于地图来说要方便得多。它不仅是名称,而且与 aMap相比,对 a 的索引消耗的时间要少得多List。你可以把你的地图想象成一个立方体,你必须处理其中大约一半的点,如果你使用List它,当你通过索引地图进行搜索时可能只有一个狭窄的层。有很大的差异。所以,我在这里的回答:Map是朝着正确方向的关键词(假设您在阅读我的回答后想以这种方式进行操作)

2)使用地图服务器解决方案。这可能与您的方法相去甚远,但整个框架都是为解决您的问题类型而设计的。一个例子是GeoServer。它为整个问题提供了现成的解决方案。对于您可能面临的重大问题,它是一个稳定的解决方案:从源向用户显示地图。

3)坚持您使用的 GDAL 框架,您可以选择稍微不同的 py 文件,例如gdal_proximity.py- 哇!-你手中有一个搜索的可能性!这个特殊的搜索中心点和距离,但会做你需要的东西=)

有一个起点,我将如何做到这一点。这能起到什么作用吗?

于 2011-10-17T17:58:34.190 回答
0

在我看来,您正在寻找像区间树这样的东西。

http://en.wikipedia.org/wiki/Interval_tree

我过去已经实现了其中一个,但只是在一个维度上。维基百科参考提到了更多维度的扩展。

保罗

于 2011-10-19T10:40:29.300 回答
0

可能是您正在寻找具有多个键的地图。

Commons-collections 提供了一个带有多个查找键的映射:

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/map/MultiKeyMap.html

map 保证了 O(1) 的插入和 O(1) 的选择时间。

于 2011-10-19T11:38:30.200 回答