SuperMap iClient3D for WebGL之提取三维数据

SuperMap iDesktop 之提取三维数据中,已经描述了如何在SuperMap iDesktop 中提取三维数据,那么在项目进行过程中,会出现需要在前端去获取二维数据的情况。当然,在SuperMap iClient3D for WebGL(以下简称WebGL)中,也有相应的类似接口,分别是viewer.scene.globe.getHeight(Cartographic)sampleTerrain(terrainProvider, level, positions).

对于sampleTerrain(terrainProvider, level, positions),文档是这样描述的:

也就是说,我们需要使用地形高度的地形细节级别来作为参数;

但是对于viewer.scene.globe.getHeight(Cartographic),文档是这样描述的:

 由于前端是gpu的方式获取,所以这个方式只建议在近距离时使用。

那么还有没有其它获取方式呢?当然有!

SuperMap iServer中就有这样的接口,我们只需要在WebGL中对其进行调用请求即可。

首先通过官网示例服务让这个接口亮个相:http://www.supermapol.com/realspace/services/spatialAnalysis-dixingyingxiang/restjsr/spatialanalyst/geometry/3d/extractvector3d

下面请看具体操作。

一、数据准备

首先当然是需要准备数据啦!首先我们先来看下接口描述:

从文档描述中我们可知:和iDesktop一样,可以说hi用倾斜摄影图层或TIN图层进行三维数据的提取,本文以TIN地形数据为例展开。

准备TIN地形缓存,发布三维服务和空间分析服务,具体操作可参考:加载地形数据操作

二、在WebGL中加载

可参考官网示例demo:http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#terrainAndImagery

三、使用Ajax调用iserver空间分析服务

先上代码:

var queryObj = {
						"geometries": [{
							"type": "POINT3D",
							POINT3D
						}, ],
						"sceneName": "terrainAndImagery",
						"layerName": "DEM25",
						"interpolationDistance": 0.0
					};
					var queryData = JSON.stringify(queryObj); 
					var newResourceLocation;
					$.ajax({
						type: "post",
						url: dataUrl,
						data: queryData,
						success: function(result) {
							newResourceLocation = (result.newResourceLocation; + ".json").toString();
							console.log(newResourceLocation);
							$.ajax({
								type: "get",
								url: newResourceLocation,
								// data: data,
								success: function(result) {
									console.log(result);
								},
							});
						},
						error: function(msg) {
							console.log(msg);
						},
					})

代码分析:

首先来看iserver中给出的示例参数:

几何对象的格式是这样的:

[{"type":"POINT3D", "x":120.01,"y":40.01,"z":0},
 {"type":"LINE3D" , "parts":[2], "points":[{"x":120.21,"y":40.21,"z":0}{"x":121.21,"y":41.21,"z":0}]}]

这里我们可以看到,无论是点还是线,都是没有高度(高度为0)的,而我们查询之后,查询结果是这样的

 可以看到已经有了结果。

在代码中可以看到发了两次请求,这是由于第一次返回的是一个页面,如图:

 所以第一次请求结果中无法获取到需要的信息,只能看到分析成功与否,并且查看这个结果可知:对这个页面请求可以得到json格式的结果,那么就有了第二次的请求,得到了最终的结果。

作者:wzr

Guess you like

Origin blog.csdn.net/supermapsupport/article/details/120038374