ArcGIS for JS 、Supermap for WebGL+ iServer和OpenLayer+Geoserver的查询方式;
一、ArcGIS for JS
ArcGIS for JS 查询API官方介绍得已经十分清楚,并且有很多相关的Sample Code,所以在此只介绍介绍一下多个FeatureLayer图层的属性和空间查询。
主要使用FeatureLayer.queryFeatures(query, options),Query类,以及dojo/promise/all
Query类定义了查询细节,包括空间查询条件和属性查询条件。
执行FeatureLayer.queryFeatures(query, options)会返回一个异步对象promise,将多个promise放入数组,使用promise/all等待每个图层的查询执行完毕后返回查询结果。
代码:
import Query = require('esri/tasks/support/Query');
import All = require('dojo/promise/all');
const layers = this.sceneView.map.allLayers;
const query = new Query();
query.geometry = geometry;//空间查询条件
//query.where = "STATE_NAME = 'Washington'";//属性查询条件
query.returnGeometry = true;
query.spatialRelationship = 'intersects';
query.outFields = ["*"];//返回字段
let tableresulte = [];
let allpromise = [];//查询异步对象数组
layers.forEach((layer: __esri.FeatureLayer) => {
const promise = layer.queryFeatures(query);//图层查询异步对象
allpromise.push(promise);
})
All(allpromise).then((result) => {
result.forEach(item => {
if (item.features.length > 0) {
tableresulte.push({ "layer": item.features[0].layer, "features": item.features });
}
})
})
二、超图supermap for webgl+iServer
超图 supermap for webgl ,基于Cesium开源框架。进行多图层的属性和空间查询。iServer版本为10i。
超图的关于三维数据服务的查询就不介绍了。官方例子很清楚了。