2.9 空间分析绘制类(Analysis)
空间分析绘制类主要为三维地图提供基于空间位置的各类分析、绘制功能。
目前分析类有如下功能分类:
区域压平分析(AreaFlatteningAnalysis)
区域隐藏分析(AreaHiddingAnalysis)
缓冲区分析(BufferAnalysis)
退让分析(ConcessionAnalysis)
基础绘制分析(DrawAnalysis)
边界绘制分析(DrawBoundaryAnalysis)
地形开挖分析(ExcavationAnalysis)
控高分析(HeightControlAnalysis)
热力图分析(HotSpotAnalysis)
态势标绘分析(SituationPlottingAnalysis)
沿街立面分析(StreetElevationAnalysis)
日照分析(SunlightAnalysis)
地形编辑分析(TerrainEditAnalysis)
视频融合分析(VideoIntegrationAnalysis)
视频投影分析(VideoProjectionAnalysis)
视域分析(ViewshedAnalysis)
多视域分析(ViewshedExAnalysis)
通视分析分析(VisibilityAnalysis)
水域分析(WaterFloodAnalysis)
创建方式
空间分析绘制有两种创建方式:
第一种是在代码中直接赋予位置坐标信息,使其创建时就在场景中生成,这里拿视域分析(ViewshedAnalysis)进行举例,代码如下:
// 创建视域分析并添加至三维场景中
var viewshedAnalysis = new CooSDK.ViewshedAnalysis({
isTextVisible: true,
analysisTextSymbol: {
size: 140,
fillingColor: new CooSDK.ColorObj(0, 0, 1, 1),
isHorizontal: true
},
// 预设点位
loadEyePoint: new CooSDK.PositionObj(120.218221747, 30.2105396593, 82.76055),
loadAimPoint: new CooSDK.PositionObj(120.218013904, 30.2110769596, 20.09121)
});
第二种是在进行Analysis类对象创建后,通过鼠标与三维场景的点击交互来生成分析绘制效果,如图所示:
所有的分析均支持这两种模式。
分析完成事件的绑定
在创建分析对象时,callback属性可预先绑定分析完成后的事件函数,该函数会在操作过程完毕后,由SDK自动触发,来告知使用者分析过程已经完成,我们可以在绑定的事件函数里,做自己想做的逻辑处理:
// 创建视域分析并添加至三维场景中,并绑定了匿名回调函数
var viewshedAnalysis = new CooSDK.ViewshedAnalysis({
callback: function(){
// do something...
}
});
属性更新
在分析对象创建之后,如需对其显示效果、事件绑定等属性进行修改,可使用其提供的update接口对其进行属性更新:
viewshedAnalysis.update({
// 取消回调事件绑定
callback: "none",
// 修改分析线颜色
drawLineColor: new CooSDK.ColorObj(1.0, 0, 0, 1.0),
// 修改垂直张角
vAngle: 100
});
这里需要注意的是,在取消回调事件的绑定时,请传入字符串"none",而不是null。
分析结果的获取
分析完成后,通常会生成相关的分析结果,这时就可以通过getResult接口,来获取分析结果相应的信息,这里注意下IE浏览器和非IE浏览器的写法:
IE浏览器:
// 获取视域起始点信息
var result = viewshedAnalysis.getResult(CooSDK.EnumAnalysis.VIEWSHED_EYEPOS);
console.log(result);
// 获取视域目标点信息
var result1 = viewshedAnalysis.getResult(CooSDK.EnumAnalysis.VIEWSHED_AIMPOS);
console.log(result1);
非IE浏览器:
// 获取视域起始点信息
viewshedAnalysis.getResult(CooSDK.EnumAnalysis.VIEWSHED_EYEPOS, function(result){
console.log(result);
});
// 获取视域目标点信息
viewshedAnalysis.getResult(CooSDK.EnumAnalysis.VIEWSHED_AIMPOS, function(result1){
console.log(result1);
});
可以发现非IE浏览器下,其采用了类似Ajax的异步方式,通过回调函数来获取返回值,具体可参考2.22 支持的浏览器及代码差异化,来理解不同浏览器下不同的使用机制。
对象隐藏或删除
待不使用分析对象时,可选择隐藏或者删除改对象。
比如隐藏:
// 直接属性赋值
viewshedAnalysis.isVisible = false;
// or
// 通过update方法赋值
viewshedAnalysis.update({
isVisible : false
});
也可直接销毁,destroy返回值为null:
viewshedAnalysis = viewshedAnalysis.destroy();
本节介绍了Analysis类的对象的常用操作,它们具有统一的操作模式和接口,区别仅在于其丰富多样的配置属性上,这时就需要我们借助API帮助手册和应用示例来帮助理解和使用。