【超图】iClient3D for Cesium 以动静结合方式加载WMTS服务

作者:taco

一、问题来源

        在最近支持的项目中,我们面临一个挑战:客户需要在前端动态加载高达3亿级别的白模底面数据。这样做的主要原因是客户的数据库会频繁更新,因此我们需要采用动态加载的方式来确保用户界面能够实时反映最新的数据变化。

如果我们仅依赖iServer的动态出图能力,而不采取其他辅助方案

出现的问题:在高视角和10至13级比例尺的情况下,系统需要请求大量数据以实现动态出图。然而,由于磁盘读写速度和数据库索引效率的限制,查询过程耗时较长,这不仅导致动态出图速度缓慢,还可能会引起iServer出现暂时无响应的现象。

当前,仅依赖动态出图的方式存在无法成功渲染图像的风险。为了提高加载效果,我们探索了一种新的策略。本文将详细介绍如何通过结合动态出图和静态瓦片的混合方法来优化数据加载。

二、新的方案

        在三维场景中,从高空视角观察时,底图的细节并不明显,因为它们紧密聚集在一起。实际上,我们只需要捕捉到一个大致的轮廓。因此,在10至14级比例尺时,我们可以使用静态瓦片来渲染图像,这样可以减少数据请求和提高渲染效率。而在近地视角,由于需要请求的瓦片数量相对较少,我们可以继续采用动态出图方案,以保持图像的实时性和准确性。

        接下来将介绍具体如何实现。

三、数据处理

3.1 地图投影转换

         将原始地图打开,通过动态投影的方式将地图投影至3857坐标系。

3.2 生成静态瓦片

        右键选择已经保存的【地图】,选择【生成地图瓦片】(单任务/多任务),将前几级(10-14级)处理为静态瓦片。

【参数配至】

比例尺层级:根据需求我们对比例尺进行配置,主要以10-14级为主即可。如果15-16级显示依然较为密集也可处理到后续级别。

10

1:577,791.709872

577792

11

1:288,895.854936

288896

12

1:144,447.927468

144448

13

1:72,223.963734

72224

14

1:36,111.981867

36112

存储格式:为了方便拷贝到服务器中,此处建议选择【紧凑】

瓦片原点(-20037508.34,20037508.34)

3.3 发布WMTS服务

        将原始地图的工作空间保存。在iServer中发布该工作空间,选择WMTS服务。

 3.4修改切图原点

我们在iServer的\webapps\iserver\WEB-INF目录下找到 iserver-services.xml文件,并以文本的方式打开

在文档中修改对应服务的下面几行信息,来修改切图的瓦片原点

        <multiThread>true</multiThread>
		<leftTopCorner>
		<x>-20037508.34</x>
		<y>20037508.34</y>
		</leftTopCorner>		
        <poolSize>0</poolSize>  
        <ugcMapSettings/>  
        <useCompactCache>true</useCompactCache>  
        <extractCacheToFile>false</extractCacheToFile>  
        <queryExpectCount>1000</queryExpectCount>  

3.5 添加静态缓存

       3.5.1 创建缓存目录

        为了将之前处理的静态缓存利用起来。我们也需要将静态缓存存至iServer的某个目录下。如何找到这个目录呢?我们通过方问一张WMTS的瓦片来在我们本地创建一个缓存目录。

访问地址可以参考下方的地址

http://localhost:8090/iserver/services/map-testwfs/wmts100/City_P_4326/default/GoogleMapsCompatible_City_P_4326/11/837/4563.png

注:如果output目录下有temp文件,提前清理后在去访问png

访问后会在iserver/output/cache/目录下生成缓存文件

        3.5.2 记录哈希码

        因为要让iServer能读到我们替换的缓存,我们需要记录一下缓存的哈希码用来替换之前的缓存,如下图中的75462C23FIX。

        3.5.3 替换哈希码

找到我们生成的栅格瓦片此处需要修改四个位置,如下图所示

        3.5.4  栅格瓦片替换iServer中的缓存

将栅格瓦片至iServer对应目录中的位置,并将原始缓存移除掉

