Cesium中实现仿ArcGIS三维的动态图层加载方式
Cesium 加载 ArcGIS 动态图层的方式
如果你在 Cesium 中加载过 ArcGIS 的动态图层,你会发现,Cesium 对于动态图层仍然采用类似切片图层的逻辑进行加载。也就是每个固定的瓦片 export 一张图片。
这样会造成一些问题:
- 请求量大,如果访问人数多,后端服务容易崩溃
- 如果动态图层中含有标注,会造成标注文字变多(ArcGIS 动态图层如果一个大图形被分割在多个 export 中,那么每个 export 回来的图片都会含有大图形对应的标注)
没找到合适的带标注的动态图层数据,这里用 ps 简单模拟一个效果

ArcGIS 4.x 三维场景加载动态图层的方式
通过查看 ArcGIS 三维场景发送的请求可以发现,ArcGIS 每次相机停止运动时,会首先给动态图层服务发送两个范围大小不一样的 export 请求。再根据请求回来的两张图片进行叠加显示。
效果大概如下(同样用 ps 模拟)

当然,如果同一个面被分割在了两个服务,一样会出现标注多的问题

在 Cesium 中实现仿 ArcGIS 三维的动态图层加载方式
要实现仿 ArcGIS 三维的动态图层加载方式,首先当然是得先获取 ArcGIS 是如何计算两个 export 参数的。
这一步没什投机取巧的办法,只能去翻 ArcGIS 的源码,把这段逻辑抽离出来。(npm 包里的 arcgis 源码,代码经过了压缩,不过大致逻辑还是能看出来的)
如果抽离的逻辑正确,那么请求的范围应该类似下面这样


抽离出两个 export 参数的计算方法之后,就该考虑如何展示了。
利用 GroundPrimitive 展示
将请求回来的两张图片通过 GroundPrimitive 展示是最简单的办法,需要做的额外操作只有在第二张大的图片中,挖去和小图片相交的部分
优点:实现简单,性能高,能实现影像贴模型的效果
缺点:无法和其他通过 ImageryLayer 方式加载的图层交换图层顺序
编写 ImageryLayer 展示
ImageryLayer 请求方式就是 Cesium 原生的方式。它能够解决 GroundPrimitive 无法和其他图层交换顺序的问题,但是会有一些性能问题。
性能问题源自于 ImageryLayer 会按切片方案将展示的内容切割成一个个小的瓦片。而我们 export 回来的两张图片并不是严格按照切片方案请求的。

