Я использую ArcGIS
карты Esri
для Android SDK
ссылки на ArcGIS для отображения некоторых точек на карте. До сих пор я удалял точки с такими же координатами через removeDupes
и просто рисовал координаты, которые не дублируются. Затем между точками проходят линии, которые их соединяют.
OnClick Я вижу информацию о 1 балле.
Теперь вместо удаления дубликатов мне нужно отобразить те же точки в кластере. По существу, больший круг, который будет отображать, сколько точек находится в одних и тех же координатах, а затем при щелчке по кластеру будут отображаться все точки, которые на самом деле находятся там.
Вот код о том, как добавить точки на карту:
private void plotRoute(List<DeliveryPoint> deliveryPoints) {
Logger.d("Plotting " + deliveryPoints.size() + " coordinates.");
pointsOfInterest = removeDupes(deliveryPoints);
SpatialReference SPATIAL_REFERENCE = SpatialReferences.getWgs84();
// create a red (0xFFFF0000) circle simple marker symbol
SimpleMarkerSymbol redCircleSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, 0xFFFF0000, 10);
SimpleMarkerSymbol bigOrange = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, 0xFFFF8000, 20);
SimpleMarkerSymbol bigBlue = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, 0xFF0000FF, 20);
ArrayList<Graphic> poiMarkers = new ArrayList<>();
ArrayList<Graphic> labels = new ArrayList<>();
// create a new point collection for polyline
PointCollection points = new PointCollection(SPATIAL_REFERENCE);
graphicDeliveryPointCoordinatesHashMap.clear();
int ordinal = 0;
int length = pointsOfInterest.size();
for (DeliveryPoint poi: deliveryPoints) {
Point point = new Point(poi.longitude, poi.latitude, SPATIAL_REFERENCE);
points.add(point);
TextSymbol label = new TextSymbol(12, "" + ++ordinal, 0xFFFF0000, TextSymbol.HorizontalAlignment.CENTER, TextSymbol.VerticalAlignment.MIDDLE);
Graphic labelGraphic= new Graphic(point, label);
label.setOffsetY(10);
label.setOffsetX(10);
Graphic graphic = new Graphic(point, redCircleSymbol);
if(ordinal == 1) {
graphic = new Graphic(point, bigOrange);
} else if (ordinal == length) {
graphic = new Graphic(point, bigBlue);
}
poiMarkers.add(graphic);
labels.add(labelGraphic);
graphicDeliveryPointCoordinatesHashMap.put(graphic, poi);
}
textOverlay.getGraphics().addAll(labels);
poiOverlay.getGraphics().addAll(poiMarkers);
// create a polyline from the point collection
Polyline polyline = new Polyline(points);
//define a line symbol
SimpleLineSymbol lineSymbol =
new SimpleLineSymbol(
SimpleLineSymbol.Style.SOLID,
Color.argb(255, 255, 128, 0), 1.0f);
// create the graphic with polyline and symbol
Graphic lines = new Graphic(polyline, lineSymbol);
// add graphic to the graphics overlay
poiOverlay.getGraphics().add(lines);
mapView.setOnTouchListener(new PoiTouchListener(this, mapView, poiOverlay));
}
Я нашел документацию о том, как это сделать в JavaScript
Ссылка на кластеризацию JS но это не помогло мне, поскольку, кажется, нет официальной поддержки Android
Кластеризация.
Есть ли способ обойти эту проблему?