Cesium加载Supermap的wmts服务
最近使用cesium 加载supermap的wmts 服务,多次遇到加载异常与白页面问题,纠结好久最后才搞定[特此记录]
1、首先找到方法加载wmts 的api 文档
官方提示使用WebMapTileServiceImageryProvider加载wmts

2、然后编辑加载代码
//1.新建ImageryProviderlet wmtsImageryProvider = new Cesium.WebMapTileServiceImageryProvider({url: 'http://localhost:8080/iserver/services/agscachev-Layers/wmts', //服务地址,如:'http://localhost:8080/geoserver/gwc/service/wmts'layer: 'Layers', //图层名称,如:'tasmania'style: 'default',format: 'image/png',tileMatrixSetID: 'ChinaPublicServices_Layers',tileMatrixLabels: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"],tilingScheme: new Cesium.GeographicTilingScheme({ numberOfLevelZeroTilesX: 2,numberOfLevelZeroTilesY: 1}),});viewer.imageryLayers.addImageryProvider(wmtsImageryProvider);
【重点】其中查找layer 、tileMatrixSetID、format相当关键,当初就是因为这个参数没对一直400
还有一个是tilingScheme一定要给,否则加载后一直白页面
手动查找方法:网页打开http://localhost:8080/iserver/services/agscachev-Layers/wmts如下分别找到layer 、tileMatrixSetID、format值填入以上方法中

3、测试加载结果

