SuperMap iClient3D for WebGL教程 (查询) -SQL查询
WuYK
本次教程将带来Webgl的SQL查询,官网的范例是通过引用<scriptsrc="./js/supermap/SuperMap.Include.js">js文件里的接口实现的。以下是实现步骤。
1.首先,定义查询条件
var getFeatureParam;
getFeatureParam = new SuperMap.REST.FilterParameter({
attributeFilter: "SMID<10" //设置查询条件
});
2.其次,定义SQL查询体
var getFeatureBySQLService;
getFeatureBySQLParams = new SuperMap.REST.GetFeaturesBySQLParameters({
queryParameter: getFeatureParam,//第一步中的查询参数
toIndex : -1,
datasetNames: ["二维数据:" + "Building"]//设置查询数据集
});
3.最后,响应查询函数
var getFeatureBySQLParams;
var url = 'http://www.supermapol.com/realspace/services/data-cbd/rest/data';//数据服务
getFeatureBySQLService = new SuperMap.REST.GetFeaturesBySQLService(url, {
eventListeners: {
"processCompleted": onQueryComplete, //成功后执行的函数
"processFailed": processFailed//失败执行函数
}
});
getFeatureBySQLService.processAsync(getFeatureBySQLParams);
function onQueryComplete(queryEventArgs){
var selectedFeatures = queryEventArgs.originResult.features;
viewer.entities.removeAll();
for(var i = 0;i < selectedFeatures.length;i++ ){
var value = selectedFeatures[i].fieldValues["0"];
var feature = selectedFeatures[i];
for(var j = 0; j < feature.fieldNames.length ; j++){
var index = j.toString();
if(j == 0){
var des = '<table class="cesium-infoBox-defaultTable"><tbody>' + '<tr><th>' + selectedFeatures[i].fieldNames["0"] + '</th><td>' + selectedFeatures[i].fieldValues["0"] + '</td></tr>';
}
else if( j == feature.fieldNames.length - 1){
des += '<tr><th>' + selectedFeatures[i].fieldNames[index] + '</th><td>' + selectedFeatures[i].fieldValues[index] + '</td></tr>' + "</tbody></table>";
}
else{
des += '<tr><th>' + selectedFeatures[i].fieldNames[index] + '</th><td>' + selectedFeatures[i].fieldValues[index] + '</td></tr>';
}
}
viewer.entities.add({
position : Cesium.Cartesian3.fromDegrees(parseFloat(selectedFeatures[i].fieldValues["12"]),parseFloat(selectedFeatures[i].fieldValues["13"]),parseFloat(selectedFeatures[i].fieldValues["16"])),
billboard :{
image : './images/location4.png',
width:30,
height:40,
},
name : selectedFeatures[i].fieldValues["11"],
description: des
});
IDs.push(parseInt(value)+11);
}
var buildingLayer = scene.layers.find("Building@CBD");
if(IDs.length>0){
buildingLayer.setSelection(IDs);
}
}
function processFailed(queryEventArgs){
alert('查询失败!');
}
上面的是官网提供的SQL查询,当然我们也可以直接向iserver发送请求实现,以下便是代码,相对于官网的接口代码来说是比较简洁的。
let url ='http://localhost:8090/iserver/services/data-test/rest/data/featureResults.rjson?returnContent=true';
let param = {
"getFeatureMode":"SQL",
"datasetNames":["test:Building"],
"hasGeometry":false,//设置为true时,结果含有Geometry信息
"queryParameter":{
"attributeFilter":"SMID<10"
}//构造请求体
let queryObjJSON = JSON.stringify(param);
$.ajax({
type: "post",
url: url,
data: queryObjJSON,
success: function(result)
{
let resultObj = JSON.parse(result);
console.log(resultObj);
},
error: function(msg)
{
console.log(msg);
}
})
以上是通过直接请求方式进行的查询,效果是一样的,通过获取resultObj就可以获取到查询结果啦