Android Maps ClusteredMarkers - 不显示unclustered?

Kib*_*ibi 8 android google-maps-markers markerclusterer google-maps-android-api-2

我从这里使用Google Maps Android Marker Clustering Utility,我从我从服务器收到的列表中添加了一堆项目(大约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 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这显示了添加的项目 - 我添加的日志帮助我看到我的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

通常,无论是否选中,都会显示聚类项目,也会显示聚类.我有另一个视图显示列表中的所有位置数据,我的远程位置只显示fins.

我有什么想法我做错了吗?

Kib*_*ibi 2

愚蠢。

基本上我调用map.clear()的次数太多了。我想如果地图上绘制的所有内容都是由集群器控制的引脚,则无需调用clear。一旦清除()调用被删除,我的引脚就会再次出现。