SuperMap iClient for Webgl 实现时序性淹没分析

目录

一、数据制作

        1.数据导入

        2.提取水系

        3.构造时序点位

二、代码效果实现


作者:taco

        前言:常规实例中的淹没分析效果是一个基准面,随着时间平稳的上升,但实际情况可能并不会有一个平稳的上升效果,此时就有一个新问题?能否实现根据时间,降水量,或者水位的参数来控制淹没的效果呢?基于现有的接口的话,仅靠前端实现还是有些困难的。此时可以通过数据的辅助来实现该效果,本篇文章将介绍如何制作该类型数据,以及代码的实现方法。


一、数据制作

        由于淹没数据,和时序性的降雨数据并不是很好的获取。我们这里采用的是地形基于水文分析构造的淹没数据。

        1.数据导入

        在iDesktopX中导入一份栅格数据,右键【数据源】-【导入数据集】-【选择需要导入的tif文件】

        2.提取水系

        导入后我们使用【空间分析】-【水文分析】来提取我们需要的数据。很不错的是这里提供了处理自动化流程,我们直接采用这个流程即可。

        我们这里删掉一些不用的节点,仅保留我们需要的节点。

        在填充伪洼池位置选择原始的栅格数据集

        我们单击计算流向,选择上一步拿到的填充伪洼池后的栅格数据集来创建流向。并以流向数据集计算最终的汇水量。并单击执行从而得到汇水量数据集。

      基于汇水量我们提取出栅格的水系数据,此时我们给定阈值来提取。此处阈值相当于栅格值也可以理解为水的高度。

        重复执行上述操作多次分别得到10、20、30、40、50...等所需高度的值。为了最终效果好看,我这里提取的值相对来说较多。接下来使用【空间分析】-【矢栅转换】-【栅格矢量化】工具将栅格数据转为点数据。因为水系提取后栅格是0、1分布的,所以此时我们这里只提取出栅格值为1的数据即可,矢量类型注意选择点数据。

        提取后我们得到下图这样的点位,会发现水位越高点位约少。其实相当于淹没的越高淹没的范围越小。

        3.构造时序点位

        我们基于水位点最低的点进行更新,在点位较低的点中创建多个时序字段。右键点数据集选择【属性】在右侧【属性结构】中点击【+】进行创建修改命名后选择【应用】。

        此时我们浏览点数据集的属性表,可以发现字段是创建好了的,我们以记录的水位更新该字段的time1的值。点击time1列全部选中右键选择【更新列】,整列更新为我们需要的高度值即可。

        由于我们需要多个时间字段,但时间字段保存在不同的点上,我们需要区分点位把不同时期的点赋值到最基础的点位上去。

        接下来可以使用【空间分析】-【空间查询】功能,对数据进行更新。参考下方参数对点点相交查询。查询后会弹出属性表。直接在表的中更新time2的列即可。该列值为此点位的高度值。

        更新后我们打开最低点的点数据集会发现其中包含很多空白字段,这些空白字段就是这个高度没有水位的点,我们需要用上一个字段值的点位信息来补充这个字段。右键含有空白字段的列,选择筛选只保留空白字段。在更新这个空白字段为上一个字段的值。

        在更新后我们最终得到一份包含多时段的点数据集。

        4.生成时序点位数据

        我们将原始的栅格数据添加到地图中,新建面数据集。绘制一个我们需要执行淹没的范围。该范围可以为河流范围,也可以为一个区域范围。

        使用【三维数据】-【生成瓦片】-【点集生成时序模型瓦片】功能进行处理,该功能仅在iDesktopX11.1.1版本中提供,需要的话可以在超图官网中下载最新版本。选择最低点的数据集,并且选择我们创建的时序字段。单机确定即可生成该类型缓存数据。

         将缓存添加至场景中保存工作空间发布为三维服务即可。

二、代码效果实现

        由于时序性淹没分析接口比较新,也需要使用SuperMap iClient for Webgl 11.1.1版本。可以在超图官网中进行下载(SuperMap技术资源中心|为您提供全面的在线技术服务)。注意:Cesium包并不支持该功能。

        淹没分析参数与原始研发分析设置方法一致。

