2

我有一个地图点数据库,我想将显示限制为一次最多显示约 50 个点。当用户放大时,可能会显示更多的点。

目前,我只是对结果集进行随机抽样。这不是很好,因为可能有空白区域,当放大时突然显示一个点。

我的下一个想法是我可以创建一个 10x5 的网格,然后迭代结果。如果网格中的某个位置是空的,我会显示一个点。这解决了之前的问题,但也不会让用户感觉到集中区域在哪里。此外,如果用户决定缩小到整个世界,这会很慢。

现在,我没有使用任何空间算法对数据进行排序。我的计划是先让它正常工作,然后快速完成。稍微阅读一下 RTress、kd-trees 和四叉树,我找不到任何可以帮助我选择样本的“智能”子集的东西。似乎应该有某种广度优先搜索可以很容易地解决这个问题。

4

3 回答 3

3

如何扩展您的原始想法。将其分解为网格,然后使用密度分析根据该区域中的要素数量创建不同大小的点。这样,用户只需查看较大(或较小)的点,就可以更加直观地了解特征密度。

至于让它更快,也许你可以为每个网格设置一个阈值。如果计数达到一定数量,则转到下一个网格。这样,您可以通过忽略高于人为设置的阈值(您可以根据对数据的经验分析来确定)的点来获得“最大”点并加快速度。

于 2009-07-26T03:48:58.693 回答
1

Michael Todd 提出了一些很好的建议。为此+1。

我想补充一点(取决于数据类型),您可以向地图点添加额外的属性。

例如,对于城市,您可以添加居住在其中的人数。然后根据缩放级别,您只显示一定大小的城市。或者更好的是,在您的选择算法中给他们更高的分数。在空旷的地方你仍然会看到较小的地方,在拥挤的地方你只会看到大城市。

这种方法适用于任何缩放级别,而每个缩放级别的预定义数据集仅在离散步骤中起作用。

于 2009-07-26T04:31:56.313 回答
0

由于我只有几千个点,并且有大量的离线时间,我创建了一个算法来创建一个分散因子,我可以通过它对数据进行排序。

  1. 我从我的集合中的一个随机点开始,给它一个 n=1 的分数,然后将它添加到选定的列表中。
  2. 然后我搜索距所选列表中任何点较远的点。
  3. 我拿这个点,给它n+1的分数,把它添加到选中的列表中,然后重复第二步,直到所有的点都被选中。

在我的地图中,我获取与范围过滤器匹配的所有点,并按排名升序对它们进行排序。无论过滤器或缩放,我都会有分布在屏幕上的点。

于 2009-08-25T10:53:14.077 回答