arcgis api(六)arcgis api for js 3.x Dynamic 动态图层各图层的过滤以及点击拾取功能

tech2022-08-09  151

    (1)ArcGISDynamicMapServiceLayer动态图层因涉及到多个子图层,其图层加载的过滤条件需要对每个子图层定义过滤条件。

esriLoader .loadModules([ 'esri/layers/ArcGISDynamicMapServiceLayer', 'esri/tasks/IdentifyTask', 'esri/tasks/IdentifyParameters', 'esri/geometry/webMercatorUtils' ]) .then(([ ArcGISDynamicMapServiceLayer, IdentifyTask, IdentifyParameters, WebMercatorUtils ]) => { // 定义图层 const url = 'http://localhost:6080/arcgis/rest/services/zjBlog/jsBorder/MapServer' const dynamicLayer = new ArcGISDynamicMapServiceLayer(url, { id: 'dynamicLayer', opacity: 0.9 }) // 设置各图层表达式 let layerDefinition = [] layerDefinition[1] = `Name = '南京市' or Name='扬州市' or Name='连云港市'` layerDefinition[2] = `Name = '沛县' or Name='昆山市' or Name='太仓市'` dynamicLayer.setLayerDefinitions(layerDefinition) mapView.addLayer(dynamicLayer) // 图层添加点击事件 executeDynamicIdentify(url, IdentifyTask, IdentifyParameters, WebMercatorUtils) })

    (2)arcgis api 的FeatureLayer的探针点击拾取功能比较简单,直接根据字段属性定义infoTemplate的content内容即可,但是ArcGISDynamicMapServiceLayer的点击拾取事件就需要借助于map的click的点位几何图形去执行IdentifyTask的查询。上述代码调用了图层添加点位事件的方法,具体操作如下:

/** * dynamic图层点击事件 * @param {*} url * @param {*} IdentifyTask * @param {*} IdentifyParameters * @param {*} WebMercatorUtils */ const executeDynamicIdentify = (url, IdentifyTask, IdentifyParameters, WebMercatorUtils) => { let identifyTask = new IdentifyTask(url) let params = new IdentifyParameters() // 地图点击事件 mapView.on('click', (evt) => { let mapPoint = evt.mapPoint let mapExtent = mapView.extent // 判断点击是否为墨卡托投影 if (mapPoint.spatialReference.isWebMercator()) { mapPoint = WebMercatorUtils.webMercatorToGeographic(mapPoint) mapExtent = WebMercatorUtils.webMercatorToGeographic(mapExtent) } // 设置查询条件(同加载的匹配条件) let layerDefinition = [] layerDefinition[0] = '1 = 1' layerDefinition[1] = `Name = '南京市' or Name='扬州市' or Name='连云港市'` layerDefinition[2] = `Name = '沛县' or Name='昆山市' or Name='太仓市'` params.geometry = mapPoint params.mapExtent = mapExtent params.tolerance = 5 // 缓冲区范围 params.layerOption = IdentifyParameters.LAYER_OPTION_VISIBLE params.layerDefinitions = layerDefinition identifyTask.execute(params).then(result => { console.warn(result) }) }) }

 

最新回复(0)