6

我将 Bing Maps 与 Ajax 一起使用,我有大约 80,000 个位置可以放置图钉。该功能的目的是允许用户搜索路易斯安那州的餐馆并单击图钉以查看健康检查信息。

显然,一次在地图上拥有 80,000 个图钉并没有多大好处,但我正在努力寻找解决这个问题的最佳方法。另一个问题是这些地点之间的距离非常小(所有 80,000 人都在路易斯安那州)。我知道我可以使用聚类来避免地图混乱,但似乎这仍然会导致性能问题。

我目前正在尝试做的是在某个缩放级别之前不显示任何引脚,然后仅在当前视图中显示引脚。我目前尝试这样做的方法是使用 viewchangeend 事件来查找地图的缩放级别和边界,然后查询数据库(通过 Web 服务)以获取该范围内的任何点。

感觉就像我正在以错误的方式解决这个问题。有没有更好的方法来管理如此大量的数据?最好先尝试加载所有点,然后在手头有数据,而不必每次地图移动时都访问我的网络服务。如果是这样,我会怎么做?

我一直无法找到问题的答案,这通常意味着我问错了问题。如果有人可以帮助我找出正确的问题,将不胜感激。

4

2 回答 2

9

好吧,我已经实现了一个稍微不同的方法。这只是一个有趣的练习,但我正在使用 HTML5 画布在 Bing 地图中显示我的所有数据(大约 140.000 点)。

我之前将所有数据加载到客户端。然后,我优化了绘图过程,将其附加到“Viewchange”事件(在视图更改过程中一直触发)。

我在博客上写过这个。你可以在这里查看

我的示例没有交互,但可以轻松完成(对于博客文章来说应该是一个不错的主题)。因此,您必须手动处理事件并自己搜索相应的点,或者,如果要绘制的点数和/或缩放级别低于某个阈值,则显示常规图钉。


无论如何,如果您不限于 Bing 地图,另一种选择是使用Leaflet之类的。它允许您创建一个 Canvas 层,它是一个基于图块的层,但使用 HTML5 画布在客户端呈现。它开启了一系列新的可能性。例如,在GisCloud中查看这张地图。


另一种选择,虽然更适合静态数据,但使用一种称为 UTFGrid 的技术。开发它的小伙子们当然可以比我更好地解释它,但它可以根据你想要的分数进行缩放,并且表现出色。它包括一个带有您的信息的图块层,以及一个随附的 json 文件,其中包含描述图块上特征的“ascii-art”文件。然后,使用一个名为wax的库,它提供了完整的鼠标悬停、鼠标单击事件,而不会对性能产生任何影响。

我也写过关于它的博客。

于 2012-04-19T21:41:04.703 回答
3

我认为如果你能侥幸使用它,集群将是你最好的选择。您说您尝试使用集群,但仍然导致性能问题?我在V7 Interactive SDK上用 80000 个数据点对其进行了测试,它似乎表现良好。通过转到链接并更改Load module - clustering选项卡中的行来自己测试它:

TestDataGenerator.GenerateData(100,dataCallback);

TestDataGenerator.GenerateData(80000,dataCallback);

然后按下Run按钮。有这么多数据点,我的表现似乎可以接受。

于 2012-04-19T18:49:38.323 回答