geoserver解析元数据获取图层相关参数

需求:

1、通过geoserver地址获取所有图层名称;

2、加载wms服务,实现自动定位。

获取图层名和范围视图有两种思路:

1、调取geoserver的rest接口。缺点就是需要验证登录。

rest接口官方文档:GeoServer API Docs

2、通过GetCapabilities接口解析元数据。元数据是xml格式的,在JavaScript中,可以使用DOM解析器来解析XML文本数据

为了简单起见选择第二种。话不多说,直接上代码:

// 使用fetch发送GetCapabilities请求
fetch(`/geoserver/hd/wms?service=WFS&version=1.0.0&request=GetCapabilities`)
  .then(response => response.text())
  .then(text => new DOMParser().parseFromString(text, 'text/xml'))
  .then(xml => {
    const layerList = []
    // 解析XML获取图层信息
    const featureTypeList = xml.childNodes[0].getElementsByTagName('FeatureTypeList')[0].getElementsByTagName('FeatureType')
    for (let i = 0; i < featureTypeList.length; i++) {
      const element = featureTypeList[i];
      const layerName = element.getElementsByTagName('Name')[0].textContent; // 获取图层名称
      const minx = element.getElementsByTagName('LatLongBoundingBox')[0].getAttribute('minx')
      const miny = element.getElementsByTagName('LatLongBoundingBox')[0].getAttribute('miny')
      const maxx = element.getElementsByTagName('LatLongBoundingBox')[0].getAttribute('maxx')
      const maxy = element.getElementsByTagName('LatLongBoundingBox')[0].getAttribute('maxy')
      layerList.push({
        layerName,
        minx,
        miny,
        maxx,
        maxy
      })
    }
    console.log(layerList) // 打印图层信息
  })
  .catch(error => console.error('Error fetching GetCapabilities:', error));

获取结果如下:

通过请求获取XML数据的字符串。然后,使用DOMParserparseFromString方法将这个字符串解析成一个XML文档对象。接着,使用getElementsByTagName方法找到名为'节点名称'的元素,并通过textContent属性获取其文本内容。

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

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

相关文章

C++(标准输入输出流、命名空间、string字符串、引用)

C特点及优势 &#xff08;1&#xff09;实现了面向对象&#xff0c;在高级语言中&#xff0c;处理运行速度是最快&#xff1b; &#xff08;2&#xff09;非常灵活&#xff0c;功能非常强大&#xff0c;相对于C的指针优势&#xff0c;C的优势为性能和类层次结构&#x…

书生营 L0G4000 玩转HF/魔搭/魔乐社区

模型下载 在codespace上给环境装包&#xff0c;按照教材即可 运行后下载成功 建立下载json文件 新建下载internlm2_5-chat-1_8b的json文件 运行结果 基本上没啥问题&#xff0c;照着教程来就行 模型上传&#xff08;可选&#xff09; push的时候需要先认证token 最后的…

人工智能+医学

医学影响的内型&#xff1a;(X光片、计算机断层扫描、磁共振成像、超声波&#xff09; ITK snap医学图像读取 医学影像领域常见任务: 图像分类、语义分割、疾病预测、目标检测、图像配准、图像生成(应用少)、图像增强、生成放射学报告。 需要有很强的可解释…

Xshell上Linux的基础指令

目录 1、Xshell的使用 2、Linux的常用命令 2.1 位置跳转命令 1、ls 2、cd 3、pwd 2.2 文件操作 1、touch 2、cat 3、echo 4、vim 2.3 目录操作 1、mkdir 2、rm 2.4 移动操作 1、mv 2、cp 2.5 命令手册 2.6 查找操作 2.7 进程展示 2.8 网络信息 3、搭建w…

JS | 详解图片懒加载的6种实现方案

目录 一、什么是懒加载&#xff1f; 二、为什么要懒加载&#xff1f; 三、图片懒加载的实现原理 四、图片懒加载实现方式 3.1 方案一&#xff1a;设置 img 标签属性 loading“lazy” 3.2 方案二&#xff1a;利用JS监听scroll滚动事件 3.3 方案三&#xff1a;利用元素的…

Aatrox-Bert-VITS2部署指南

一、模型介绍 【AI 剑魔 ①】在线语音合成&#xff08;Bert-Vits2&#xff09;&#xff0c;将输入文字转化成暗裔剑魔亚托克斯音色的音频输出。 作者&#xff1a;Xz 乔希 https://space.bilibili.com/5859321 声音归属&#xff1a;Riot Games《英雄联盟》暗裔剑魔亚托克斯 …

Redis——缓存

目录 前言 一、缓存基本概念 1.概念 2.二八定律 二、使用 Redis 作为缓存 三、缓存的更新策略 1.定期生成 2.实时生成 四、Redis 内存淘汰机制 1.通用淘汰策略 &#xff08;1&#xff09;FIFO &#xff08;2&#xff09;LRU &#xff08;3&#xff09;LFU &#…

