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);
});
}