淹没分析是指根据指定的最大、最小高程值及淹没速度,动态模拟某区域水位由最小高程涨到最大高程的淹没过程,是GIS分析中常用的功能,常用于模拟洪涝灾害过程。在SuperMap的三维产品中淹没分析是通过分层设色的方式实现,以空间高度为强度值,在不同的高度设置不同的颜色,动态修改覆盖颜色的高度,实现淹没过程动态模拟。
下面来看实现过程。
一、设置颜色表
var colorTable = new Cesium.ColorTable();
function setColorTable(colorTable, key) {
switch (key) {
case "1":
colorTable.insert(71, new Cesium.Color(0, 39/255, 148/255));
colorTable.insert(0, new Cesium.Color(149/255, 232/255, 249/255));
break;
case "2":
colorTable.insert(71, new Cesium.Color(162/255, 251/255, 194/255));
colorTable.insert(0, new Cesium.Color(1, 103/255, 103/255));
break;
case "3":
colorTable.insert(71, new Cesium.Color(230/255, 198/255, 1));
colorTable.insert(0, new Cesium.Color(157/255, 0, 1));
break;
case "4":
colorTable.insert(71, new Cesium.Color(210/255, 15/255, 15/255));
colorTable.insert(54, new Cesium.Color(221/255, 224/255, 7/255));
colorTable.insert(36, new Cesium.Color(20/255, 187/255, 18/255));
colorTable.insert(18, new Cesium.Color(0, 161/255, 1));
colorTable.insert(0, new Cesium.Color(9/255, 9/255, 212/255));
break;
case "5":
colorTable.insert(71, new Cesium.Color(186/255, 1, 229/255));
colorTable.insert(0, new Cesium.Color(26/255, 185/255, 156/255));
break;
default:
break;
}
}
颜色表按照不同的空间高度,设置不同的颜色,中间高度对应颜色自动插值,形成色带。
二、分层设色类HypsometricSetting
该类主要用于制定三维模型渲染显示方案。分层设色是地图可视化的常用方式,它通过一定的颜色变化次序或色调深浅来表达和区别三维数据的不同属性。
HypsometricSetting的主要属性:
ColorTable : 获取或设置颜色表。
var hypsometricSetting = new Cesium.HypsometricSetting();
//设置颜色表
var colorTable = new Cesium.ColorTable();
colorTable.insert(900, new Cesium.Color(1, 0, 0));
colorTable.insert(600, new Cesium.Color(0, 0, 1));
hypsometricSetting.ColorTable= colorTable;
//获取颜色表
var value= hypsometricSetting.ColorTable;
ColorTableMaxKey:获取颜色表的最大key值。
var hypsometricSetting = new Cesium.HypsometricSetting();
var maxKey = hypsometricSetting.ColorTableMaxKey ;
ColorTableMinKey:获取颜色表的最小key值。
var hypsometricSetting = new Cesium.HypsometricSetting();
var minKey = hypsometricSetting.ColorTableMinKey ;
CoverageArea:获取或设置分层设色的区域
var hypsometricSetting = new Cesium.HypsometricSetting();
//设置分层设色区域
var pos = new Array();
pos.push(110.0);pos.push(40.03);pos.push(110.0);
pos.push(110.0);pos.push(40.001);pos.push(110.0);
pos.push(110.103);pos.push(40.001);pos.push(110.0);
pos.push(110.103);pos.push(40.03);pos.push(110.0);
hypsometricSetting.CoverageArea= pos;
//获取分层设色区域
var value= hypsometricSetting.CoverageArea;
DisplayMode : 获取或设置显示模式。
var hypsometricSetting = new Cesium.HypsometricSetting();
//设置显示模式
hypsometricSetting.DisplayMode= Cesium.HysometricSetting
Enum.DisplayMode.FACE;LineColor
//获取显示模式
var value= hypsometricSetting.DisplayMode;
emissionTexCoordUSpeed : 设置或获取自发光纹理在U方向的运动速度,整个纹理的U方向的纹理坐标是从0.0到1.0,速度单位是纹理坐标的偏移量每秒
var hypsometricSetting = new Cesium.HypsometricSetting();
//设置自发光纹理在U方向的运动速度
var emissionTexCoordSpeed = value;
hypsometricSetting.emissionTexCoordUSpeed = emissionTexCoordSpeed;
//获取自发光纹理在U方向的运动速度
var value= hypsometricSetting.emissionTexCoordUSpeed ;
emissionTextureUrl : 设置或获取自发光纹理
var hypsometricSetting = new Cesium.HypsometricSetting();
//设置自发光纹理
var emissionTextureUrl = String;
hypsometricSetting.emissionTextureUrl = emissionTextureUrl;
//获取自发光纹理
var value= hypsometricSetting.emissionTextureUrl ;
LineColor :获取或设置等值线的颜色。
var hypsometricSetting = new Cesium.HypsometricSetting();
//设置线的颜色
var color = new Cesium.Color(1, 0, 0);
hypsometricSetting.LineColor = color;
//获取线的颜色
var value= hypsometricSetting.LineColor ;
LineInterval :获取或设置等值线的间隔。
var hypsometricSetting = new Cesium.HypsometricSetting();
//设置线的间隔
hypsometricSetting.LineInterval= 10;
//获取线的间隔
var value= hypsometricSetting.LineInterval;
MaxVisibleValue : 获取或设置最大可见值。
var hypsometricSetting = new Cesium.HypsometricSetting();
//设置最大可见值
hypsometricSetting.MaxVisibleValue = 150;
//获取最大可见值
var value= hypsometricSetting.MaxVisibleValue;
MinVisibleValue :获取或设置最小可见值。
var hypsometricSetting = new Cesium.HypsometricSetting();
//设置最小可见值
hypsometricSetting.MinVisibleValue = 30;
//获取最小可见值
var value= hypsometricSetting.MinVisibleValue;
noValueColor :设置或获取无效颜色值,默认白色
Opacity : 获取或设置不透明度,取值范围为0-1,其中0表示完全透明,1表示完全不透明。
var hypsometricSetting = new Cesium.HypsometricSetting();
//设置透明度
hypsometricSetting.Opacity = 0.5;
//获取透明度
var value= hypsometricSetting.Opacity;
分层设色类支持s3mtileslayer和tin地形,当对s3mtileslayer设置时,分层设色类的最大、最小可见值为图层的最大、最小强度值,当对地形设置时,则为地形的高度值。
三、动态修改最大可见值
setInterval(function(){
hyp.MaxVisibleValue = currentHeight;
}, 100)
最后来看下整体效果