机器学习在智能水泥基复合材料中的应用与实践

在人工智能与复合材料技术融合的背景下&#xff0c;复合材料的研究和应用正迅速发展&#xff0c;创新解决方案层出不穷。从复合材料性能的精确预测到复杂材料结构的智能设计&#xff0c;从数据驱动的材料结构优化到多尺度分析&#xff0c;人工智能技术正以其强大的数据处理能力…

Linux 权限的理解

内容摘要 本文内容包括shell的运行原理&#xff0c;包括外壳程序的原理、理解、和意义&#xff0c;以及从两个方面对于权限的理解&#xff08;人和事物的属性&#xff09;、修改文件的权限&#xff0c;包括修改文件的拥有者、修改文件拥有者所在的组的用户以及修改文件的三类用…

【linux】线程(二)

10. pthread_t 类型 注意&#xff1a; 每一个线程的库级别的tcb的起始地址&#xff0c;就是线程的 tid每一个线程都有自己独立的栈结构线程和线程之间&#xff0c;也是可以被其他线程看到并访问的&#xff08;比如全局函数&#xff09; 代码 如果想要进程拥有私人的全局变量(即…

关于武汉芯景科技有限公司的限流开关芯片XJ6288开发指南(兼容SY6288)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 1.EN引脚控制IN和OUT引脚的通断 2.OCB引脚指示状态 3.过流自动断开

C++ [项目] 恶魔轮盘赌

现在才发现C游戏的支持率这么高&#xff0c;那就发几篇吧 零、前情提要 此篇是我与 同学的共创,他负责写人,我负责写机,简称人机, 不过有一点小插曲…… 一、基本介绍 支持Dev-C5.11版本(务必调为英文输入法),基本操作看游戏里的介绍,怎么做的……懒得说,能看懂就看注释,没有…

Vue3结合vue-plugin-hiprint实现自定义打印模板设计与布局

简介 在现代Web应用开发中&#xff0c;打印功能是不可或缺的一部分&#xff0c;尤其是在需要输出标准化文档的场景下。本文将详细介绍如何在Vue3项目中利用vue-plugin-hiprint插件实现一个可定制的打印模板设计器&#xff0c;并通过具体示例来展示其配置与使用方法。 技术栈 …

Python如何导入模块及常见的导入方法

&#x1f600;前言 在 Python 编程中&#xff0c;模块&#xff08;Module&#xff09;是非常重要的工具。它们可以帮助我们将代码进行逻辑分割和复用&#xff0c;从而提高代码的可读性和可维护性。本文将详细介绍如何导入模块、使用常见的导入方法&#xff0c;并简要介绍一些常…

[分享] SQL在线编辑工具(好用)

在线SQL编写工具&#xff08;无广告&#xff09; - 在线SQL编写工具 - Web SQL - SQL在线编辑格式化 - WGCLOUD

若依微服务15 - RuoYi-Vue3 实现前端独立运行

正文开始&#xff1a; RuoYi-Vue3 使用 Vue3 Element Plus Vite 技术栈。 GitHub 开源地址&#xff1a;https://github.com/yangzongzhuan/RuoYi-Vue3 本文介绍使用若依提供的在线后端接口&#xff0c;仅启动前端项目并进行界面开发&#xff0c;而无需启动后端服务。 一、克隆…

Vue笔记-浏览器窗口改变时,重新计算表格高度并设置

当窗口大小改变时&#xff0c;你监听 window 对象的 resize 事件&#xff0c;然后在事件处理程序中重新计算表格的高度。在 Vue 中&#xff0c;可以在组件中通过 created 生命周期钩子来添加事件监听器&#xff0c;然后在组件销毁时移除事件监听器。 如下vue代码&#xff1a; …

33 类与对象 · 下

目录 一、构造函数的深入 &#xff08;一&#xff09;构造函数的其他特点 &#xff08;二&#xff09;使用例 1、Date类与Time类显示写 2、Date类与Time类写一部分 &#xff08;三&#xff09;总结 &#xff08;四&#xff09;初始化顺序小题目 二、类型转化 &#xff…

Linux Redis查询key与移除日常操作

维护老项目Express node 编写的后端程序、有这么一个方法、没有设置redis过期时间&#xff08;建议设置过期时间&#xff0c;毕竟登录生产服务器并不是每个人都有权限登录的&#xff01;&#xff01;&#xff01;&#xff09;。如果变动只能通过登录生产服务器、手动修改… 于…

@Autowired和@Resource的用法与区别

前言&#xff1a; Autowired 和 Resource 来自不同的“父类”&#xff0c;其中 Autowired 是 Spring 定义的注解&#xff0c;而 Resource 是 Java 定义的注解&#xff0c;它来自于 JSR-250&#xff08;Java 250 规范提案&#xff09;。当它们的实现类只有一个时&#xff0c;那…