四、前端加载

        前端代码使用WebMapTileServiceImageryProvider方法加载即可,同时我们需要限制一下请求层级。只在11级后才开始进行请求,避免请求到非缓存部分数据导致iserver假死。

								var provider = new Cesium.WebMapTileServiceImageryProvider({
									url: "http://localhost:8090/iserver/services/map-wmts3857/wmts100",
									style: "default",
									format: 'image/png',
									layer: '北京@bmwmts3857',
									tileMatrixSetID: 'GoogleMapsCompatible_北京@bmwmts3857',
								});


								var layer = viewer.imageryLayers.add(new Cesium.ImageryLayer(provider, {
									minimumTerrainLevel: 11,
									maximumTerrainLevel: 18
								}));

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Y20030026 VUE+Springboot+MYSQL+LW+实体店推广平台的设计与实现 源代码 配置 文档 PPT

实体店推广平台的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着互联网的普及和电子商务的快速发展&#xff0c;消费者的购物习惯发生了显著变化。越来越多的消费者倾向于在线购物&#xff0c;享受便捷、丰富的选择和个性化的购物体验…

基数排序(代码+注释)

#include <stdio.h> #include <stdlib.h>// 获取数组中的最大值 int GetMax(int* a, int n) {int max a[0];for (int i 1; i < n; i) {if (a[i] > max) {max a[i];}}return max; }// 对数组按照某个位数进行计数排序 void CountingSortForRadix(int* a, i…

esp8266 编译、烧录环境搭建

一、准备 xtensa-lx106-elf-gcc8-4-0-esp-2020r3-win32下载&#xff1a;点击跳转 MSYS2 压缩包文件&#xff1a; 固件烧录工具&#xff1a;点击跳转 esp8266源码地址&#xff1a;点击跳转 二、搭建编译环境 1、在D盘创建一个ESP8266目录&#xff0c;解压MSYS2.zip到里面&a…

【Delphi】modbus-TCP 协议库

在日常开发中&#xff0c;也会遇到使用modbus的部件&#xff0c;比如温度控制器、读卡器等等&#xff0c;那么使用Delphi开发&#xff0c;也就必须遵守modbus-TCP协议&#xff0c;如果自己使用TCP控件写也没有问题&#xff0c;不过如果有开源的三方库&#xff0c;别人已经调试过…

AgGrid 组件封装设计笔记:自定义 icon 以及每个 icon 的点击事件处理

文章目录 问题目前解决效果 v1思路 目前解决效果 v0思路 代码V1 问题 自己封装的 AgGrid 如何自定义传递 icon &#xff0c;以及点击事件的处理&#xff1f; 目前解决效果 v1 思路 目前解决效果 v0 思路 一张图片说明一下 代码 V1 父组件使用 <template><MyPageL…

MySQL——MySQL 日志

文章目录 MySQL 文件介绍二进制日志&#xff08;bin log&#xff09;概念binlog 日志的三种格式两阶段提交binlog 落盘更新语句执行流程 慢查询日志&#xff08;slow query log&#xff09;重做日志&#xff08;redo log&#xff09;redo log 日志的理解WAL 技术redo log 的工作…

解决git did not exit cleanly (exit code 128)问题

解决 git did not exit cleanly &#xff08;exit code 128&#xff09;问题 1、错误描述2、解决方法2.1 方法一2.2 方法二 1、错误描述 使用TortoiseGit进行操作时&#xff0c;总是提示下述错误。 2、解决方法 2.1 方法一 打开 TortoiseGit -> Settings 点击 Network&…

家校通小程序实战教程05教师登录

目录 1 搭建角色选择页面2 设置登录方法3 创建加入班级页面4 创建教师主页页面5 完善登录方法总结 我们上一篇开发了教师管理的后台功能&#xff0c;后台一般是给管理员提供的。教师一般是使用小程序开展各类业务&#xff0c;本篇介绍一下教师如何通过小程序登录。 1 搭建角色选…

yolov5 解决:export GIT_PYTHON_REFRESH=quiet

当我们在第一次运行YOLOv5中的train.py程序时&#xff1a;可能会出现以下报错&#xff1a; This initial warning can be silenced or aggravated in the future by setting the $GIT_PYTHON_REFRESH environment variable. Use one of the following values: - quiet|q|silen…

neo4j如何存储关于liquidity structure的层次和关联结构

