definitionExpression查询服务图层的条件:具有字段属性的图层。
使用definitionExpression查询优点:速度快,并且能保持图层的抽稀效果。如果通过其他方式查询数据回来客户端构建图层图形渲染,渲染速度会非常慢。
服务图层结构: 图层服务地址
无属性子图层:0,2,4,6,8,10,12,14,16,18,20,22。
其内容如下(看不到字段属性):
有属性图层:1,3,5,7,9,11,13,15,17,19,21,23。
其内容如下(可以看到有属性字段):
查询展示图层效果图(根据水库类型查询对应大小类型的水库展示出来):
主要实现代码:
关键代码如下:
触发条件时调用方法:this.queryReservoirLayerByRsrType(条件参数)就可以了。
let layerUrl.WRP_RSR_BSIN = http://172.18.80.186:6080/arcgis/rest/services/Awateridrain/reservoir/MapServer
let selectedTypes = ['大(1)型','大(2)型','中型']
queryReservoirLayerByRsrType(selectedTypes) {
let querySql = ''
selectedTypes.map(item => {
querySql += ` or skjb = '${item}'`
})
querySql = querySql.replace(' or ', '')
this.addReservoirLayer(querySql)
},
addReservoirLayer(params) {
let layers = []
for (let i = 23;i > -1;) {
if (i % 2 === 0) {
layers.push({
id: i
})
} else {
layers.push({
id: i,
definitionExpression: params
})
}
i = i - 1
}
this.reservoirLayer = new this.$esri.MapImageLayer({
id: 'reservoirLayer',
url: layerUrl.WRP_RSR_BSIN,
sublayers: layers
})
this.mapAndView.map.add(this.reservoirLayer)
},
可参照:https://developers.arcgis.com/javascript/latest/sample-code/sandbox/?sample=layers-mapimagelayer-definitionexpression