ArcGIS JS API: сделать круг без увеличения

У меня есть карта ArcGIS JavaScript API. На карте щелкните Я хочу отобразить круг и выделить все точки внутри этого круга.

Однако, когда я создаю круг и увеличиваю карту, круг также увеличивается. Как сделать так, чтобы радиус круга оставался неизменным независимо от уровня масштабирования карты?

    <script>
        require([
            "esri/Map",
            "esri/layers/GeoJSONLayer",
            "esri/views/MapView",
            "esri/widgets/Zoom",
            "esri/core/watchUtils",
            "esri/geometry/geometryEngine"
        ], function (Map, GeoJSONLayer, MapView, Zoom, watchUtils, {buffer}) {
            const url =
                    "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson";

            const template = {
                title: "Earthquake Info",
                content: "Magnitude {mag} {type} hit {place} on {time}",
                fieldInfos: [
                    {
                        fieldName: "time",
                        format: {
                            dateFormat: "short-date-short-time"
                        }
                    }
                ]
            };

            const renderer = {
                type: "simple",
                field: "mag",
                symbol: {
                    type: "simple-marker",
                    color: "orange",
                    outline: {
                        color: "white"
                    }
                },
                visualVariables: [
                    {
                        type: "size",
                        field: "mag",
                        stops: [
                            {
                                value: 2.5,
                                size: "4px"
                            },
                            {
                                value: 8,
                                size: "40px"
                            }
                        ]
                    }
                ]
            };

            const geojsonLayer = new GeoJSONLayer({
                url: url,
                copyright: "USGS Earthquakes",
                popupTemplate: template,
                renderer: renderer //optional
            });

            const map = new Map({
                basemap: "gray",
                layers: [geojsonLayer]
            });

            const view = new MapView({
                container: "viewDiv",
                center: [-168, 46],
                zoom: 3,
                map: map
            });

            let csvLayerView;
            let highlight;
            let resultFeatures;

            view.whenLayerView(geojsonLayer).then(layerView => {
                csvLayerView = layerView;
            });

            view.on("click", ({mapPoint}) => {
                const geom = buffer(mapPoint, 500, "miles");

                view.graphics.removeAll();
                view.graphics.add({
                    geometry: geom,
                    symbol: {
                        type: "simple-fill",
                        color: [51, 51, 204, 0.2],
                        style: "solid",
                        outline: {
                            color: "white",
                            width: 1
                        }
                    }
                });

                const query = geojsonLayer.createQuery();
                query.geometry = geom;
                csvLayerView.queryObjectIds(query).then(oids => {
                    if (highlight) {
                        highlight.remove();
                    }
                    highlight = csvLayerView.highlight(oids);
                    return csvLayerView.queryFeatures(query);
                }).then(({features}) => {
                    resultFeatures = features;
                });
            });

        });
    </script>

person user3212292    schedule 31.05.2020    source источник


Ответы (1)


Круг, который вы создаете, используя буфер в 500 миль от точки щелчка, представляет собой многоугольник. Таким образом, естественно, будет один и тот же, независимо от того, какой у вас уровень масштабирования. Другими словами, представьте географическую область, чтобы она не могла измениться в зависимости от уровня масштабирования.

Напротив, в том же примере у вас есть точки, которые представляют землетрясения, которые представлены оранжевым кружком. Поскольку это символ, обозначающий географическое место, он сохраняет размер в пикселях для всех уровней масштабирования.

Подводя итог, вы не можете заставить буферную область 500 миль, представленную многоугольником, изменяться с уровнями масштабирования, потому что это область.

person cabesuon    schedule 31.05.2020