Articles of markerclusterer

在Google Maps Android V2中群集大量标记时的最佳做法

我想在Google Map上显示大量标记(50k +)。 事实certificate,Android Maps Util Library https://github.com/googlemaps/android-maps-utils似乎是聚类标记时的首选。 我想知道是否存在任何最佳实践,以便在显示如此大量的标记时提高地图用户体验的性能。 例 例如,我使用群集管理器向群集管理器添加大约20.000个标记,从而在缩放和平移地图时产生不太平滑的地图交互体验。 我用过的: GridBasedAlgorithm gridAlgorithm = new GridBasedAlgorithm(); mClusterManager.setAlgorithm(new PreCachingAlgorithmDecorator(gridAlgorithm)); 我的策略 : 1)在摄像机更改事件中从群集器中删除所有标记,然后仅添加视图边界内的标记。 在高缩放级别上工作得很好,当缩放级别降低时,有许多标记要移除和添加,从而增加了整个聚类过程的开销 2)首先添加所有标记。 100个标记=>效果很好 1000 Markers => Works,但在缩小发生时已经显示出聚类过程中的缓慢 10000个标记=>行为已经非常缓慢,需要很长时间才能重新聚类标记并且缩小输入并不顺利 20000 Markers =>重新聚类需要很长时间(> 20秒),地图没有响应

使用集群管理器在地图上添加新标记不会反映更改,直到我放大并缩小地图

当我使用集群管理器以编程方式在地图上添加新标记时,它不会反映更改,直到我更新放大和缩小。 我已经看到很多关于堆栈溢出的问题,但这对我不起作用, 所以请告诉我如何在不清除地图的情况下更新地图。 码: for (int i = 0; i < name.length; i++) { Person_marker person_marker = new Person_marker(createRandLocation(latLng), name[i], getAddress(latLng), typedArray.getResourceId(i, -1), time[i], acuracy[i]); person_markerList.add(person_marker); } clusterManager.clearItems(); clusterManager.addItems(person_markerList);

如何在Google地图中为clusterer中的标记设置我自己的图标

我正在使用GoogleMaps群集。 我有4种不同types的标记,每种标记从一个抽象类扩展,每个标记都有自己的owm图标,并在MarkerOptions字段中定义。 我将ClusterManager用于此抽象类。 我刚刚使用的时候 //marker is instance of one of extended classes and has abstract class type clusterManager.addItem(marker); 集群后,它将图标设置为默认值。 我怎么解决这个问题? 我试图使用这样的东西: //marker is abstract marker, getMarker returns the MarkerOptions of this marker clusterManager.getMarkerCollection().addMarker(marker.getMarker()); 但它也不起作用,标记在地图上打印了所需的图标,但没有聚类。 我应该在我的抽象类中创建一些创建方法,还是有一些方法可以从DefaultClusterRenderer扩展? 我没有使用谷歌或学习谷歌地图libfind有关它的一些信息。 谢谢你的帮助!

Google Maps Android v2中的群集标记

我必须从Google Maps Android v2 API在GoogleMap上放置不同的标记。 问题是多个标记设置为相同的位置(lat / lng),因此用户只能看到“最新”标记。 是否有可能(在最好的情况下:库)从同一区域聚类不同的标记(与缩放级别相关)? 我已经阅读过有关MarkerClusterer的内容 ,但这是专为JavaScript API设计的。

google maps api v2内存不足错误

我的应用程序中存在巨大的内存问题。 我正在使用谷歌地图api v2与ClusterManager和自定义标记。 我通过调用markerOptions.icon(BitmapDescriptorFactory.fromBitmap(bitmap));提供图像markerOptions.icon(BitmapDescriptorFactory.fromBitmap(bitmap)); 对于每个标记,基于其类别。 问题是:在几次屏幕旋转后,我的应用程序因OOM错误而崩溃: 05-14 11:04:12.692 14020-30201/rokask.rideabike E/art﹕ Throwing OutOfMemoryError “Failed to allocate a 4194316 byte allocation with 1627608 free bytes and 1589KB until OOM” 05-14 11:04:12.722 14020-30201/rokask.rideabike E/AndroidRuntime﹕ FATAL EXCEPTION: GLThread 19179 Process: rokask.rideabike, PID: 14020 java.lang.OutOfMemoryError: Failed to allocate a 4194316 byte allocation with 1627608 free bytes and 1589KB until OOM […]

Android映射utils群集图标颜色

