ArcGIS api for JavaScript 3.27 FindTask查询功能

在ArcGIS API中查询功能是经常使用的,常用的三个查询分别是FindTask,QueryTask,IdentifyTask。它们各自都有自己的特点。

查询功能分为属性查询和空间查询

FindTask的官方API链接:

https://developers.arcgis.com/javascript/3/jsapi/findtask-amd.html

这个demo是查询某一个图层的一个属性,然后把结果撒点在地图上,鼠标移上去可以看到自定的infowindow

function doFind() {
    // alert("QQQ");
    require(
        [
            "esri/tasks/FindTask", "esri/tasks/FindParameters",
            "esri/SpatialReference",
            "esri/InfoTemplate",
            "esri/geometry/Point",
            "esri/graphic",
            "esri/layers/GraphicsLayer",
            "esri/geometry/webMercatorUtils",
            "esri/symbols/SimpleFillSymbol",
            "esri/symbols/SimpleLineSymbol",
            "esri/symbols/SimpleMarkerSymbol",
            "js/PointCluster",
            "dojo/dom"
        ],function (
            FindTask,
            FindParameters,
            SpatialReference,
            InfoTemplate,
            Point,
            Graphic,
            GraphicsLayer,
            webMercatorUtils,
            SimpleFillSymbol,
            SimpleLineSymbol,
            SimpleMarkerSymbol,
            PointCluster,
            dom,
        ) {
            //要查询的数据源
            var findTask = new FindTask("http://localhost:6080/arcgis/rest/services/GW_MAP_LF/MapServer");
            //创建属性查询参数
            var findParams = new FindParameters();
            // findParams.returnGeometry = true;
            //查询所有图层
            findParams.layerIds = [23];
            //查询指定的字段,如果不指定此参数,则查询所有的字段
            findParams.searchFields = ["name"];
            //是否返回几何对象
            // findParams.returnGeometry = true;
            //是否接受模糊查找,如果仅仅进行模糊查询,不需要where,设置这个参数就可以
            // findParams.contains = true;
            findParams.searchText = dom.byId("text").value;
            if(map.graphicsLayerIds)
            {
                //map.infoWindow.hide();
                clusterLayer.hide();
            }
            //执行查询
            findTask.execute(findParams,function(results){

                if(results){
                    console.log(results);

                    // var json = {title:"Attributes",content:"company: ${layerId}"};
                    var infoTemplate = new InfoTemplate();
                    //map.infoWindow.resize(width,height)
                    //map.infoWindow.resize(245,125);

                    /*地图显示样式*/
                    var graphicLayer = new GraphicsLayer();
                    var defaultsymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_SQUARE, 10,
                        new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
                            new dojo.Color([255,0,0]), 1),
                        new dojo.Color([0,255,0,0.25]));

                    for (var i = 0; i < results.length; i++) {
                        var pt = new Point(results[i].feature.attributes.x,results[i].feature.attributes.y,map.spatialReference);
                        infoTemplate.title="Attributes";
                        infoTemplate.content=results[i].feature.attributes.y;
                        var graphic = new Graphic(pt,defaultsymbol,null,infoTemplate);
                        graphicLayer.add(graphic);
                    }
                    map.addLayer(graphicLayer);

                    graphicLayer.on("mouse-over", function (evt) {
                        map.graphics.clear();  //使用地图图形层
                        var content = evt.graphic.getContent();
                        map.infoWindow.setContent(content);
                        var title = evt.graphic.getTitle();
                        map.infoWindow.setTitle(title);
                        var highlightGraphic = new Graphic(evt.graphic.geometry,defaultsymbol);
                        map.graphics.add(highlightGraphic);
                        map.infoWindow.show(evt.screenPoint,map.getInfoWindowAnchor(evt.screenPoint));
                    });
                    graphicLayer.on("mouse-out", function (evt) {
                        // map.graphics.clear();
                        // map.infoWindow.hide();
                    });
                }else{
                    alert("查不到");
                }
            });
        });
}
原文地址:https://www.cnblogs.com/yangzhengier/p/10827747.html