Точки кластеризации в Esri-Maps - PullRequest
1 голос
/ 06 ноября 2019

Я использую 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 Кластеризация.

Есть ли способ обойти эту проблему?

1 Ответ

0 голосов
/ 06 ноября 2019

Даже после выпусков 100.x SDK не обладают такими же возможностями. В мобильных SDK нет встроенного Cluster Layer.

Однако есть несколько пользовательских реализаций, которые делают то, что вы ищете. Это похоже на ваш вариант использования: https://github.com/AshinJiang/ArcGIS-Android-Cluster

...