【问题标题】:Clustering points in Esri-MapsEsri-Maps 中的聚类点
【发布时间】:2020-03-03 00:57:47
【问题描述】:

我正在使用EsriArcGIS 映射Android SDK link to 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 Link to JS clustering 中找到了有关如何执行此操作的文档,但这对我没有帮助,因为似乎没有对 Android Clustering 的官方支持。

有没有办法解决这个问题?

【问题讨论】:

    标签: java android point esri esri-maps


    【解决方案1】:

    即使在 100.x 版本之后,SDK 也没有相同的功能。移动 SDK 中没有现成的集群层。

    但是,有一些自定义实现可以满足您的需求。 这似乎与您的用例相匹配: https://github.com/AshinJiang/ArcGIS-Android-Cluster

    【讨论】:

    • 一直在尝试实现这一点,但由于似乎真的什么都没有,我会尝试弄清楚,谢谢
    猜你喜欢
    • 2012-10-09
    • 2013-06-21
    • 2016-01-13
    • 2012-01-08
    • 2021-05-04
    • 2011-09-21
    • 1970-01-01
    • 2018-05-03
    • 2020-09-02
    相关资源
    最近更新 更多