SuperMap iClient3D for WebGL之查询模型属性

目录

一、通过数据服务查询

1、普通图层查询

1.1 通过WebGL属性查询接口查询

1.2、通过iserver数据服务查询接口进行查询(SuperMap iServer REST API

 2、多图层合并生成缓存

二、通过模型缓存属性查询


在GIS中,数据可分为空间数据和属性数据;空间数据描述地物所在位置,属性数据是描述空间数据特征的定性或定量指标;所以属性数据也是GIS中不可或缺的数据。在三维场景中,模型数据在展示模型本身的同时,也会有展示其属性数据或使用属性数据做分析的需求,本文将描述在不同的情况下,SuperMap iClient3D for WebGL(以下简称WebGL)如何查询模型属性。

一、通过数据服务查询

数据准备:

①使用模型缓存/工作空间发布三维服务

②使用模型数据集的属性表另存为属性表数据集,发布数据服务

1、普通图层查询

普通图层:非多图层合并生成缓存

1.1 通过WebGL属性查询接口查询

查询步骤:

①置S3M图层属性查询参数:S3MTilesLayer.setQueryParameter(options)(S3MTilesLayer - Cesium Documentation

  layer.setQueryParameter({
                    url:"http://www.supermapol.com/realspace/services/data-BIMbuilding/rest/data",
                    dataSourceName : "BIMBuilding",
                    isMerge : true
                });

②通过viewer.pickEvent设置点击属性查询事件(Viewer - Cesium Documentation

  viewer.pickEvent.addEventListener(function(feature){
             $("#bubble").show();
			 console.log(feature)
             for (i = table.rows.length-1;i > -1;i--){
                table.deleteRow(i);
            }
            for(var key in feature ){
                var newRow = table.insertRow();
                var cell1 = newRow.insertCell();
                var cell2 = newRow.insertCell();
                cell1.innerHTML = key;
                cell2.innerHTML = feature[key];
            } 
        });

1.2、通过iserver数据服务查询接口进行查询(SuperMap iServer REST API

查询步骤(以id查询为例):

①获取需要查询属性的对象ID

②使用步骤①获取到的id数组构建查询参数进行查询

  var queryObj = {
                "getFeatureMode": "ID",
                // "spatialQueryMode": "CONTAIN",
                "datasetNames": ["NewDatasource:NewDataset"],
                "ids":[id]
            };

  var queryData = JSON.stringify(queryObj); // 转化为JSON字符串作为查询参数

③向iserver发送查询请求

$.ajax({
                type: "post",
                url: dataUrl,
                data: queryData,
                success: function (result) {
                    var resultObj = JSON.parse(result);
                    // console.log(resultObj);
                    if (resultObj.featureCount > 0) {
                        processCompleted(resultObj.features);
                    }
                },
                error: function (msg) {
                    console.log(msg);
                },
                // complete: function () {
                //     console.log("complete");
                // }
            })

 2、多图层合并生成缓存

查询步骤:

①获取图层数据集名称以及对应的Id范围(S3MTilesLayer - Cesium Documentation

var layer = scene.layers.find('BeijingDEM');
var data =  layer.datasetInfo();
Cesium.when(data,function(dataSet){
		var length = dataSet.length;
		console.log(dataSet);
				     
			});

查询结果如图:

②通过步骤①查询结果, 通过id设置查询参数进行查询(同1.2方式)

var queryObj = {
                "getFeatureMode": "ID",
                // "spatialQueryMode": "CONTAIN",
                "datasetNames": ["NewDatasource:NewDataset"],
                "ids":[id]
            };

  var queryData = JSON.stringify(queryObj); // 转化为JSON字符串作为查询参数

$.ajax({
                type: "post",
                url: dataUrl,
                data: queryData,
                success: function (result) {
                    var resultObj = JSON.parse(result);
                    // console.log(resultObj);
                    if (resultObj.featureCount > 0) {
                        processCompleted(resultObj.features);
                    }
                },
                error: function (msg) {
                    console.log(msg);
                },
                // complete: function () {
                //     console.log("complete");
                // }
            })

二、通过模型缓存属性查询

生成缓存后,在idesktop中打开缓存,点击缓存对象,点击属性,可看到缓存中的属性信息

可见,在缓存数据中,已经保存了属性数据;所以在WebGL中,也可以使用相同的方式对数据的缓存属性进行查询;

查询步骤:

①设置图层保存属性S3MTilesLayer.indexedDBSetting .isAttributesSave =true

②使用对应的ID对图层进行查询

layer.getAttributesById(ids[i]).then(function(data) {
										console.log(data);
									});

 完整代码可参考:

var promise = scene.open("http://localhost:8090/iserver/services/3D-DaoDongShuJu/rest/realspace")
					Cesium.when.all(promise, function(layer) {
								layer = scene.layers.find('NewDataset@岛洞数据');
								// console.log(layer)
								layer.indexedDBSetting.isAttributesSave = true;
								// var a = layer.getAttributesById(17);
								// console.log(a);
							var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas); //设置鼠标左键单击回调事件
							handler.setInputAction(function(e) {
								console.log("handler")
									var ids = layer.getSelection();
									console.log(ids);
									for (var i = 0; i < ids.length; i++) {
									layer.getAttributesById(ids[i]).then(function(data) {
										console.log(data);
									});
								}
							}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
						},
						function(e) {
							if (widget._showRenderLoopErrors) {
								var title = '加载SCP失败,请检查网络连接状态或者url地址是否正确?';
								widget.showErrorPanel(title, undefined, e);
							}
						});

编者:wzr

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SuperMap iClient 3D for WebGL 是一款基于 WebGL 技术的三维地图开发工具,主要用于构建具有三维效果的地图应用程序。该工具提供了丰富的 API 接口和示例代码,可以帮助开发者快速上手,实现各种三维地图功能,如地形展示、建筑物模型、动态效果等。同时,SuperMap iClient 3D for WebGL 还支持多种数据格式,包括 SuperMap iServer 数据、OGC 标准数据、KML、GeoJSON 等,可以满足不同应用场景的需求。 ### 回答2: SuperMap iClient3D for WebGL是一个基于WebGL技术的三维地图开发框架。它提供了一系列的API和工具,使开发人员能够更加轻松地构建出高质量的三维地图应用。下面,我将从以下几个方面介绍SuperMap iClient3D for WebGL教程。 一、环境配置 SuperMap iClient3D for WebGL的开发需要先配置开发环境,包括安装Node.js、下载安装SuperMap iServer、下载安装SuperMap iClient3D资源包、创建Web应用程序。 二、基本概念 在学习SuperMap iClient3D for WebGL之前,需要了解一些基本概念。这些概念包括:场景(Scene)、层(Layer)、覆盖物(Overlay)等。在使用SuperMap iClient3D for WebGL时需要理解这些概念。 三、API使用 SuperMap iClient3D for WebGL提供了众多的API,使用这些API能够快速构建出一个三维地图应用。这些API包括:场景相关的API,如创建场景、设置场景属性等;层相关的API,如加载图层数据、隐藏、显示图层等;覆盖物相关的API,如创建点、线、面等覆盖物。 四、进阶应用 在掌握SuperMap iClient3D for WebGL的基础之后,可以通过进阶应用来进一步加深对这个框架的理解。进阶应用包括地球的三维测量、地球的动态效果、地球的热点区域等。 总之,SuperMap iClient3D for WebGL是一个非常实用的三维地图开发框架。通过学习其教程,开发人员可以更加方便、快速地构建出高质量的三维地图应用。 ### 回答3: SuperMap iClient 3D for WebGL是一款基于WebGL技术的开源GIS JavaScript库,用于构建高效、功能强大的3D GIS应用程序。这个库支持在Web浏览器里实现高质量的三维可视化效果,包括三维地形、建筑物、模型、标签等。现在,我来为你们讲解一下关于SuperMap iClient 3D for WebGL的教程。 一、前置知识 在接触SuperMap iClient 3D for WebGL之前,建议你先学习基本的WebGL知识和JavaScript语言,也应该具备计算机图形学基础和3D模型制作知识。 二、环境配置 在使用SuperMap iClient 3D for WebGL前,我们需要进行环境配置,在编写和运行项目时可以根据需要安装一系列依赖项,例如Node.js、npm包管理器、Gulp自动化工具、webpack工具和TypeScript编译器等。 三、基本使用 SuperMap iClient 3D for WebGL提供了丰富的API以实现3D可视化应用程序的开发,其中包括地图、图层、标注、工具、渲染等方面。同时,它还提供了多种数据格式的支持,如XYZ、OGC、JSON、KML、GML等。此外,SuperMap iClient 3D for WebGL还支持多种操作和交互方式,如平移、旋转、缩放、选取、编辑等,让用户可以更加自由地探索和编辑地图数据。 四、示例应用 SuperMap iClient 3D for WebGL提供了一系列的示例应用程序,可以帮助用户更好的理解其使用方法和特点,其中包括一些经典的三维场景展示和实时数据可视化等。例如,用户可以体验到城市三维建模、天气预报、热力图、空气质量监控等实用的功能。此外,SuperMap iClient 3D for WebGL也提供了一些模板和组件,供用户快速搭建自己的3D GIS应用程序。 总之,SuperMap iClient 3D for WebGL是一款非常优秀的基于WebGL技术的GIS JavaScript库,具有开源、高效、功能强大、易用等特点,可以为用户提供丰富多彩的三维GIS应用程序。当然,在使用前,建议用户先了解基本的WebGLJavaScript知识,同时还需配置好开发环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值