ArcGIS API for JS4.7加载FeatureLayer,点击弹出信息并高亮显示

      我加载的是ArcGIS Server本地发布的FeatureService,ArcGIS API for JS4.7记载FeatureLayer时,在二维需要通过代码启用WebGL渲染,在三维模式下,则不需要。不启用WebGL,则无法显示进行高亮显示。我在二维模式下,高亮接口是没有生效,因此,二维模式下,自己写了一个高亮,三维还是用的自带的高亮。

二维模式代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>要素服务</title>
    <link type="text/css" rel="stylesheet" href="http://localhost/arcgis/esri/css/main.css"/>
    <link type="text/css" rel="stylesheet" href="css/index.css"/>
    <script>
        //高亮显示只能在WebGL渲染时才能生效,该功能目前处于beta阶段
        var dojoConfig = {
            has: {
                "esri-featurelayer-webgl": 1
            }
        }
    </script>
    <script src="http://localhost/arcgis/"></script>
</head>
<body>
<div id="viewDiv"></div>

<script>
    require(["esri/Map", "esri/views/MapView", "esri/config", "esri/layers/FeatureLayer", "dojo/domReady"], function (Map, MapView, esriConfig, FeatureLayer) {
        esriConfig.request.corsEnabledServers.push("localhost:6443");//设置地图服务器已允许跨域
        esriConfig.request.corsEnabledServers.push("localhost:63342");
        var map = new Map({
            // basemap: "streets"//ESRI提供的底 图
            basemap: "dark-gray"
        });
        //二维视图,并初始化视图位置
        var view = new MapView({
            container: "viewDiv",
            map: map,
            extent: {
                xmin: 111.27418783887504,
                ymin: 27.65361115167269,
                xmax: 119.18589568326072,
                ymax: 30.663629324047992,
                spatialReference: 4326
            }
        });
        //乡镇级属性模版
        var popupTemplate = {
            title: "乡镇数据",
            content: [{
                type: "fields",
                fieldInfos: [{
                    fieldName: "name",
                    label: "行政单位名称",
                    format: {
                        places: 0,
                        digitSeparator: true
                    }
                }, {
                    fieldName: "code",
                    label: "行政单位代码",
                    format: {
                        places: 0,
                        digitSeparator: true
                    }
                }, {
                    fieldName: "supercode",
                    label: "上级行政单位代码",
                    format: {
                        places: 0,
                        digitSeparator: true
                    }
                }, {
                    fieldName: "level",
                    label: "行政单位等级",
                    format: {
                        places: 0,
                        digitSeparator: true
                    }
                }]
            }]
        };
        var town = new FeatureLayer({
            url: "https://localhost:6443/arcgis/rest/services/jiangxi/FeatureServer/0",
            outFields: ["*"],
            popupTemplate: popupTemplate
        });//乡镇级数据
        popupTemplate.title = "县级数据";
        var county = new FeatureLayer({
            url: "https://localhost:6443/arcgis/rest/services/jiangxi/FeatureServer/1",
            outFields: ["*"],
            popupTemplate: popupTemplate
        });//县级数据
        popupTemplate.title = "市级数据";
        var city = new FeatureLayer({
            url: "https://localhost:6443/arcgis/rest/services/jiangxi/FeatureServer/2",
            outFields: ["*"],
            popupTemplate: popupTemplate
        });//市级数据
        popupTemplate.title = "省级数据";
        var province = new FeatureLayer({
            url: "https://localhost:6443/arcgis/rest/services/jiangxi/FeatureServer/3",
            outFields: ["*"],
            popupTemplate: popupTemplate
        });//省级数据
        map.add(town);
        map.add(county);
        map.add(city);
        map.add(province);
        //点击视窗进行碰撞检测,检测点击的目标graphic
        view.on("click", function (evt) {
            view.hitTest(evt).then(function (response) {
                var result = response.results[0];
                if (result && result.graphic) {
                    console.log(result);
                    var graphic = result.graphic;
                    //自定义高亮
                    //这里的几何图形是面状,配置graphic的symbol为fillSymbol
                    graphic.symbol = {
                        type: "simple-fill",
                        color: "red",
                        outline: {
                            color: [128, 128, 128, 0.5],
                            width: "0.5px"
                        }
                    };
                    view.graphics.removeAll();//清除上一次点击目标
                    view.graphics.add(graphic);//添加新的点击目标
                }
            })
        });
    })
</script>
</body>
</html>

二维模式效果图:

三维模式代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>要素服务</title>
    <link type="text/css" rel="stylesheet" href="http://localhost/arcgis/esri/css/main.css"/>
    <link type="text/css" rel="stylesheet" href="css/index.css"/>
    <script src="http://localhost/arcgis/init.js"></script>
</head>
<body>
<div id="viewDiv"></div>
<script>
    require(["esri/Map", "esri/views/SceneView", "esri/config", "esri/layers/FeatureLayer", "dojo/domReady"], function (Map, SceneView, esriConfig, FeatureLayer) {
        esriConfig.request.corsEnabledServers.push("localhost:6443");//设置地图服务器已允许跨域
        esriConfig.request.corsEnabledServers.push("localhost:63342");
        var map = new Map({
            basemap: "dark-gray"
        });
        //二维视图,并初始化视图位置
        var view = new SceneView({
            container: "viewDiv",
            map: map,
            extent: {
                xmin: 111.27418783887504,
                ymin: 27.65361115167269,
                xmax: 119.18589568326072,
                ymax: 30.663629324047992,
                spatialReference: 4326
            }
        });
        //乡镇级属性模版
        var popupTemplate = {
            title: "乡镇数据",
            content: [{
                type: "fields",
                fieldInfos: [{
                    fieldName: "name",
                    label: "行政单位名称",
                    format: {
                        places: 0,
                        digitSeparator: true
                    }
                }, {
                    fieldName: "code",
                    label: "行政单位代码",
                    format: {
                        places: 0,
                        digitSeparator: true
                    }
                }, {
                    fieldName: "supercode",
                    label: "上级行政单位代码",
                    format: {
                        places: 0,
                        digitSeparator: true
                    }
                }, {
                    fieldName: "level",
                    label: "行政单位等级",
                    format: {
                        places: 0,
                        digitSeparator: true
                    }
                }]
            }]
        };
        var town = new FeatureLayer({
            url: "https://localhost:6443/arcgis/rest/services/jiangxi/FeatureServer/0",
            outFields: ["*"],
            popupTemplate: popupTemplate
        });//乡镇级数据
        popupTemplate.title = "县级数据";
        var county = new FeatureLayer({
            url: "https://localhost:6443/arcgis/rest/services/jiangxi/FeatureServer/1",
            outFields: ["*"],
            popupTemplate: popupTemplate
        });//县级数据
        popupTemplate.title = "市级数据";
        var city = new FeatureLayer({
            url: "https://localhost:6443/arcgis/rest/services/jiangxi/FeatureServer/2",
            outFields: ["*"],
            popupTemplate: popupTemplate
        });//市级数据
        popupTemplate.title = "省级数据";
        var province = new FeatureLayer({
            url: "https://localhost:6443/arcgis/rest/services/jiangxi/FeatureServer/3",
            outFields: ["*"],
            popupTemplate: popupTemplate
        });//省级数据
        map.add(town);
        map.add(county);
        map.add(city);
        map.add(province);
    })
</script>
</body>
</html>

三维模式效果图:

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS开发者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值