我正在更新现有的Android应用以使用新的Google Maps Android API v2。我有大约2500个标记要添加到地图中。使用旧版本的API,我发现当有2500个标记时,地图的响应性是可怕的,所以我不得不通过添加地图当前可见区域中的标记来解决它。
我希望使用新的API可以更快地使用2500个标记,但它仍然很糟糕,即使在Nexus 4上也是如此,我没有看到任何类型的聚类选项。
所以我的问题是:我如何确定某个纬度/经度点是否包含在地图的可见区域内?
我在文档中查看了VisibleRegion,但到目前为止我还没有运气。非常感谢任何帮助。
*旁注:即使使用iPhone 3gs,iOS MKMapView(谷歌地图或Apple地图)上的2500个标记也非常流畅和敏感。我仍然无法理解为什么它在Android上如此之慢,即使使用最新最好的硬件。
答案 0 :(得分:51)
好吧,在尝试了几件事后,我想出了如何确定给定点是否在可见区域,而且非常简单:
//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的投影是一项昂贵的操作,因此如果您循环浏览一长串项目以创建标记并将其添加到地图中,就像我一样,只需在循环之前抓取一次投影
<强>更新强>
我决定写一篇博文,详细介绍如何显示位于地图可见区域的标记,并在标记移出屏幕时隐藏标记。这不是一个完美的解决方案,但如果你展示成千上万的标记,并且知道你的用户不需要同时看到所有这些标记(除非它们缩小出来),这是一个非常好的解决方法。
Hiding and Showing on screen Markers with Google Maps Android API V2
答案 1 :(得分:13)
对于Android上的群集解决方案,您可以尝试使用Android Maps Extensions: https://github.com/mg6maciej/android-maps-extensions