SuperMap iClient3D for WebGL 实用锦囊之数据加载与显示

2024-02-25 10:18

本文主要是介绍SuperMap iClient3D for WebGL 实用锦囊之数据加载与显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SuperMap iClient3D for WebGL 实用锦囊之数据加载与显示

数据是GIS的血液,如果没有数据,后续的所有操作都无法实现。大家在使用SuperMap iClient3D for WebGL来做web端的三维应用开发时,首先需要实现的就是数据的显示。今天小编将SuperMap技术问答社区上(http://ask.supermap.com/)受到颇多关注的数据显示问题编辑整理出来供大家参考,一起看看有没有您正需要的答案吧!

一、关于场景中各种数据的加载显示
这里写图片描述
很多时候我们都会遇到这样的问题:如何把数据加载到场景?为何场景发布之后数据不显示?而造成这些问题的绝大多数的原因是项目前期数据处理不当。在此提供两点注意事项:
(1)在Web客户端访问前,通常推荐先将三维数据(包括矢量、精模、BIM、倾斜摄影模型等)生成S3M格式的缓存,然后再使用SuperMap iServer发布三维服务;
(2)在生成S3M缓存时,配置文件(*.scp)建议不要采用“config”命名,且scp要放到跟tiles文件夹同级目录。

二、关于地形数据的加载显示
对于地形数据的显示,首先就是建议先将地形数据生成TIN类型的地形缓存,以加速Web端的显示效率。TIN类型的地形缓存可以通过SuperMap iDesktop的“场景缓存”功能实现,将DEM数据添加到“生成场景缓存”的数据集列表中,并选择TIN缓存类型。
这里写图片描述
将TIN类型缓存加载到场景中,并保存场景和工作空间,使用SuperMap iServer将该工作空间发布为三维服务。最后可以通过SuperMap iClient3D for WebGL中CesiumTerrainProvider接口实现Web端地形数据的加载。
这里写图片描述
**注意:**目前,一个三维场景只允许加载一个TIN缓存数据(*.sct),若想加载多个TIN缓存数据,则需使用SuperMap iDesktop的“合并TIN缓存”功能将它们合并为一个TIN缓存。
这里写图片描述

三、关于动画模型、轨迹运动的显示
若想在Web端显示模型、或者动画模型等效果,可以通过以下方式实现。

  1. 将模型数据添加到KML中,再通过客户端加载KML文件,从而实现模型显示,这种方式建议在模型数据量较少的时候使用,模型的格式要求为gltf或者S3M。值得注意的是,gltf自身可以带帧动画,而S3M不支持帧动画。
    viewer.dataSources.add(Cesium.KmlDataSource.load(’./SampleData/kml/model.kml’));
  2. 通过SuperMap iClient3D for WebGL的动态图层(Cesium.DynamicLayer3D)的方式,将S3M格式的模型数据进行加载。SuperMap iClient3D for WebGL的动态图层通过实例化的技术支持快速显示大量模型数据,通过刷新模型的位置,实现模型的运动。
  3. 通过S3MinstanceCollection(S3M实例化模型集合类)添加S3M模型,同样也可以实现大量模型数据的加载。当然,刷新模型位置时,不会有模型运动过程的动画。
  4. 通过viewer.entity实现对单个模型数据的加载显示,仅支持gltf格式。
    需要说明的是,带帧动画的glft模型是从3Ds Max中导出的dae模型,再使用开源工具(如colladaTogltf.exe)导成gltf,最终通过kml加载或者entity加载。

四、Web客户端添加各种类型的矢量数据、注记等
一般来说,在Web端添加几何实体或者布告板、注记等内容可以通过Entity对象来承载,并将Entity通过viewer.entities.add 方法进行实体对象的加载显示。
实体对象添加过后,为了实现某种功能或效果需要灵活使用SuperMap iClient3D for WebGL封装的接口以及Cesium原生库当中的接口。例如,当我们遇到 “实体对象被地形数据遮盖”这样的问题时,就可以通过cesium原生库的接口depthTestAgainstTerrain来实现我们想要的效果。当我们设置为true时,实体对象将不会被地形遮盖。
这里写图片描述

五、参考资料
在SuperMap iClient3D for WebGL开发工具包的examples文件夹下,我们可以看到一些独立的文件,这些文件给大家提供的是丰富的GIS功能实现源代码。在我们开发过程中,可以基于它进行学习或者拷贝源代码放到自己的代码里进行复用。

六、小贴士
1、由于SuperMap iClient3D for WebGL这样一款开发包是基于Cesium这样的开源的框架来构建的,而Cesium版本迭代更新的非常快,所以大家在做Web端的三维应用开发时,建议下载最新SuperMap iClient3D for WebGL包。
下载地址:
http://support.supermap.com.cn:8090/iserver/iClient/for3D/webgl/zh/download.html
2、SuperMap iClient3D for WebGL关键资源的引用是通过AMD的require方式引用,在data-main设置的main.js文件中记录资源路径,因此我们在创建自己的web应用时,要记得去检查main.js中资源文件的相对路径。
3、在Web应用程序开发调试时,不能使用file的方式在浏览器打开页面进行调试,需要使用http方式访问Web页面。

本文作者:张梦婷

这篇关于SuperMap iClient3D for WebGL 实用锦囊之数据加载与显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745168

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount