32

我正在更新现有的 Android 应用程序以使用新的 Google Maps Android API v2。我有大约 2500 个标记要添加到地图中。在旧版本的 API 中,当有 2500 个标记时,我发现地图的响应能力非常糟糕,因此我不得不通过仅添加地图当前可见区域中的标记来解决这个问题。

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

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

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

*旁注:即使使用 iPhone 3gs,iOS MKMapView(谷歌地图或苹果地图)上的 2500 个标记也非常流畅且响应迅速。即使使用最新最好的硬件,我仍然无法理解为什么它在 Android 上这么慢。

4

2 回答 2

54

好吧,在尝试了更多的事情之后,我想出了如何确定给定点是否在可见区域中,这很简单:

//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 的投影是一项昂贵的操作,因此,如果您要遍历一长串项目以创建标记并将它们添加到地图中,就像我一样,在循环之前只抓取一次投影。

更新

我决定写一篇博文,详细说明如何显示地图可见区域中的标记并在标记移出屏幕时隐藏它们。这不是一个完美的解决方案,但如果您要显示数千个标记并且知道您的用户不需要同时查看所有标记(除非他们缩小),那么这是一个很好的解决方法。

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

于 2012-12-04T22:45:55.593 回答
13

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

于 2013-03-18T19:37:30.873 回答