我正在将Bing Maps与Ajax一起使用,我大约有80,000个位置可放入图钉。该功能的目的是允许用户搜索路易斯安那州的餐馆,然后单击图钉以查看健康检查信息。
显然,一次在 map 上放置80,000个引脚并没有多大好处,但我一直在努力寻找解决此问题的最佳方法。另一个问题是这些位置之间的距离非常小(所有80,000个都在路易斯安那州)。我知道我可以使用聚类来避免困惑的 map ,但这似乎仍然会导致性能问题。
我目前正在尝试做的就是在某个缩放级别之前不显示任何引脚,然后仅在当前 View 中显示引脚。我目前正在尝试执行此操作的方法是,使用viewchangeend事件查找缩放级别和 map 边界,然后(通过Web服务)查询数据库中该范围内的任何点。
感觉我正在以错误的方式进行操作。有没有更好的方法来管理大量数据?最好先尝试加载所有点,然后再准备好手头的数据,而不必每次移动 map 时都访问我的Web服务。如果是这样,我将如何处理?
我无法找到问题的答案,这通常意味着我在问错误的问题。如果有人能帮助我找出正确的问题,将不胜感激。
最佳答案
好吧,我为此实现了一种略有不同的方法。这只是一个有趣的练习,但是我正在使用HTML5 Canvas 在Bing Maps中显示我的所有数据(大约140.000点)。
我以前将所有数据加载到客户端。然后,我对绘图过程进行了很多优化,以至于将其附加到“Viewchange”事件(在 View 更改过程中始终触发)。
我已经写过关于这个的博客。您可以检查它here。
我的示例没有交互作用,但可以轻松完成(对于博客文章来说应该是一个不错的话题)。因此,您将不得不手动处理事件并自己搜索相应的点,或者,如果要绘制的点数和/或缩放级别低于某个阈值,请显示常规图钉。
无论如何,如果您不限于Bing Maps,另一种选择是使用Leaflet之类的。它允许您创建一个Canvas图层,它是一个基于图块的图层,但是使用HTML5 canvas在客户端中呈现。它开辟了新的可能性。检查this中的GisCloud map 。
尽管更适合静态数据,但还有另一个选择是使用一种称为UTFGrid的技术。开发它的小伙子当然可以比我更好,但它可以通过指尖的性能根据您的需要扩展尽可能多的点。它包含一个包含您的信息的图块层,以及一个附带的json文件,其中包含类似于“ascii-art”文件的内容,用于描述图块上的功能。然后,使用名为explain的库可以在其上提供完整的鼠标悬停,鼠标单击事件,而不会对性能产生任何影响。
我也对此事wax。
关于ajax - 如何在Bing Maps中处理大量图钉,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10218320/