var colorTable = new SuperMap3D.ColorTable();
							colorTable.insert(0, SuperMap3D.Color.fromCssColorString("#00A5EB"));
							colorTable.insert(10.630219, SuperMap3D.Color.fromCssColorString("#A6D9FF"));
							colorTable.insert(20, SuperMap3D.Color.fromCssColorString("#00A5EB"));
							colorTable.insert(25.945329, SuperMap3D.Color.fromCssColorString("#9AD1FF"));
							colorTable.insert(30.260439, SuperMap3D.Color.fromCssColorString("#8EC9FF"));
							colorTable.insert(35.575548, SuperMap3D.Color.fromCssColorString("#81C1FF"));
							colorTable.insert(40.890658, SuperMap3D.Color.fromCssColorString("#75B9FF"));
							colorTable.insert(45.205768, SuperMap3D.Color.fromCssColorString("#69B1FF"));
							colorTable.insert(50.890658, SuperMap3D.Color.fromCssColorString("#75B9FF"));
							colorTable.insert(55.205768, SuperMap3D.Color.fromCssColorString("#69B1FF"));
							colorTable.insert(60.520877, SuperMap3D.Color.fromCssColorString("#5CAAFF"));
							colorTable.insert(65.835987, SuperMap3D.Color.fromCssColorString("#50A2FF"));
							colorTable.insert(70.151097, SuperMap3D.Color.fromCssColorString("#449AFF"));
							colorTable.insert(75.466206, SuperMap3D.Color.fromCssColorString("#3792FF"));
							colorTable.insert(80.781316, SuperMap3D.Color.fromCssColorString("#2B8AFF"));
							colorTable.insert(85.096426, SuperMap3D.Color.fromCssColorString("#1F82FF"));
							colorTable.insert(90.411535, SuperMap3D.Color.fromCssColorString("#127AFF"));
							colorTable.insert(95.726645, SuperMap3D.Color.fromCssColorString("#0672FF"));
							colorTable.insert(100.041755, SuperMap3D.Color.fromCssColorString("#006CFA"));
							colorTable.insert(105.356865, SuperMap3D.Color.fromCssColorString("#0067F1"));
							colorTable.insert(110.671974, SuperMap3D.Color.fromCssColorString("#0062E8"));
							colorTable.insert(120.987084, SuperMap3D.Color.fromCssColorString("#005EDF"));
							colorTable.insert(125.302194, SuperMap3D.Color.fromCssColorString("#0059D6"));
							colorTable.insert(130.617303, SuperMap3D.Color.fromCssColorString("#0054CD"));
							colorTable.insert(140.932413, SuperMap3D.Color.fromCssColorString("#0050C4"));
							colorTable.insert(145.247523, SuperMap3D.Color.fromCssColorString("#004BBB"));
							colorTable.insert(150.562632, SuperMap3D.Color.fromCssColorString("#0047B2"));
							colorTable.insert(170.877742, SuperMap3D.Color.fromCssColorString("#0042A9"));
							colorTable.insert(100, new SuperMap3D.Color(0, 0, 1, 0.1));


							var hyp = new SuperMap3D.HypsometricSetting();
							hyp.ColorTable = colorTable;
							hyp.DisplayMode = SuperMap3D.HypsometricSettingEnum.DisplayMode.FACE;
							hyp.Opacity = 1.0;
							hyp.LineInterval = 1.0;
							hyp.ColorTableMaxKey = layer._hypMaxCategory;
							hyp.ColorTableMinKey = layer._hypMinCategory;
				
							//设置非法值颜色 
							hyp.noValueColor = new SuperMap3D.Color(0.0, 0.0, 0.0, 0.0);
							hyp.MaxVisibleValue = layer._hypMaxCategory;
							hyp.MinVisibleValue = layer._hypMinCategory;
							hyp.filterMode = SuperMap3D.HypsometricSettingEnum.FilterMode.NEAREST;
							layer.hypsometricSetting = {
								hypsometricSetting: hyp,
								analysisMode: SuperMap3D.HypsometricSettingEnum.AnalysisRegionMode.ARM_ALL,
							};
							layer.temporalSetting = new SuperMap3D.TemporalSetting();
							layer.temporalSetting.location = 0;
							//							layer.temporalSetting.changeZValue = false;
							layer.minTransparentAlpha = 1;
							// 图层上的时间总数
							var temporalCount = layer.temporalCount
							// 开始
							var timer;
							var isStop = false;
							var isPlay = false;

         通过setInterval来控制时序的进行。


								if (isStop || isPlay) {
									layer.temporalSetting.location = 0;
									isPlay = false;
									isStop = false;
									clearInterval(timer);
									$('.single-slider').jRange('setValue', "0");
								}
								timer = setInterval(() => {
									layer.temporalSetting.location += 1;
									// 获取input的value值 必须是字符串类型的值
									$('.single-slider').jRange('setValue', layer.temporalSetting.location
										.toString())
									if (layer.temporalSetting.location >= temporalCount) {
										layer.temporalSetting.location = 0;
										clearInterval(timer);
									}
								}, 200);
							

完整代码可以在资源中下载https://download.csdn.net/download/weixin_42532695/88595266

最终效果:

        

时序性淹没分析

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值