作者:桔子
可视域分析是一个很常用的三维空间分析功能,传统的可视域分析是通过GPU分析出结果,然后把结果绘制出来,这样的结果只能看,既没有准确的结果参数也不能进行空间计算。
本节课程就来讲解一个不太一样的应用案例,将可视域分析变成一个既可以看也可以计算的结果。
实现的步骤大致分为三个步骤:
1、前端可视域分析
2、空间分析服务构建几何体
3、可视域分析几何体绘制和计算
一、前端可视域分析
可视域分析在SuperMap iClient3D for WebGL中有范例代码,这里就不在赘述。
二、空间分析服务构建几何体
SuperMap iSever提供了空间分析服务,可以通过空间分析服务构建可视域体。这里需要准备任意的空间分析服务即可。
首先获取可视域体参数,主要是前面一步分析出来的可视域体的结果点
var ViewshedParameter = viewshed3D.getViewshedParameter()
然后构建请求参数
var param = {
"viewerPoint": ViewshedParameter.viewPosition,
"point3DsList": ViewshedParameter.point3DList,
"radius": ViewshedParameter.distance,
"lonlat": true,
"viewShedType": "VISIBLEBODY"
}
viewShedType分为可视域体和不可视域体
最后执行post请求
var queryObjJSON = JSON.stringify(param);
$.ajax({
type: "post",
url: url,
data: queryObjJSON,
success: function(result) {}
})
三、可视域分析几何体绘制和计算
通过s3mintance将返回的geometry绘制到场景中
var resultObj = JSON.parse(result);
var geometry = resultObj.geometry
if (!geometry) {
return;
}
var buffer = new Uint8Array(geometry.model).buffer;
var position = geometry.position;
var color = new Cesium.Color(0, 1, 0, 0.5);
instanceColc.add('visibleBody', {
position: Cesium.Cartesian3.fromDegrees(position.x, position.y, position.z),
color: color
}, buffer);
if(resultObj) {
alert('可视域体积:'+resultObj.infos[0].volume)
}
这节课程就到这里,欢迎转发、评论、留言。