• 3.将“模拟结果.txt”文件中的水深值,写入属性表:通过Recordset.SetFieldValue(string name, object value)将“模拟结果.txt”文件中的水深值,写入对应的点位和水深字段里。关键代码如下图所示。

    图2-8水深值写入对应属性字段中的关键代码示例

    图2-9水深值写入结果示例

  • 4.更新“水深1”的字段值:通过更新列操作为初始时刻的属性值统一赋值。这里将水深1的字段值统一更新为0,以表达初始水位高度。

    图2-10初始水位统一赋值示例

  • 注意

    (1)当“模拟结果.txt”里没有点的位置信息时,可以通过上述方法,借助组件代码将“水深”信息导入点数据集。

    (2)如果“模拟结果.txt”记录了点的位置信息,可以直接将其导入成点数据集,并通过追加列的方式将不同时刻的水深值储存到属性表中。

    2.1.3生成时序模型瓦片

    注意

    (1)由于原始数据的范围是不规则的,所以生成时序模型瓦片时需要指定瓦片范围进行约束。

    (2)生成时序模型瓦片时,必须勾选必要的时序字段。

    2.2 三角网+要素方式生成时序模型瓦片

    该流程首先详细说明了包含矢量数据集的已有数据源的数据组成及操作,然后基于SuperMap iObject Java 11.2.0实现了时序模型瓦片生成和多要素追加。具体操作步骤如下:

    2.2.1数据组成说明

    如果原始数据为NC三角网数据,需要通过自定义开发将NC数据转换为面数据集,并建议将三角网中的点及单个要素信息(例如水深、水温等)存储为单个三维点数据集。

    2.2.2生成时序模型瓦片

    该流程主要介绍如何使用11.2.0及更高版本的SuperMap iObject Java生成时序模型瓦片。主要操作步骤及关键代码如下:

    3、服务发布及Web端数据可视化

    3.1保存工作空间

    在SuperMap iDesktopX,将章节2中得到的时序模型瓦片数据添加到场景中,并保存场景和工作空间。

    3.2发布三维服务

    SuperMap iServer将上一步骤得到的工作空间发布为三维服务,具体操作见SuperMap iServer帮助文档。

    3.3可视化表达

    通过代码在SuperMap iClient3D for WebGL/WebGPU加载上一步发布的三维服务,并采用分层设色的方式进行数据的可视化表达。主要参考代码如下:

                	promise.then(function (layers) {
                    layer = layers[0];
                    updateLayerHyp(layer);
                    layer.temporalSetting = new SuperMap3D.TemporalSetting();
                    layer.temporalSetting.location = 0;
                    layer.temporalSetting.changeZValue = true;
                    layer.minTransparentAlpha = 1;
                
                	// 更新图层分层设色函数 
                function updateLayerHyp(layer, colorIndex = 0, step = 24) { // step 颜色表插入的总数
                    // 图层上的时间总数,11.11 temporalCount,主版本外挂-图层上的时间总数 _temporalInfo
                    let temporalInfo = layer._temporalInfo;
                    temporalCount = temporalInfo.length > 0 ? temporalInfo[colorIndex].count : layer.temporalCount;
    
                    let minValue = layer._hypMinCategory;
                    let maxValue = layer._hypMaxCategory;
                    let hyp = new SuperMap3D.HypsometricSetting();
                    hyp.ColorTable = createColorTable();
                    hyp.DisplayMode = SuperMap3D.HypsometricSettingEnum.DisplayMode.FACE;
                    hyp.Opacity = 1.0;
                    hyp.LineInterval = 1.0;
                    hyp.ColorTableMaxKey = maxValue;
                    hyp.ColorTableMinKey = minValue;
                    //设置非法值颜色
                    hyp.noValueColor = new SuperMap3D.Color(1.0, 0.0, 0.0, 1);
                    hyp.MaxVisibleValue = maxValue;
                    hyp.MinVisibleValue = minValue;
                    hyp.filterMode = SuperMap3D.HypsometricSettingEnum.FilterMode.NEAREST;
                    layer.hypsometricSetting = {
                        hypsometricSetting: hyp,
                        analysisMode: SuperMap3D.HypsometricSettingEnum.AnalysisRegionMode.ARM_ALL,
                    };
                }
                
                // 创建颜色表
                function createColorTable(keys, colors, alphas) {
                    let colorTable = new SuperMap3D.ColorTable();
                    colorTable.insert(0.0, SuperMap3D.Color.fromCssColorString("#00A2FF").withAlpha(0));
                    colorTable.insert(0.01, SuperMap3D.Color.fromCssColorString("#0082FF").withAlpha(0.3));
                    colorTable.insert(0.05, SuperMap3D.Color.fromCssColorString("#008CFF").withAlpha(0.50));
                    colorTable.insert(0.1, SuperMap3D.Color.fromCssColorString("#0096FF").withAlpha(0.70));
                    colorTable.insert(0.15, SuperMap3D.Color.fromCssColorString("#0096FF").withAlpha(0.70));
                    colorTable.insert(0.30, SuperMap3D.Color.fromCssColorString("#00B9FF").withAlpha(0.70));
                    colorTable.insert(0.40, SuperMap3D.Color.fromCssColorString("#00C4FF").withAlpha(0.70));
                    colorTable.insert(0.48, SuperMap3D.Color.fromCssColorString("#00A0FF").withAlpha(0.80));
                    colorTable.insert(0.56, SuperMap3D.Color.fromCssColorString("#9AFF00").withAlpha(0.80));
                    colorTable.insert(0.60, SuperMap3D.Color.fromCssColorString("#00FF8C").withAlpha(0.80));
                    colorTable.insert(0.64, SuperMap3D.Color.fromCssColorString("#FFC400").withAlpha(0.80));
                    colorTable.insert(0.72, SuperMap3D.Color.fromCssColorString("#FF7B00").withAlpha(0.80));
                    colorTable.insert(0.80, SuperMap3D.Color.fromCssColorString("#0089FF").withAlpha(0.80));
                    colorTable.insert(0.88, SuperMap3D.Color.fromCssColorString("#0089FF").withAlpha(0.80));
                    colorTable.insert(0.96, SuperMap3D.Color.fromCssColorString("#005CE6").withAlpha(0.80));
                    colorTable.insert(1.04, SuperMap3D.Color.fromCssColorString("#005CE6").withAlpha(0.88));
                    colorTable.insert(1.12, SuperMap3D.Color.fromCssColorString("#005CE6").withAlpha(0.90));
                    colorTable.insert(1.20, SuperMap3D.Color.fromCssColorString("#005CE6").withAlpha(0.90));
                    colorTable.insert(1.28, SuperMap3D.Color.fromCssColorString("#005CE6").withAlpha(0.90));
                    colorTable.insert(1.36, SuperMap3D.Color.fromCssColorString("#005CE6").withAlpha(0.90));
                    colorTable.insert(1.44, SuperMap3D.Color.fromCssColorString("#005CE6").withAlpha(0.90));
                    colorTable.insert(1.52, SuperMap3D.Color.fromCssColorString("#005CE6").withAlpha(0.90));
                    colorTable.insert(1.61, SuperMap3D.Color.fromCssColorString("#005CE6").withAlpha(0.90));
                    colorTable.insert(10.97198486328125, SuperMap3D.Color.fromCssColorString("#005CE6").withAlpha(1.0));
                    return colorTable
                }
                

    3.4多时序模型瓦片加载效果

    v11i(2024)正式版产品包里我们提供了多时序多要素水场范例可以参考

    图2-23Web端加载多时序模型瓦片效果示例

    注意

    (1)如果只在SuperMap iClient3D for WebGL/WebGPU 11.1.1中实现数据可视化,建议使用SuperMap iDesktopX 11.1.1生成时序模型瓦片。

    (2)如果在SuperMap iClient3D for WebGL/WebGPU 11.2.0及以上版本中实现数据可视化, SuperMap iDesktopX的版本不受限制。