添加大量标记后,Google Maps Android API v2速度非常慢

Dis*_*Dev 31 android-mapview google-maps-android-api-2

我正在更新现有的Android应用以使用新的Google Maps Android API v2.我有大约2500个标记要添加到地图中.使用旧版本的API,我发现当有2500个标记时,地图的响应性是可怕的,所以我不得不通过添加位于地图当前可见区域的标记来解决它.

我希望使用新的API可以更快地使用2500个标记,但它仍然很糟糕,即使在Nexus 4上也是如此,我没有看到任何类型的聚类选项.

所以我的问题是:如何确定某个纬度/经度点是否包含在地图的可见区域内?

我在文档中查看了VisibleRegion,但到目前为止我还没有运气.任何帮助是极大的赞赏.

*旁注:即使使用iPhone 3gs,iOS MKMapView(谷歌地图或Apple地图)上的2500个标记也非常流畅和响应.我仍然无法理解为什么它在Android上如此之慢,即使使用最新最好的硬件也是如此.

Dis*_*Dev 53

好吧,在尝试了几件事后,我想出了如何确定给定点是否在可见区域,而且非常简单:

//Note: this.mMap is an instance of GoogleMap

LatLngBounds bounds = this.mMap.getProjection().getVisibleRegion().latLngBounds;

LatLng markerPoint = new LatLng(item.getLatitude(), item.getLongitude());

if(bounds.contains(markerPoint))
{
    this.mMap.addMarker(new MarkerOptions(...));    
}
Run Code Online (Sandbox Code Playgroud)

*请注意,获取GoogleMap的投影是一项昂贵的操作,因此如果您循环浏览一长串项目以创建标记并将其像我一样添加到地图中,则只需在循环之前抓取投影一次.

更新

我决定写一篇博文,详细介绍如何显示位于地图可见区域的标记,并在标记移出屏幕时隐藏标记.这不是一个完美的解决方案,但如果你展示成千上万的标记,并且知道你的用户不需要同时看到所有这些标记(除非它们缩小了出来),这是一个非常好的解决方法.

使用Google Maps Android API V2隐藏和显示屏幕标记


Mac*_*ski 13

对于Android上的群集解决方案,您可能需要尝试Android Maps Extensions:https: //github.com/mg6maciej/android-maps-extensions