ArcGIS JS API:使圆不缩放

问题描述 投票:0回答:1

我有一个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>
arcgis arcgis-js-api
1个回答
0
投票

您使用点击点的500英里缓冲区创建的圆是一个多边形。因此,无论您拥有什么缩放级别,自然都将是同一个人。换句话说,代表一个地理区域,使其不能根据缩放级别进行更改。

相反,在同一示例中,您具有表示地震的点,并用橙色圆圈表示。因为它是代表地理位置的符号,所以对于所有缩放级别,它都会保持像素大小。

继续,您不能使以多边形表示的500英里缓冲区域随缩放级别而改变,因为它是一个区域。

© www.soinside.com 2019 - 2024. All rights reserved.