8

我使用here的Google Maps Android标记群集实用程序,我从我的服务器收到的列表中添加了一堆项目(约700)。我已经解决了最初的错误,并且可以看到这些簇,然后放大它们,并将它们视为单个标记。但是,有一些项目与其他项目相距甚远,所以即使在最大缩小范围内,它们也不会聚集在一起。出于某种原因,这些项目不会显示在我的地图上 - 不是当我放大时,而是缩小时。Android地图ClusteredMarkers - 不显示非集群?

我检查了坐标,它们是真实的,在我开始使用集群之前,我可以看到这些项目没有问题,所以我假设我在集群代码中做了一些错误。

下面是一些代码:

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 manager 
    addClusterItems(-1); 
    mClusterManager.cluster(); 
} 

private void addClusterItems(int positionToMark) { 
    if (null == list) { 
     return; 
    } 
    LatLng position; 
    int maxMarkers = Math.min(list.size(), getResources().getInteger(R.integer.number_of_results_on_map)); 

    mClusterManager.clearItems(); 

    for (int i = 0; i < maxMarkers; i++) { 

     vendorItem = list.get(i); 

     if (vendorItem.getAddress().contains("Remote 1")) { 
      Log.e("Kibi", "Adding Remote 1, pos = " + i); 
      Log.e("Kibi", "Coordinates =" + vendorItem.getPointCoordinates().toString()); 
     } 
     if (vendorItem.getAddress().contains("Clustered 1")) { 
      Log.e("Kibi", "Adding Clustered 1, pos = " + i); 
      Log.e("Kibi", "Coordinates =" + vendorItem.getPointCoordinates().toString()); 
     } 
     if (vendorItem.getAddress().contains("Remote 2")) { 
      Log.e("Kibi", "Adding Remote 2, pos = " + i); 
      Log.e("Kibi", "Coordinates =" + vendorItem.getPointCoordinates().toString()); 
     } 
     VendorMapItem item = new VendorMapItem(vendorItem.getPointCoordinates(), 
       "Some other text"); 
     if (i == positionToMark) { 
      selectedItem = item; 
     } 

     mClusterManager.addItem(item); 
    } 
    if (-1 == positionToMark) { 
     selectedItem = null; 
    } 
} 

这表明越来越添加的项目 - 我加入帮我看看,我的2个远程项目具有良好的坐标加入,并期待类似(虽然远离)的日志我所选择的群集的项(这被视为)

这里是渲染器的代码:

/* This draws the markers for us */ 
private class VendorRenderer extends DefaultClusterRenderer<VendorMapItem> { 
    Context context = getActivity().getApplicationContext(); 
    public final IconGenerator mIconGenerator = new IconGenerator(context); 
    public final IconGenerator mSelectedIconGenerator = new IconGenerator(context); 
    private final View mItemView; 
    private final View mSelectedItemView; 

    public VendorRenderer() { 
     super(getActivity().getApplicationContext(), map, mClusterManager); 

     // Create selected custom Marker 
     RelativeLayout selectedContainer = (RelativeLayout) view.findViewById(R.id.marker_map_selected_container); 
     mSelectedItemView = ((LayoutInflater) getActivity().getSystemService 
       (Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.map_marker_selected_layout, selectedContainer, false); 
     mSelectedIconGenerator.setContentView(mSelectedItemView); 
     mSelectedIconGenerator.setBackground(null); 

     // Create custom Marker 
     LinearLayout container = (LinearLayout) view.findViewById(R.id.text_marker_map_container); 
     mItemView = ((LayoutInflater) getActivity().getSystemService 
       (Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.map_marker_layout, container, true); 

     mIconGenerator.setContentView(mItemView); 
     mIconGenerator.setBackground(null); 
    } 

    @Override 
    protected void onBeforeClusterItemRendered(VendorMapItem vendor, MarkerOptions markerOptions) { 
     // Draw a single vendor. 
     Bitmap icon; 
     if (null == selectedItem || !vendor.getPosition().equals(selectedItem.getPosition())) 
     { 
      icon = mIconGenerator.makeIcon(); 
     } else { 
      icon = mSelectedIconGenerator.makeIcon(); 
     } 
     markerOptions.title(vendor.getTitle()); 
     markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)); 
    } 

    @Override 
    protected void onBeforeClusterRendered(Cluster<VendorMapItem> cluster, MarkerOptions markerOptions) { 
     // Draw multiple vendors clustered... 
     Bitmap icon = mIconGenerator.makeIcon(); 
     markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)); 
    } 

    @Override 
    protected boolean shouldRenderAsCluster(Cluster cluster) { 
     // Always render clusters. 
     return cluster.getSize() > 1; 
    } 
} 

一般而言群集项目被示出,并且也declustered的,是否SEL是否受到影响。我有另一个视图显示列表中的所有位置数据,而我的远程位置在那里显示的只是鳍。

任何想法我做错了什么?

回答

1

愚蠢。

基本上我多次调用map.clear()。我猜如果地图上绘制的所有内容都是由聚合器控制的引脚,则不需要清除。一旦清除()通话被删除,我的引脚再次出现。

0

公共类ClusterIconProvider实现IconDataProvider {

private static final int[] res = {R.drawable.m1,R.drawable.m2,R.drawable.m3,R.drawable.m4,R.drawable.m5}; 
private static final int[] forCounts = { 10, 100, 1000, 10000, Integer.MAX_VALUE }; 
private Bitmap[] baseBitmaps; 
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
private Rect bounds = new Rect(); 
private MarkerOptions markerOptions = new MarkerOptions().anchor(0.5f, 0.5f); 


public ClusterIconProvider(Resources resources){ 
    baseBitmaps = new Bitmap[res.length]; 
    for (int i = 0; i < res.length; i++) { 
     baseBitmaps[i] = BitmapFactory.decodeResource(resources, res[i]); 
    } 
    paint.setColor(Color.WHITE); 
    paint.setTextAlign(Align.CENTER); 
    paint.setTextSize(resources.getDimension(R.dimen.Cluster)); 
} 
@Override 
public MarkerOptions getIconData(int markersCount) { 
    // TODO Auto-generated method stub 
    Bitmap base; 
    int i = 0; 
    do { 
     base = baseBitmaps[i]; 
    } while (markersCount >= forCounts[i++]); 
    Bitmap bitmap = base.copy(Config.ARGB_8888, true);  
    String text = String.valueOf(markersCount); 
    paint.getTextBounds(text, 0, text.length(), bounds); 
    float x = bitmap.getWidth()/2.0f; 
    float y = (bitmap.getHeight() - bounds.height())/2.0f - bounds.top; 
    Canvas canvas = new Canvas(bitmap); 
    canvas.drawText(text, x, y, paint); 
    BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(bitmap); 
    return markerOptions.icon(icon); 
} 

}

+0

您可以用于在地图上添加集群 –

+0

感谢@Pratik,但是我已经使用了源中的集群机制。当它们从不聚集在一起时,它不会绘制非聚集的单个项目,我无法弄清楚原因。 – Kibi