Ich verwende Google Maps Android Marker Clustering Utility von und ich füge eine Menge von Elementen (etwa 700) aus einer Liste hinzu, die ich von meinem Server erhalte. Ich habe meine anfänglichen Fehler ausgebügelt, und ich kann die Cluster sehen, dann hineinzoomen und sehen, wie sie zu einzelnen Markern declustern. Es gibt jedoch ein paar Elemente, die von allen anderen entfernt sind, so dass sie selbst bei maximaler Verkleinerung niemals gruppiert werden würden. Aus irgendeinem Grund werden diese Objekte nicht auf meiner Karte angezeigt - nicht beim Einzoomen, nicht beim Zoomen.Android Maps ClusteredMarkers - nicht nicht gruppiert anzeigen?
Ich habe die Koordinaten überprüft, sie sind echt, und bevor ich anfing Clustering zu verwenden, konnte ich diese Elemente kein Problem sehen, also nehme ich an, dass ich in meinem Clustering-Code etwas falsch gemacht habe. Hier
ist ein Code:
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;
}
}
Dies zeigt die Elemente hinzugefügt zu werden - die Protokolle ich hinzugefügt haben, mir helfen sehen, dass meine 2 Remote-Elemente werden mit guten Koordinaten hinzugefügt, und sehen ähnlich aus (wenn auch weit entfernt von) meine ausgewählten gruppierten Artikel
hier (was gesehen wird) ist der Renderer Code:
/* 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;
}
}
Im allgemeinen gruppierten Elemente werden gezeigt, und auch declustered diejenigen, ob sel oder nicht. Ich habe eine andere Ansicht, die alle Standortdaten in einer Liste zeigt, und meine entfernten Standorte zeigen gerade Flossen dort.
Irgendwelche Ideen, was ich falsch mache?
Sie können für das Hinzufügen von Cluster auf Karte –
Dank @Pratik verwenden, aber es gibt bereits einen Mechanismus für Cluster in der Quelle, die ich verwende. Es werden nur die NICHT-gruppierten Einzelelemente nicht gezeichnet, wenn sie nie gruppiert werden und ich kann nicht herausfinden warum. – Kibi