在 Neo4j 中存储关于流动性结构&#xff08;liquidity structure&#xff09;的层次和关联结构非常适合&#xff0c;因为 Neo4j 是一个基于图的数据库&#xff0c;能够自然地建模和存储复杂的关系和层次结构。下面是如何在 Neo4j 中设计和实现这样的数据模型的详细步骤和示例。…

SpringBoot高级-底层原理

目录 1 SpringBoot自动化配置原理 01-SpringBoot2高级-starter依赖管理机制 02-SpringBoot2高级-自动化配置初体验 03-SpringBoot2高级-底层原理-Configuration配置注解 04-SpringBoot2高级-底层原理-Import注解使用1 05-SpringBoot2高级-底层原理-Import注解使用2 06-S…

C++模拟堆

模板题目 图片来源Acwing 堆的基础知识 代码实现 #include<iostream> #include<algorithm>using namespace std;const int N 1e5 10; int a[N]; int n, m;void down(int u) {int t u;if (2 * u < n && a[2 * u] < a[u]){t 2 * u;}if (2 * u …

RNACOS:用Rust实现的Nacos服务

RNACOS是一个使用Rust语言开发的Nacos服务实现&#xff0c;它继承了Nacos的所有核心功能&#xff0c;并在此基础上进行了优化和改进。作为一个轻量级、快速、稳定且高性能的服务&#xff0c;RNACOS不仅包含了注册中心、配置中心和Web管理控制台的功能&#xff0c;还支持单机和集…

Flink常见面试题

1、Flink 的四大特征&#xff08;基石&#xff09; 2、Flink 中都有哪些 Source&#xff0c;哪些 Sink&#xff0c;哪些算子&#xff08;方法&#xff09; 预定义Source 基于本地集合的source&#xff08;Collection-based-source&#xff09; 基于文件的source&#xff08;…

BERT和RoBERTa;双向表示与单向的简单理解

目录 BERT和RoBERTa大型预训练语言模型 BERT的原理 RoBERTa的原理 举例说明 双向表示与单向的简单理解 除了预训练语言模型,还有什么模型 一、模型类型与结构 二、训练方式与数据 三、应用场景与功能 四、技术特点与优势 BERT和RoBERTa大型预训练语言模型 BERT(Bi…

OpenAI 推出了 Canvas 和 SearchGPT

今天的故事从 ChatGPT 推出的 Canvas 和 SearchGPT 开始。 ©作者|Ninja Geek 来源|神州问学 ChatGPT 在最近推出了令人兴奋的 Canvas 功能&#xff0c;Canvas 不仅带来了 ChatGPT 界面上的变化&#xff0c;还完全改变了人们撰写文档和书写代码的体验&#xff01; Canvas…

CentOS 9 配置静态IP

文章目录 1_问题原因2_nmcli 配置静态IP3_使用配置文件固定IP4_重启后存在的问题5_nmcli 补充 1_问题原因 CentOS 7 于 2014年6月发布&#xff0c;基于 RHEL 7&#xff0c;并在 2024年6月30日 结束维护。 CentOS 9 作为目前的最新版本&#xff0c;今天闲来闲来无事下载下来后…

ProjectSend 身份认证绕过漏洞复现(CVE-2024-11680)

0x01 产品描述: ProjectSend 是一个开源文件共享网络应用程序,旨在促进服务器管理员和客户端之间的安全、私密文件传输。它是一款相当流行的应用程序,被更喜欢自托管解决方案而不是 Google Drive 和 Dropbox 等第三方服务的组织使用。0x02 漏洞描述: ProjectSend r1720 之前…

【Vulkan入门】01-列举物理设备

目录 先叨叨git信息主要逻辑VulkanEnvEnumeratePhysicalDevices()PrintPhysicalDevices() 编译并运行程序 先叨叨 上一篇已经创建了VkInstance&#xff0c;本篇我们问问VkInstance&#xff0c;在当前平台上有多少个支持Vulkan的物理设备。 git信息 repository: https://gite…

小家电出海,沃丰科技助力保障售后服务的及时性与高效性

随着全球化步伐的加快&#xff0c;小家电行业也逐渐迈向国际市场&#xff0c;面向全球消费者提供服务。然而&#xff0c;跨国界的销售和服务挑战也随之而来&#xff0c;尤其是售后服务的及时性与高效性成为了企业亟需解决的问题。沃丰科技凭借其全渠道在线客服、工单系统和视频…