arcgis js 4.10 查询(identify、find、query)

arcgis js 4.10 图属查询方法有三种:query、find、identify

1. 对比

方法 范围 查询模式 输入参数
identify map service(多图层)查询 模糊查询 图形(字符串)
find map service(单层单字段、单层多字段、多层多字段)查询 模糊查询 属性(字符串)
query 单个图层查询 精确查询 图形(几何)、属性(字符串)

2. 使用

2.1. Identify

图形查询

<div id="viewDiv">
       <!--画矩形-->
       <div id="rectangle-button" class="esri-widget esri-widget-button esri-interactive" title="框选">
           <span class="esri-icon-checkbox-unchecked"></span>
       </div>
</div>
view.when(function () {
        Layers.refresh();

        let draw = new Draw({
            view: view
        });

        $('#rectangle-button').on('click', function () {
            enableCreateRectangle(draw, view);
        });
    });

    function enableCreateRectangle(draw, view) {
        let action = draw.create('rectangle', {
            mode: 'click'
        });
        //获取焦点
        view.focus();

        //顶点移除
        action.on('vertex-remove', createRectangle);
        //鼠标移动
        action.on('cursor-update', createRectangle);
        //绘制完成
        action.on('draw-complete', createRectangle);
    }

    function createRectangle(event) {
        //获取所有顶点
        let vertices = event.vertices;

        //两点画矩形
        if (vertices.length < 2) {
            return
        }
        let rings = [vertices[0], [vertices[0][0], vertices[1][1]], vertices[1], [vertices[1][0], vertices[0][1]]];
        //清除之前绘制
        view.graphics.removeAll();

        // 生成绘制的图形
        let graphic = new Graphic({
            geometry: new Polygon({
                hasZ: false,
                hasM: false,
                rings: [rings],
                spatialReference: view.spatialReference
            }),
            symbol: {
                type: "simple-fill",  // autocasts as new SimpleFillSymbol()
                color: [51, 51, 204, 0.9],
                style: "solid",
                outline: {  // autocasts as new SimpleLineSymbol()
                    color: "white",
                    width: 1
                }
            }
        });
        // 将绘制的图形添加到view
        view.graphics.add(graphic);

        if (event.type === 'draw-complete') {
            identifyTask(graphic.geometry)
        }
    }
//空间查询(identify)
    function identifyTask(geometry) {
        //定义空间查询对象,注意他的参数是整个地图服务,而不是单个图层
        let identifyTask = new IdentifyTask(BOUALayers.url);
        //定义空间查询参数对象
        let params = new IdentifyParameters();
        //容差
        params.tolerance = 5;
        //是否返回几何信息
        params.returnGeometry = true;
        //空间查询的图层
        params.layerIds = [0,1,2];
        //空间查询的条件
        params.layerOption = IdentifyParameters.LAYER_OPTION_ALL;
        params.width = BOUALayers.fullExtent.width;
        params.height = BOUALayers.fullExtent.height;
        //空间查询的几何对象
        params.geometry = geometry;
        params.mapExtent = Layers.fullExtent;//map.extent;
        //执行空间查询
        identifyTask.execute(params).then(showQueryResult);
    }
 //空间查询展示
    function showQueryResult(response) {
        view.graphics.removeAll();

        //创建面符号
        let fill = simpleSymbolConstructor('fill');

        if (response.results.length > 0) {
            let graphics = [];
            for (let i = 0; i < response.results.length; i++) {
                let result = response.results[i];
                //获得图形graphic
                let graphic = result.feature;
                //设置图形的符号
                graphic.symbol = fill;
                // let namevalue = graphic.attributes.NAME;
                // console.log(namevalue);

                graphics.push(graphic);
                // newgLayer.add(graphic)
            }

            view.graphics.addMany(graphics)
        }
    }

2.2 Find

//属性查询(find)
    function findTask(LayerIds,searchFields,searchText,sr) {
        //定义属性查询对象,注意他的参数是整个地图服务,而不是单个图层
        let findTask=new FindTask(mapServiceUrl.BOUA);
        //定义属性查询参数对象
        let findParms=new FindParameters();
        //是否返回几何信息
        findParms.returnGeometry=true;
        //属性查询的图层
        findParms.layerIds=LayerIds;
        //属性查询的字段
        findParms.searchFields=searchFields;
        //属性查询的关键字
        findParms.searchText=searchText;
        //执行属性查询
        if(sr==='showResults'){
            findTask.execute(findParms).then(showQueryResult);
        }else if(sr==='removeResults'){
            findTask.execute(findParms).then(removeQueryResult);
        }
    }

2.3 Query

 //属性查询(Query)
    function AttriQuery(layerUrl, where, sr) {
        let queryTask = new QueryTask({
            url: layerUrl
        });

        let query = new Query();
        query.returnGeometry = true;
        query.outFields = ["*"];
        query.where = where;

        queryTask.execute(query).then(function (results) {

            //创建面符号
            let fill = simpleSymbolConstructor('fill');

            if (results.features.length > 0) {
                let graphics=[];
                $.each(results.features, function (i, feature) {
                    //获得图形graphic
                    let graphic = feature;
                    //设置图形的符号
                    graphic.symbol = fill;

                    graphics.push(graphic);
                });

                view.graphics.addMany(graphics)
            }
        });
    }
//空间查询(Query)
    function SpatialQuery(layerUrl, queryGeom, spatialRelationship) {
        let queryTask = new QueryTask({
            url: layerUrl
        });

        let query = new Query();
        query.geometry = queryGeom;
        query.spatialRelationship = spatialRelationship;//default "intersects"
        query.returnGeometry = true;
        query.outFields = ["*"];

        queryTask.execute(query).then(function (response) {
            console.log(response.features);
        });
    }

猜你喜欢

转载自blog.csdn.net/jacobzhuo/article/details/88974513
今日推荐