测试wmts 已经加载成功,但是手动查找wmts 参数的确不利于生产,那有没有自动获取参数的方法呢?答案时有的,我们可以使用大佬的 xml-js吧xml 解析为json 获取想要的参数即可
4、自动解析xml
我们参考这个博客将xml解析为json建一个util.js
const xmlContent = require("xml-js");
/*** 将xml转换为json*/
const TransferXmlToJson = {// 把_text属性直接改为值,见xml-js issueRemoveJsonTextAttribute(value, parentElement) {try {var keyNo = Object.keys(parentElement._parent).length;var keyName = Object.keys(parentElement._parent)[keyNo - 1];parentElement._parent[keyName] = value;} catch (e) {}},// 以文本方式获取xml文件getWMTSParamsFromUrl(xmlUrl) {var option = {ignoreDeclaration: true,compact: true,trim: true,ignoreInstruction: true,ignoreComment: true,ignoreCdata: true,ignoreDoctype: true,};return new Promise((resolve, reject) => {fetch(xmlUrl).then((res) => res.text()).then((res) => {try {// 解析xml为JS对象var xmlObj = xmlContent.xml2js(res, { ...option, textFn: this.RemoveJsonTextAttribute });var info = this.getWMTSInfo(xmlObj);resolve(info);} catch (e) {console.error(e);resolve(null);}}).catch((e) => {console.error(e);resolve(null);});});},// 获取服务需要的参数getWMTSInfo(obj) {const WMTSXML = "http://www.opengis.net/wmts/1.0";const wmstList = [];if (obj.Capabilities) {const { _attributes, Contents } = obj.Capabilities;if (_attributes?.xmlns !== WMTSXML) {return;}const { Layer, TileMatrixSet } = Contents;if (!Layer || !TileMatrixSet) {return;}const info = {url: null,layer: null,style: null,tileMatrixSetID: null,format: null,tileMatrixLabels: null,crs: null,center: null,};const tileSet = TileMatrixSet[0] || TileMatrixSet;info.tileMatrixSetID = tileSet["ows:Identifier"];info.crs = tileSet["ows:SupportedCRS"];info.tileMatrixLabels = tileSet.TileMatrix.map((s) => s["ows:Identifier"]);let LayerInfo = Layer;if (!Array.isArray(LayerInfo)) {LayerInfo = [LayerInfo];}LayerInfo.forEach((layer) => {let resourceURL = layer?.ResourceURL;if (!Array.isArray(resourceURL)) {resourceURL = [resourceURL];}info.format = "image/png" || layer?.Format;const resourceURLItem = resourceURL.filter((s) => s._attributes.resourceType === "tile");let pngResource = resourceURLItem.find((s) => s._attributes.format.endsWith("png")) || resourceURLItem[0];if (pngResource) {info.url = pngResource?._attributes?.template;info.format = pngResource?._attributes?.format;}info.layer = layer["ows:Identifier"];info.style = layer.Style["ows:Identifier"];const wgsBox = layer["ows:WGS84BoundingBox"];const lower = wgsBox["ows:LowerCorner"].split(" ").map((s) => Number(s));const upper = wgsBox["ows:UpperCorner"].split(" ").map((s) => Number(s));const center = [lower[0] + (upper[0] - lower[0]) / 2, lower[1] + (upper[1] - lower[1]) / 2];info.center = center;wmstList.push({ ...info });});return wmstList;}},
};
然后直接调用即可
import { TransferXmlToJson } from '@/utils/index'const serviceUrl ='http://localhost:8080/iserver/services/agscachev-Layers/wmts';TransferXmlToJson.getWMTSParamsFromUrl(serviceUrl).then((rxml) => {if (rxml) {console.log("获取解析结果:",rxml);}});
🆗现在任何wmts服务都可以自动读取参数加载服务了
相关文章:
Cesium加载Supermap的wmts服务
最近使用cesium 加载supermap的wmts 服务,多次遇到加载异常与白页面问题,纠结好久最后才搞定[特此记录] 1、首先找到方法加载wmts 的api 文档 官方提示使用WebMapTileServiceImageryProvider加载wmts 2、然后编辑加载代码 //1.新建ImageryProviderlet…...
C/C++:C/C++在大数据时代的应用,以及C/C++程序员未来的发展路线
目录 1.C/C在大数据时代的应用 1.1:C/C数据处理 1.2:C/C数据库 1.3:C/C图像处理和计算机视觉 1.3.1:导读 2.C/C程序员未来的发展路线 2.1:图导 1.C/C在大数据时代的应用 C/C在大数据时代中仍然是一种被广泛应用的编…...
linux RabbitMQ-3.8.5 安装
软件版本操作系统CentOS Linux release 7.9.2009erlangerlang-23.0.2-1.el7.x86_64rabbitMQrabbitmq-server-3.8.5-1.el7 RabbitMQ的安装首先需要安装Erlang,因为它是基于Erlang的VM运行的。 RabbitMQ安装需要依赖:socat和logrotate,logrotate操作系统已经存在了&…...
单链表Single-LinkList
0、节点结构体定义 typedef struct LNode{int data;struct LNode *next;} Lnode, *LinkList; 1、初始化 bool InitList(LinkList &L) //初始化 {L new LNode;if(!L){return false;}L->next NULL;return true; } 2、创建 (1)头插法 void Cr…...
AI嵌入式全景:各厂商、系列和开发工具的综合概览
要看几个方面 1 算力: 2 支持何种模型: 3 是否支持可视化的窗口系统: 一般而言各个平台均采用linux操作系统,官方提供对应SDK,安装好后可使用硬件加速资源。 而且如果要使用其硬件加速,一般都要完成模型转…...
mysql Left Join on条件 where条件的用法区别
数据准备 SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id; 执行结果 SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id and t2.localbeijing; SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id where t2.localbeijing…...
Redis中的淘汰策略
前言 本文主要说明在Redis面临key过期和内存不足的情况时,可以采用什么策略进行解决问题。 Redis中是如何应对过期数据的 正如我们知道的Redis是基于内存的、单线程的一个中间件,在面对过期数据的时候,Redis并不会去直接把它从内存中进行剔…...
MyBatis进阶:掌握MyBatis动态SQL与模糊查询、结果映射,让你在面试中脱颖而出!!
目录 一、引言 二、MyBatis动态SQL 2.1.if元素使用 2.2.foreach元素使用 三、MyBatis模糊查询 ①使用#{字段名} ②使用${字段名} ③使用concat{%,#{字段名},%} 总结 四、MyBatis结果映射 4.1.案例演示 4.1.1.resultType进行结果映射 4.1.2.resultMap进行结果映射 …...
C++ 写入txt文件内容并追加内容
咨询通义千问的“C 写入txt文件内容并追加内容”: 可以使用ofstream类来写入txt文件内容。若想追加内容,可以使用ios::app标志来创建输出流对象,然后在写入时将其设置为ios::app。以下是一个示例代码: #include <iostream>…...
Leetcode---359周赛
题目列表 2828. 判别首字母缩略词 2829. k-avoiding 数组的最小总和 2830. 销售利润最大化 2831. 找出最长等值子数组 一、判断首字母缩略词 纯模拟,代码如下 class Solution { public:bool isAcronym(vector<string>& words, string s) {string tmp…...
Keras三种主流模型构建方式:序列模型、函数模型、子类模型开发实践,以真实烟雾识别场景数据为例
Keras和PyTorch是两个常用的深度学习框架,它们都提供了用于构建和训练神经网络的高级API。 Keras: Keras是一个高级神经网络API,可以在多个底层深度学习框架上运行,如TensorFlow和CNTK。以下是Keras的特点和优点: 优点…...
objective-v 获取iPhone系统当前时间字符串适配12小时制和24小时制
我们最开始获取系统当前时间,如下,这种方式存在一个问题,当iPhone关闭了24小时制时,获取的时间格式是:iPhone11上:20230822下午210568760;iPhone7 plus上:2023082240043851 PM&#…...
并查集及其简单应用
文章目录 一.并查集二.并查集的实现三.并查集的基本应用 一.并查集 并查集的逻辑结构:由多颗不相连通的多叉树构成的森林(一个这样的多叉树就是森林的一个连通分量) 并查集的元素(树节点)用0~9的整数表示,并查集可以表示如下: 并查集的物理存储结构:并查集一般采用顺序结构实…...
基于web的服装商城系统java网上购物商店jsp源代码mysql
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于web的服装商城系统 系统有1权限:前台…...
.NET Core发布到IIS
项目介绍 1、开发工具Visual Studio 2017,语言C#,SQL SERVER,WIN10 2、本地IIS,手机上或其他用户在和本地在同一个局域网内访问,同时要把防火墙关掉 3、IIS全名Internet Information Services,用来发布网站 先决条件 安…...
Spring的基本概念
前言 Spring 究竟是什么?其实Spring简单来说就是一个包含众多工具方法的IOC容器。 那么什么是IOC呢? IoC Inversion of Control 翻译成中⽂是“控制反转”的意思. 既然Spring 是⼀个IoC(控制反转)容器,重点还在“容…...
设计模式之原型模式
文章目录 一、介绍二、实现步骤三、案例四、应用五、细胞分裂六、改造细胞分裂逻辑七、总结 一、介绍 原型模式属于创建型设计模式,用于创建重复的对象,且同时又保证了性能。 该设计模式的好处是将对象的创建与调用方分离。 其目的就是**根据一个对象…...
正则表达式在网页处理中的应用四则
正则表达式在网页处理中的应用四则 正则表达式(Regular Expression)为字符串模式匹配提供了一种高效、方便的方法。几乎所有高级语言都提供了对正则表达式的支持,或者提供了现成的代码库供调用。本文以ASP环境中常见的处理任务为例,介绍正则表达式的应用技巧。 一、检验密…...
ping使用方法
文章目录 1、Ping的基础知识2、Ping命令详解3、怎样使用Ping这命令来测试网络连通?4、如何用Ping命令来判断一条链路好坏?5、对Ping后返回信息的分析1.Request timed out2.Destination host Unreachable 1、Ping的基础知识 ping命令相信大家已经再熟悉不…...
“心理健康人工智能产学研创新联盟”揭牌成立|深兰科技
8月14日上午,“2023树洞救援年会”在上海举行,会上举行了“心理健康人工智能产学研创新联盟”的签约和揭牌仪式。“树洞行动救援团”创始人深兰科技科学院智能科学首席科学家、荷兰阿姆斯特丹自由大学人工智能系终身教授黄智生,深兰科技集团创…...
解锁B站视频下载:5个高效技巧让你轻松获取心仪内容
解锁B站视频下载:5个高效技巧让你轻松获取心仪内容 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/B…...
Axure实战:用IFrame+JS搞定父子页面菜单联动(附完整代码)
Axure高级交互设计:基于IFrame与JavaScript的菜单联动技术解析 在原型设计工具中实现父子页面间的动态交互一直是用户体验设计师面临的挑战。Axure作为行业领先的原型设计工具,虽然提供了丰富的内置交互功能,但在处理复杂场景时往往需要借助外…...
Logisim实战:8位可控加减法电路设计与溢出检测
1. 从零开始理解8位可控加减法电路 第一次接触数字电路设计的朋友可能会觉得"8位可控加减法电路"听起来很高深,其实它的核心原理就像我们小时候用的算盘。想象一下,你有一个8档的算盘,每档只能表示0或1(对应算珠的上或下…...
HarmonyOS6 半年磨一剑 - RcCheckbox 组件事件体系与交互逻辑
文章目录前言一、点击处理链1.1 核心点击处理函数1.2 两个点击入口二、三事件分层设计2.1 三个事件的对比2.2 事件使用示例三、labelDisabled 局部禁止机制3.1 设计意图3.2 适用场景四、RcCheckboxGroup 的数量限制拦截4.1 min/max 拦截机制4.2 数量限制示例总结前言 一个看似…...
不用pip也能装!3种方法在Pycharm中配置wxPython(含离线安装技巧)
突破网络限制:PyCharm中wxPython的3种高阶安装方案 在企业开发环境中,网络访问限制常常成为Python包管理的"拦路虎"。特别是像wxPython这样包含二进制扩展的GUI库,传统pip安装方式在离线环境下几乎束手无策。本文将揭秘三种无需依赖…...
不止于教程:用QGIS 3.30 + PyQt5从零打造一个极简版GIS桌面应用
从零构建GIS桌面应用:QGIS 3.30与PyQt5深度整合实战 当我们需要开发一个轻量级地理信息系统时,QGIS的Python API提供了强大而灵活的选择。不同于简单的脚本编写,将QGIS作为引擎嵌入到自定义PyQt5应用中,能够实现高度定制化的GIS解…...
如何构建Min浏览器插件:从零开始的可扩展架构指南
如何构建Min浏览器插件:从零开始的可扩展架构指南 【免费下载链接】min A fast, minimal browser that protects your privacy 项目地址: https://gitcode.com/gh_mirrors/mi/min Min浏览器作为一款注重隐私保护的轻量级浏览器,其插件系统为开发者…...
25619+ASMR资源一键获取:让音频收藏效率提升10倍的智能下载工具
25619ASMR资源一键获取:让音频收藏效率提升10倍的智能下载工具 【免费下载链接】asmr-downloader A tool for download asmr media from asmr.one(Thanks for the asmr.one) 项目地址: https://gitcode.com/gh_mirrors/as/asmr-downloader 在数字音频时代&am…...
银河麒麟V4.0.2-sp4系统初始化实战:网络、DNS与软件源一站式配置指南
1. 银河麒麟V4.0.2-sp4网络配置实战 刚装完系统的银河麒麟服务器就像刚交房的新家,水电网络都没通。作为系统管理员,配置网络就是给服务器"通水电"的第一步。我遇到过不少新手直接照着网上教程操作,结果把网卡配置搞乱导致服务器失…...
Zotero效率翻倍!Zutilo插件保姆级配置指南(附我常用的10个快捷键方案)
Zotero效率革命:用Zutilo插件打造键盘流文献工作流 每天面对数百篇文献,你是否厌倦了在鼠标和键盘间反复切换?科研老手都知道,真正的效率提升往往来自那些能减少手指移动距离的微小优化。Zutilo正是Zotero生态中那个被严重低估的…...