因此, 每次请求回来的图片, 都需要根据当前正在显示的瓦片进行切割, 并将切割出来的内容更新至瓦片的缓存中。( ImageryLayer 内置缓存机制,一旦当前瓦片请求成功,则后续直接读取缓存不会再请求。实际渲染时,也是读取缓存中的内容渲染的。如果不更新缓存,那么当重新显示已缓存的瓦片时,其内容会和当前的图片对应不上 )
更新瓦片缓存这一步相当耗时和耗内存,并且如果瓦片多,甚至会出现阻塞主线程的情况。
有的同学可能会说,是不是可以考虑采用 WebWorker 来计算每张瓦片的内容?
事实上,我尝试过,但是由于需要同时更新的瓦片比较多,就会导致 export 请求回来的两张图片都需要复制一份到各自的 WebWorker 中,这样会导致更严重的内存问题。
采用 SharedArrayBuffer 让图片在 WebWorker 之间共享?
事实上,我也尝试过,但是 SharedArrayBuffer 似乎存在一些兼容性问题,最后还是放弃了 😑。
如果各位大佬有解决方案,欢迎提供!
修改源码的方式展示
在编写 ImageryLayer 方案时,我想到,实际上我可以只向着色器传入两张纹理,和对应的四至范围。在计算 Globe 上的影像纹理时,单独为动态图层进行切割即可。
就目前而言,这个可能是最理想的方案,只是需要去对 Globe 和 ImagerLayer 相关的源码进行修改。
这个方案还有待尝试,累了…晚点再试…😑
原文链接
Cesium中实现仿ArcGIS三维的动态图层加载方式
相关文章:
Cesium中实现仿ArcGIS三维的动态图层加载方式
Cesium 加载 ArcGIS 动态图层的方式 如果你在 Cesium 中加载过 ArcGIS 的动态图层,你会发现,Cesium 对于动态图层仍然采用类似切片图层的逻辑进行加载。也就是每个固定的瓦片 export 一张图片。 这样会造成一些问题: 请求量大,…...
数据冒险、控制冒险、结构冒险
计算机组成原理 数据冒险、控制冒险、结构冒险 对所有用户(所有程序员)可见:PSW、PC、通用寄存器 PSW(条件转移需要用到,程序员使用CMP指令的时候也需要用到所以是对用户可见)PC(跳转指令需要…...
TCA9555芯片手册解读(6)
接前一篇文章:TCA9555芯片手册解读(5) 二、详述 7. 上电复位 当电源(从0V)施加到VCC时,内部通电复位将TCA9555保持在复位状态,直到VCC达到VPOR。此时,重启条件被释放,T…...
NodeJs-fs模块
fs 全称为 file system ,称之为 文件系统 ,是 Node.js 中的 内置模块, fs模块可以实现与硬盘的交互,例如文件的创建、删除、重命名、移动,内容的写入读取等以及文件夹相关操作 写入文件 异步写入 // 导入fs模块const f…...
Transformer: Attention Is All You Need (2017) 翻译
论文:Attention Is All You Need 下载地址如下: download: Transformer Attention Is All you need Attention Is All You Need 中文 《Attention Is All You Need》是《Transformer》模型的开创性论文,提出了一种全新的基于注意力机制的架构…...
【记录】Django解决与VUE跨域问题
1 梗概 这里记录Django与VUE的跨域问题解决方法,主要修改内容是在 Django 中。当然其他的前端项目 Django 也可以这样处理。 2 安装辅助包 pip install django-cors-headers3 配置 settings.py INSTALLED_APPS [ # ... corsheaders, # ... ] 为了响应…...
Java 常见Exception异常解决方法
在Java编程中,异常处理是确保程序稳定性和健壮性的重要部分。了解常见的异常类型及其解决方法,可以帮助你编写更加健壮的代码。以下是一些常见的Java异常及其解决方法: NullPointerException:空指针异常 原因:尝试访问…...
东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南
东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南 文章目录 东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南 一 TongWeb V7二 Spring Boot JAR 配置文件三 修改 maven 依赖四 docker compose 启动项目五 查看 docker 信息 本文详细讲解了如何在 Docker 环境中…...
TIM输入捕获---STM
一、简介 IC输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存在CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器和通用定时器都拥有4个输入捕获通道 可配置为PWMI模…...
【笔记】架构上篇Day6 法则四:为什么要顺应技术的生命周期?
法则四:为什么要顺应技术的生命周期? 简介:包含模块一 架构师的六大生存法则-法则四:为什么要顺应技术的生命周期?&法则四:架构设计中怎么判断和利用技术趋势? 2024-08-29 17:30:07 你好&am…...
MSF(Metasploit Framework)
渗透测试中MSF是一个非常强大的工具,可以用来验证系统漏洞、执行攻击以及开发自定义的漏洞利用代码。以下是使用MSF进行渗透测试的基本步骤: 1.启动MSF 启动MSF控制台。 msfconsole2. 搜索漏洞 在MSF中搜索已知漏洞。 search <vulnerability nam…...
Python中的OpenCV详解
文章目录 Python中的OpenCV详解一、引言二、OpenCV基础操作1、OpenCV简介2、安装OpenCV3、图像读取与显示 三、图像处理技术1、边缘检测2、滤波技术 四、使用示例1、模板匹配 五、总结 Python中的OpenCV详解 一、引言 在当今数字化社会中,图像处理和计算机视觉技术…...
IMX6ULL开发板学习嵌入式技术过程中为了测试本地网络是否正常而常用的Ping命令
Windows ip:192.168.5.10 Ubuntu ip:192.168.5.11 开发板 ip:192.168.5.9 最常用的 最常用的两个是开发板和Ubuntu的互ping 开发板→Ubuntu ping 192.168.5.11Ubuntu→开发板 ping 192.168.5.9完整的如下 Windows→Ubuntu ping 192.16…...
Blue Ocean 在Jenkins上创建Pipeline使用详解
BlueOcean是Jenkins的一个插件,它提供了一套可视化操作界面来帮助用户创建、编辑Pipeline任务。以下是对BlueOcean中Pipeline操作的详细解释: 一、安装与启动BlueOcean 安装:在Jenkins的“系统管理”->“插件管理”->“可选插件”中搜索“BlueOcean”,然后点击“Ins…...
2024 年最新前端ES-Module模块化、webpack打包工具详细教程(更新中)
模块化概述 什么是模块?模块是一个封装了特定功能的代码块,可以独立开发、测试和维护。模块通过导出(export)和导入(import)与其他模块通信,保持内部细节的封装。 前端 JavaScript 模块化是指…...
photoshop的2个形状-箭头
有时候用ps画一些教程类图文,需要用到箭头. 另外自己画了一个镂空的长方形和正方形 形状的路径一般在Custom Shapes文件夹内 例如 E:\photoshopCS4\Adobe Photoshop CS4\Presets\Custom Shapes...
【经验分享】搭建本地训练环境知识点及方法
最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…...
AI知识-多模态(Multimodal)
摘要 本文将探讨多模态(Multimodal)的概念,包括其通俗理解、技术原理、应用场景,以及进行总结。我们将通过一个简要的介绍来了解多模态技术,并深入探讨其在人工智能和机器学习领域的重要性。 通俗理解 多模态&#x…...
代码随想录 leetcode-数据结构刷题笔记
文章目录 一、数组1.1 二分查找 1.1.1 二分查找 1.1.2 搜索插入位置1.1.3 排序数组中查找元素第一和最后一个位置1.1.4 x的平方根 1.1.5 有效的完全平方数 1.2 快慢指针 1.2.1 移除元素 1.2.2 删除有序数组中的重复项 1.2.3 移动0 1.2.4 比较含退格的字符串 1.2.5 有序数组的平…...
Oracle最佳实践-优化硬解析
前段时间参加oracle CAB,oracle高级服务部门做了一个数据库最佳实践的报告,其中就有一项就是解决未使用绑定变量但执行次数很多的SQL; 对于一个数据库来说如果不知道该如何优化,那么最简单最有效的优化就是减少硬解析,…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
