1.通过iserver数据服务查询接口进行查询
// featureResult 查询. 目前使用 id,spatial,sql 三种featureQuery(parm, info, type) {
let infoStr = info.dataSource + ":" + info.dataName;
let params = {};
if (type == "Point") {
params = {
getFeatureMode: "ID",
datasetNames: [infoStr],
ids: parm
};
} else if (type == "SPATIAL") {
let geometry = {
points: parm,
type: "REGION",
parts: [1],
id: 0
};
params = {
getFeatureMode: "SPATIAL",
datasetNames: [infoStr],
toIndex: -1,
geometry: geometry,
spatialQueryMode: "INTERSECT"
};
} else if (type == "SQL") {
var sql = "";
for (var i = 1; i < parm.length; i++) {
sql = sql + " or " + "SMID=" + parm[i];
}
let sqlCondition = "SMID=" + parm[0] + sql;
params = {
getFeatureMode: "SQL",
datasetNames: [infoStr],
maxFeatures: 100,
queryParameter: {
attributeFilter: sqlCondition
},
hasGeometry: false
};
}
let uri =
this.baseUrl +
"data-" +
info.dataTitle +
"/rest/data/featureResults.rjson" +
"?returnContent=true";
return fetchPost(uri, params);
}
- URI 中的参数
名称
含义
returnContent
true 表示直接返回查询结果,即元素类型为 Feature 的数组;false 表示返回创建的 featureResult 资源的 URI。默认不传时为 false。
fromIndex
查询结果的最小索引号。默认值是0,如果该值大于查询结果的最大索引号,则查询结果为空。
toIndex
查询结果的最大索引号。如果该值大于查询结果的最大索引号,则以查询结果的最大索引号为终止索引号。
- 请求体参数(params)
名称
含义
getFeatureMode
数据查询的模式(ID、SPATIAL、SQL等)
datasetNames
数据集名称,由数据源名和数据集名构成
ids
查询资源的 ID 数组。(ID查询模式必选)
geometry
几何对象(SPATIAL查询模型必选)
queryParameter
查询参数(SQL查询必选)
hasGeometry
是否返回几何对象。默认为true。当 getFeatureMode 不为 ID 时,且 URL 参数 returnContent=true 时,hasGeometry 有效。
出处: 超图WebGL属性查询 · Fellow Travellers
2.通过模型缓存属性查询
①设置图层保存属性S3MTilesLayer.indexedDBSetting .isAttributesSave =true
②使用对应的ID对图层进行查询
S3MTilesLayer - SuperMap3D Documentation 官网
getAttributesById 获取的是本地对象属性信息(indexedDB中的scvd,IE浏览器不支持)。
//1.遍历所有s3m图层-挂接构件属性信息
layers.forEach(function(layer){
layer.indexedDBSetting.isAttributesSave = true;
//layer.indexedDBSetting.isGeoTilesRootNodeSave = true;
layer.indexedDBSetting.isGeoTilesSave = true;
});
// 2.右键事件
let screenSpaceEventHandlerRight = new SuperMap3D.ScreenSpaceEventHandler(viewer.scene.canvas);
screenSpaceEventHandlerRight.setInputAction(function (e) {
let pickedObject = viewer.scene.pick(e.position);
console.log("RIGHT_CLICK:")
if (pickedObject && viewer.scene.layers.getSelectedLayer()) {
viewer.scene.layers.getSelectedLayer().getAttributesById(pickedObject.id).then(function (data) {
console.log("data:", data)
componentInfo.value=data;
})
}
}, SuperMap3D.ScreenSpaceEventType.RIGHT_CLICK);