SuperMap iClient3D for Cesium等高线标注

kele

前言

在三维地形分析中,等高线分析是一种非常重要的分析方法,它能直观的表达出地形的高低起伏特征,在三维系统中受到广泛应用。在SuperMap iClient3D for Cesium中,等高线分析是前端GPU分析,能够分析并渲染出等高线,但是无法获取高程标注,这对三维项目来说缺少一个重要的地形高度指标。那么如何实现等高线的高程数值展示呢?我们一起来看下吧

一、效果展示

在这里插入图片描述

二、实现方法

1、激活鼠标绘制类,绘制分析范围

//绘制多边形
var tooltip = createTooltip(document.body);
var polygonHandler = new Cesium.DrawHandler(viewer, Cesium.DrawMode.Polygon);
polygonHandler.activeEvt.addEventListener(function (isActive) {if (isActive == true) {viewer.enableCursorStyle = false;viewer._element.style.cursor = '';$('body').removeClass('drawCur').addClass('drawCur');} else {viewer.enableCursorStyle = true;$('body').removeClass('drawCur');}
});
polygonHandler.movingEvt.addEventListener(function (windowPosition) {tooltip.showAt(windowPosition, '<p>开始绘制分析区域,右键结束绘制</p>');
});
polygonHandler.drawEvt.addEventListener(function (polygon) {polygonHandler.polygon.show = false;polygonHandler.polyline.show = false;tooltip.setVisible(false);var array = [].concat(polygon.object.positions);let positions = [],geometries = [];for (var i = 0, len = array.length; i < len; i++) {var cartographic = Cesium.Cartographic.fromCartesian(array[i]);var longitude = Cesium.Math.toDegrees(cartographic.longitude);var latitude = Cesium.Math.toDegrees(cartographic.latitude);var h = cartographic.height;if (positions.indexOf(longitude) == -1 && positions.indexOf(latitude) == -1) {positions.push(longitude);positions.push(latitude);positions.push(h);var queryPoint = { // 查询点对象x: longitude,y: latitude};geometries.push(queryPoint)}}floodUpdate(positions);  //分层设色绘制等值线doQuery(geometries);  //根据范围进行空间分析,返回结果高程,前端绘制entity-label展示polygonHandler.deactivate();
});

2、根据绘制范围进行前端GPU分层设色,得到等高线效果

function floodUpdate(positions){//创建分层设色对象hyp = new Cesium.HypsometricSetting();//设置分层设色的显示模式为线hyp.DisplayMode = Cesium.HypsometricSettingEnum.DisplayMode.LINE;//设置线颜色为红色hyp._lineColor = new Cesium.Color(1.0, 0.0, 0.0, 1.0);//等高线间隔为100mhyp.LineInterval = 100.0;//设置分层设色的最大/最小可见高度hyp.MaxVisibleValue = 9000;hyp.MinVisibleValue = 0;//设置分层设色颜色表的最大/最小key值,表示在此高度范围内显示颜色表hyp.ColorTableMinKey = 2736.88110351563;hyp.ColorTableMaxKey = 5597.06640625;//新建颜色表var colorTable = new Cesium.ColorTable();colorTable.insert(4262.3132649739609,new Cesium.Color(102/255, 255/255, 153/255));//设置分层设色的颜色表hyp.ColorTable = colorTable;//设置分层设色的透明度hyp.Opacity = 0.4;hyp.CoverageArea = positions;hyp.DisplayMode = Cesium.HypsometricSettingEnum.DisplayMode.LINE; //以等值线方式展示viewer.scene.globe.HypsometricSetting = {hypsometricSetting : hyp,analysisMode : Cesium.HypsometricSettingEnum.AnalysisRegionMode.ARM_REGION //自定义分析范围};
}

3、使用SuperMap iServer将dem数据集发布为空间分析服务,根据绘制范围进行数据集的等高线分析。需要注意的是,SuperMap iServer等高线分析的分析间距需要和第二步中分层设色等高线间隔保持一致

function doQuery(geometries) {var queryObj = {"extractParameter":{"datumValue":0,"interval":100, //等高线见距"resampleTolerance":0.7,"smoothMethod":"BSPLINE","smoothness":3,"clipRegion":{"points":geometries, //分析范围"type":"REGION"}},"resultSetting":{"dataset":"","dataReturnMode":"RECORDSET_ONLY","expectCount":100,"deleteExistResultDataset":true}};var queryData = JSON.stringify(queryObj); // 转化为JSON字符串作为查询参数$.ajax({type: "post",url: "http://localhost:8090/iserver/services/spatialAnalysis-DengGaoXian/restjsr/spatialanalyst/datasets/BeijingTerrain@BeijingTerrain/isoline.rjson?returnContent=true",data: queryData,success: function (result) {},error: function (msg) {console.log(msg);},})
}

4、分析结果中包含等高线节点以及对应的高度,由于以上步骤已经通过GPU分层设色实现了等高线的渲染,这里只需添加高度标注即可。
在标注过程中有这样一个困扰,分析结果等值线可能为复合对象并且有很多节点,高程标注放在哪个节点位置合适呢?小编的做法是将复合等值线对象进行拆分为简单对象,在每个简单对象的第一个节点上进行标注,以下是实现代码

var resultObj = JSON.parse(result);
let features = resultObj.recordset.features;
for(let fea of features){let num = fea.geometry.parts.length;  //parts长度表示子对象数量,parts内容表示每个子对象的节点数量for(let i=0;i<num;i++){let index = 0;if(i === 0){index = 0}else{index = fea.geometry.parts[i-1];}viewer.entities.add({position: new Cesium.Cartesian3.fromDegrees(fea.geometry.points[index].x,fea.geometry.points[index].y,Number(fea.fieldValues[5])),label:{text: fea.fieldValues[5],fillColor: Cesium.Color.ORANGE,scaleByDistance: new Cesium.NearFarScalar(1000, 1, 100000, 0.1)}})}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从 x86 到 ARM64:CPU 架构的进化与未来

在计算机发展的历史长河中&#xff0c;x86、x64 和 ARM64 这三大主流 CPU 架构各自书写了辉煌的篇章。它们不仅代表了技术的进步&#xff0c;更承载着无数创新者的梦想与努力。 x86&#xff1a;从 16 位到 32 位的辉煌之路 诞生与崛起 1978 年&#xff0c;英特尔&#xff08;…

红魔电竞PadPro平板解BL+ROOT权限-KernelSU+LSPosed框架支持

红魔Padpro设备目前官方未开放解锁BL&#xff0c;也阉割了很多解锁BL指令&#xff0c;造成大家都不能自主玩机。此规则从红魔8开始&#xff0c;就一直延续下来&#xff0c;后续的机型大概率也是一样的情况。好在依旧有开发者进行适配研究&#xff0c;目前红魔PadPro平板&#x…

TCP Analysis Flags 之 TCP Out-Of-Order

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

<数据集>风力发电机损伤识别数据集<目标检测>

数据集下载链接 &#xff1c;数据集&#xff1e;风力发电机损伤识别数据集&#xff1c;目标检测&#xff1e;https://download.csdn.net/download/qq_53332949/90187097数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2527张 标注数量(xml文件个数)&#xff1a;252…

分布式版本管理工具——Git关联远程仓库(github+gitee)

Git远程仓库&#xff08;Github&#xff09;的基本使用 一、前言二、Git远程仓库介绍三、演示1. 关联github远程仓库2. 关联gitee&#xff08;码云&#xff09;远程仓库3. 重命名远程仓库名4. 移除远程仓库 四、结束语 一、前言 古之立大事者&#xff0c;不惟有超世之才&#x…

在 React 项目中安装和配置 Three.js

React 与 Three.js 的结合 &#xff1a;通过 React 管理组件化结构和应用逻辑&#xff0c;利用 Three.js 实现 3D 图形的渲染与交互。使用这种方法&#xff0c;我们可以在保持代码清晰和结构化的同时&#xff0c;实现令人惊叹的 3D 效果。 在本文中&#xff0c;我们将以一个简…

Lucene 漏洞历险记:修复损坏的索引异常

作者&#xff1a;来自 Elastic Benjamin Trent 有时&#xff0c;一行代码需要几天的时间才能写完。在这里&#xff0c;我们可以看到工程师在多日内调试代码以修复潜在的 Apache Lucene 索引损坏的痛苦。 做好准备 这篇博客与往常不同。它不是对新功能或教程的解释。这是关于花…

深度学习J6周 ResNeXt-50实战解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 本周任务&#xff1a; 1.阅读ResNeXt论文&#xff0c;了解作者的构建思路 2.对比之前介绍的ResNet50V2、DenseNet算法 3.复现ResNeXt-50算法 一、模型结构…

对话 Project Astra 研究主管:打造通用 AI 助理,主动视频交互和全双工对话是未来重点

Project Astra 愿景之一&#xff1a;「系统不仅能在你说话时做出回应&#xff0c;还能在持续的过程中帮助你。」 近期&#xff0c;Google DeepMind 的 YouTube 频道采访了 Google DeepMind 研究主管格雷格韦恩 (Greg Wayne)。 格雷格韦恩的研究工作为 DeepMind 的诸多突破性成…

LunarVim安装

LunarVim以其丰富的功能和灵活的定制性&#xff0c;迅速在Nvim用户中流行开来。它不仅提供了一套完善的默认配置&#xff0c;还允许用户根据自己的需求进行深度定制。无论是自动补全、内置终端、文件浏览器&#xff0c;还是模糊查找、LSP支持、代码检测、格式化和调试&#xff…

高质量 Next.js 后台管理模板源码分享,开发者必备

高质量 Next.js后台管理模板源码分享&#xff0c;开发者必备 Taplox 是一个基于 Bootstrap 5 和 Next.js 构建的现代化后台管理模板和 UI 组件库。它不仅设计精美&#xff0c;还提供了一整套易用的工具&#xff0c;适合各种 Web 应用、管理系统和仪表盘项目。无论你是初学者还是…

开发场景中Java 集合的最佳选择

在 Java 开发中&#xff0c;集合类是处理数据的核心工具。合理选择集合&#xff0c;不仅可以提高代码效率&#xff0c;还能让代码更简洁。本篇文章将重点探讨 List、Set 和 Map 的适用场景及优缺点&#xff0c;帮助你在实际开发中找到最佳解决方案。 一、List&#xff1a;有序存…

Java包装类型的缓存

Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。 Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128&#xff0c;127] 的相应类型的缓存数据&#xff0c;Character 创建了数值在 [0,127] 范围的缓存数据&#xff0c;Boolean 直接返回 True or Fal…

工程师 - MinGW

MinGW Minimalist GNU for Windows&#xff0c;前身为mingw32&#xff0c;是一个免费开源的软件开发环境&#xff0c;从2010年开始项目停止并不再使用。后续提供MinGW-w64。 MinGW包括: - 移植到Windows上的GNU编译器集&#xff08;GCC&#xff09;&#xff0c;包括C、C、ADA和…

EasyExcel(读取操作和填充操作)

文章目录 1.准备Read.xlsx&#xff08;具有两个sheet&#xff09;2.读取第一个sheet中的数据1.模板2.方法3.结果 3.读取所有sheet中的数据1.模板2.方法3.结果 EasyExcel填充1.简单填充1.准备 Fill01.xlsx2.无模版3.方法4.结果 2.列表填充1.准备 Fill02.xlsx2.模板3.方法4.结果 …

CKA认证 | Day7 K8s存储

第七章 Kubernetes存储 1、数据卷与数据持久卷 为什么需要数据卷&#xff1f; 容器中的文件在磁盘上是临时存放的&#xff0c;这给容器中运行比较重要的应用程序带来一些问题。 问题1&#xff1a;当容器升级或者崩溃时&#xff0c;kubelet会重建容器&#xff0c;容器内文件会…

关于JAVA方法值传递问题

1.1 前言 之前在学习C语言的时候&#xff0c;将实参传递给方法&#xff08;或函数&#xff09;的方式分为两种&#xff1a;值传递和引用传递&#xff0c;但在JAVA中只有值传递&#xff08;颠覆认知&#xff0c;基础没学踏实&#xff09; 参考文章&#xff1a;https://blog.csd…

Excel基础知识

一&#xff1a;数组 一行或者一列数据称为一维数组&#xff0c;多行多列称为二维数组&#xff0c;数组支持算术运算&#xff08;如加减乘除等&#xff09;。 行&#xff1a;{1,2,3,4} 数组中的每个值用逗号分隔列&#xff1a;{1;2;3;4} 数组中的每个值用分号分隔行列&#xf…

基于DIODES AP43781+PI3USB31531+PI3DPX1207C的USB-C PD Video 之全功能显示器连接端口方案

随着USB-C连接器和PD功能的出现&#xff0c;新一代USB-C PD PC显示器可以用作个人和专业PC工作环境的电源和数据集线器。 虽然USB-C PD显示器是唯一插入墙壁插座的交流电源输入设备&#xff0c;但它可以作为数据UFP&#xff08;上游接口&#xff09;连接到连接到TCD&#xff0…

gazebo_world 基本围墙。

如何使用&#xff1f; 参考gazebo harmonic的官方教程。 本人使用harmonic的template&#xff0c;在里面进行修改就可以分流畅地使用下去。 以下是world 文件. <?xml version"1.0" ?> <!--Try sending commands:gz topic -t "/model/diff_drive/…