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

本文介绍了arcgis js 4.10中三种图属查询方法:Identify、Find和Query。通过对比分析,详细阐述了它们在图形查询中的应用,帮助开发者理解并掌握这些查询工具。
部署运行你感兴趣的模型镜像

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

1. 对比

方法范围查询模式输入参数
identifymap service(多图层)查询模糊查询图形(字符串)
findmap 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);
        });
    }

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值