加入大量的标记时,谷歌Android的地图API V2很慢(Google Maps Android

2019-07-04 13:10发布

我更新现有的Android应用程序,以使用新的谷歌地图API的Android V2。 我对2500的标记,我要添加到地图中。 与旧版本的API,我发现地图的响应时,有2500个标志是可怕的,所以我不得不只增加了在地图的当前可见区域标记来解决它。

我希望2500个标记将与新的API速度更快,但它仍然是可怕的,甚至在Nexus 4,和我没有看到任何排序选项做集群。

所以我的问题:我怎么能确定是否一定纬度/经度点被包含在地图的可视区域内?

我已经看过VisibleRegion的文档中,但我已经没有任何与它的运气至今。 任何帮助是极大的赞赏。

*附注:在iOS的MKMapView 2500标记(谷歌地图或地图苹果)非常的流畅和快速,即使与iPhone 3GS。 我仍然无法理解为什么它这么慢于Android,甚至与最新和最伟大的硬件。

Answer 1:

好吧,试图一对夫妇更多的事情后,我想出如何确定给定的点是在可见光区,这是非常简单的:

//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(...));    
}

*请注意,得到的GoogleMap的投影是一个昂贵的操作,所以如果你通过项目的一长串循环创建标记,并将它们添加到地图像我,只有你循环之前抢投影一次。

更新

我决定写了一篇博客文章中详细介绍了如何显示在地图的可见区域标记和隐藏标记,因为他们离开屏幕。 这不是一个完美的解决方案,但如果你是显示数千个标记,知道你的用户并不需要看到他们都在同一时间(除非他们缩小出路),这是一个相当不错的变通。

隐藏和显示在与谷歌地图API的Android屏幕V2标记



Answer 2:

对于在Android集群解决方案,你可能想尝试Android地图扩展: https://github.com/mg6maciej/android-maps-extensions



文章来源: Google Maps Android API v2 very slow when adding lots of Markers