有没有方法可以更改群集项的背景颜色? (显示标记计数的那个,如100 +,200 + ……)。 我试着查看ClusterManager的源代码,但找不到任何改变颜色的选项,但也许有人知道如何做到这一点。 我基本上想要“物化”那些颜色。

Google Maps Utility:如何从ClusterManager获取所有标记<?>?

对不起我的英语不好 我尝试了ClusterManager<?>.getMarkerCollection().getMarkers()方法,但它返回空集合。 我在我的应用程序Google Maps Utility Library 。 每次屏幕旋转后,我创buildAsynkTask并在后台线程从数据库读取数据,并添加项目到ClusterManager : cursor.moveToFirst(); while (!cursor.isAfterLast()) { SomeData row = readSomeDataRow(cursor); clusterManager.addItem(new ClusterItemImpl(row)); cursor.moveToNext(); } 当AsyncTask完成其工作(即在主线程中)时,我尝试从ClusterManager获取所有标记: clusterManager.cluster(); // cluster manager returns empty collection \|/ markers = clusterManager.getMarkerCollection().getMarkers(); 但是ClusterManager返回空集合。 可能在我调用getMarkers()的那一刻, ClusterManager却没有在地图上放置标记,稍后会做(可能在后台线程中)。 如果是这样的话,那我该怎么抓住那一刻呢?

Android Maps ClusteredMarkers – 不显示非集群?

我从这里使用Google Maps Android标记集群实用程序,并从我的服务器收到的列表中添加一堆项目(约700)。 我已经解决了最初的错误,我可以看到这些簇,然后放大它们,看到它们变成了单独的标记。 但是,有一些项目与其他项目相距甚远,所以即使在最大限度缩小的情况下,它们也绝不会聚集在一起。 出于某种原因,这些项目不会显示在我的地图上 – 不是当我放大时,而不是当我缩小。 我已经检查了坐标,他们是真实的,在我开始使用集群之前,我可以看到这些项目没有问题,所以我假设我在集群代码中做了一些错误。 这里是一些代码: private void setUpClusterer() { // Initialize the manager with the context and the map mClusterManager = new ClusterManager<>(getActivity(), map); vendorRenderer = new VendorRenderer(); mClusterManager.setRenderer(vendorRenderer); mClusterManager.setOnClusterClickListener(this); mClusterManager.setOnClusterItemClickListener(this); //point the maps listeners at the listeners implemented by the cluster manager map.setOnCameraChangeListener(mClusterManager); map.setOnMarkerClickListener(mClusterManager); //add items to the cluster […]

DefaultClusterRenderer getMarker()在缩放时返回null

我想要改变点击群集标记的背景。 我通过这样做 @Override onClusterClick(Cluster<MyObject> cluster) { Marker marker = renderer.getMarker(cluster); marker.setIcon(….); } 这可以很好地预期一种情况:放大或缩小时,集群标记的数量不会改变。 例如,如果我有一个15个集群和一个5个集群,然后放大或缩小一个级别,则保留相同的两个集群。 现在点击其中一个renderer.getMarker(cluster)返回null。 如果缩放后​​重新聚集,getMarker不为空。 我的DefaultClusterRenderer在下面。 我检查onClusteredRendered上的标记,它从不为空。 这是DefaultClusterRenderer中的一个错误还是我应该做别的? private class MyRenderer extends DefaultClusterRenderer<MyObject> { private IconGenerator iconGenerator; private float density; public MyRenderer(Context context, GoogleMap map, ClusterManager<MyObject> clusterManager) { super(context, map, clusterManager); density = context.getResources().getDisplayMetrics().density; } @Override protected void onBeforeClusterItemRendered(MyObject item, MarkerOptions markerOptions) { markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.my_pin)); […]

在Android版Google地图v2中刷新制作者(ClusterItems)

我正在使用Google Maps Android API实用程序库,并正在从互联网上下载我想用作标记的某些图像。 我这样做的方式就像下面的代码片段所示: class MarkerItemClusterRenderer extends DefaultClusterRenderer<MarkerItem> { … @Override protected void onBeforeClusterItemRendered(MarkerItem item, final MarkerOptions markerOptions) { super.onBeforeClusterItemRendered(item, markerOptions); mImageLoader.get(item.getImageUrl(), new ImageListener() { @Override public void onErrorResponse(VolleyError error) { Log.i("XXX", error.toString()); } @Override public void onResponse(ImageContainer response, boolean isImmediate) { if (response != null && response.getBitmap() != null) { mImageIcon.setImageBitmap(response.getBitmap()); Bitmap icon […]