如何在Android MapView中显示数千个OverlayItems

时间:2011-06-16 09:28:48

标签: android sqlite google-maps google-maps-api-3 android-mapview

我遇到了Android MapView API的一些问题。我从一个我希望在MapView中显示的数据库中获取OverlayItems。如果我显示100个图标,我没有问题,但如果它变得更多 - 比如一个城市中的500个项目 - 它首先看起来非常糟糕,而第二个它减慢了很多。不幸的是,我的目标是显示10000个。我认为一个解决方案可以是向ZoomLevels注册一个侦听器,使它们显示/消失,但我找不到该功能。其次,我找不到使用地图缩放来缩放我的叠加层的功能。 任何想法都非常欢迎

3 个答案:

答案 0 :(得分:4)

ItemizedOverlay绘制方法中有一个非常奇怪的行为。当你说:从(x,y)到(x1,y1)绘制线时,绘制方法被调用大约20-30-40次 - 我不知道为什么。当你画一条线时是可以接受的,但是当你画出数千条线,图标等等时......它非常糟糕!要解决此问题,您应该创建一个缓存的叠加层。这是覆盖第一次绘制,创建对象然后阻止进行相同绘制的未来绘制的叠加层。

群集是一个图标后面的十几个图标。例如,如果地图上有1000个标记,则在特定的最小缩放级别中,您无法单独看到每个标记 - 它会变得混乱图标和颜色等等。而不是100个非常接近的标记,你可以放置一个簇标记。在放大时删除此群集并创建另一个群集...执行此操作,直到标记变得足够远,您可以看到它们分开。

请检查:Cluster markers

答案 1 :(得分:2)

采取以下方法:

  1. 创建缓存叠加层以防止多次绘制相同的群集;
  2. 画线;
  3. 根据缩放级别和标记接近度对标记进行聚类。
  4. 每次在叠加层中绘制时,请检查屏幕可见部分内的当前标记。如果不是,请不要画它!

答案 2 :(得分:0)

我的应用程序中的图标大小和缩放级别存在类似问题。我最终做的是有两组包含标记的叠加,一组带有“放大”图标,另一组带有“缩小”图标。然后只是在某个缩放级别更改了叠加层(使用缩放轮询器 - On zoom event for google maps on android