SuperMap iClient3D for WebGL教程 (查询) -SQL查询

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就可以获取到查询结果啦

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值