详解LeafLet中如何展示GeoServer发布的图层组

news2024/12/28 21:50:51

目录

前言

一、关于图层组

1、使用图层图组的好处

2、创建图层组

二、在Leaflet中展示图层组

1、新建Html模板框架

2、绑定地图map和底图设置

3、绑定图层组

总结


前言

        在之前的博文中,曾经重点介绍如何使用LeafLet叠加Geoserver wms图层到已有底图的方法 ,这里采用的办法是将单个wms图层直接叠加到Leaflet中。如果场景中需要展示的图层数量不多,我们可以使用这种方式,在Leaflet前端组件中绑定多个即可。如果需要展示的图层较多,那么对于前端组件来说无疑是一种灾难。

        那如何解决这种需求呢?本文提供一种思路,就是基于Geoserver,在GeoServer中,将需要统一展示的图层放在一个图层组中,每个图层由自己独立的样式来进行控制。通过图层组的统一设置,合并两个图层,对于Leaflet前端来说,依然是加载一个图层,从而减少前端的代码量。本文将详细介绍GeoServer中的图层组,以及如何在GeoServer中管理图层组,最后介绍如何使用Leaflet进行图层组数据的加载。

一、关于图层组

        Geoserver图层组可以将多个图层组织在一起,方便地管理和展示这些图层,从而提高地图服务的效率和可用性。以下是Geoserver图层组的优缺点介绍:

1、使用图层图组的好处

  1. 管理方便:图层组可以将多个图层组织在一起,方便地管理和展示这些图层。

  2. 便于使用:图层组可以让用户轻松地选择需要的图层,提高地图服务的可用性。

  3. 提高效率:图层组可以减少地图服务的请求次数,提高地图服务的效率。

  4. 界面友好:图层组的展示界面通常比单个图层更美观、更易于使用。

2、创建图层组

        登录GeoServer的Web端管理界面,在输入登录密码后可以看到以下的管理界面:

         在左侧的菜单中,点击图层组操作按钮,进入图层组的管理操作页面。

         在这里可以完成对图层组的新增、删除、查看已有图层图的信息。在管理列表页面可以看到图层组的名字,所属的工作区,以及是否可用。其中工作区是用于区分不同的工作空间的,即相同名字的图层组不能在一个工作区中。

        点击添加新图层组,进入图层的创建操作。

 注意,这里需要将要展示的图层添加到图层组中,同时设置合适的坐标参考系,还有图层的展示样式。关于图层的SLD样式,可以看之前的博客,有相关的介绍,在此不再赘述。

         注意,在这里由于图层图已经设置了工作区,因此只能将一个工作区的图层合成一个图层图,不支持多工作区发布。

         设置完成后,即完成图层组的编辑。在Geoserver中,采用默认的OpenLayers组件进行图层图组的预览,效果如下:

二、在Leaflet中展示图层组

1、新建Html模板框架

<!DOCTYPE html>
<html>
<head>
	<title>geoserver 图层group展示</title>
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<link rel="shortcut icon" type="image/x-icon" href="docs/images/favicon.ico" />
	<link rel="stylesheet" href="/2d/leaflet/leaflet.css" />
    <script src="/2d/leaflet/leaflet.js?v=1.0.0"></script>
</head>
<body>
<div id="mapid" style="width: 100%; height: 600px;"></div>
<script>

</body>
</html>

2、绑定地图map和底图设置

var mymap = L.map('mapid').setView([29.052934, 104.0625], 5);

	L.tileLayer('http://localhost:8086/data/basemap_water/{z}/{x}/{y}.png', {
		maxZoom: 16,
		attribution: '夜郎king多图层展示 GeoServer多图层展示',
		id: 'mapbox/streets-v11',
		crs:L.CRS.EPSG3857,
		tileSize: 512,
		zoomOffset: -1
	}).addTo(mymap);

        在这里,先将地图和底图进行绑定。

3、绑定图层组

        图层组的绑定和单wms的绑定方式差不多的,都是通过Leaflet的api进行图层绑定。关键代码代码如下:

//加载wms服务的图层
	var dtLineLayer = L.tileLayer.wms('http://localhost:8083/geoserver/gisdev/wms', {
			layers: 'gisdev:group_bqx',
			format: 'image/png',
			transparent: true
		}
	);
    dtLineLayer.addTo(mymap);

        经过以上的步骤,基本完成图层组的加载,我们通过nginx将静态网页发布后,在浏览器中输入访问地址后可以看到如下的界面。

         完整的网页代码如下所示:

<!DOCTYPE html>
<html>
<head>
	<title>geoserver 图层group展示</title>
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<link rel="shortcut icon" type="image/x-icon" href="docs/images/favicon.ico" />
	<link rel="stylesheet" href="/2d/leaflet/leaflet.css" />
    <script src="/2d/leaflet/leaflet.js?v=1.0.0"></script>
</head>
<body>
<div id="mapid" style="width: 100%; height: 600px;"></div>
<script>
	var mymap = L.map('mapid').setView([29.052934, 104.0625], 5);

	L.tileLayer('http://localhost:8086/data/basemap_water/{z}/{x}/{y}.png', {
		maxZoom: 16,
		attribution: '夜郎king多图层展示 GeoServer多图层展示',
		id: 'mapbox/streets-v11',
		crs:L.CRS.EPSG3857,
		tileSize: 512,
		zoomOffset: -1
	}).addTo(mymap);

	//加载wms服务的图层
	var dtLineLayer = L.tileLayer.wms('http://localhost:8083/geoserver/gisdev/wms', {
			layers: 'gisdev:group_bqx',
			format: 'image/png',
			transparent: true
		}
	);
    dtLineLayer.addTo(mymap);

</script>

</body>
</html>

        温馨提示,以上代码比如投。影坐标系采用默认WGS84,如果您的底图不是这个格式,请进行修改。

总结

        以上就是本文的主要内容,本文将详细介绍GeoServer中的图层组,以及如何在GeoServer中管理图层组,最后介绍如何使用Leaflet进行图层组数据的加载。在最后,关于使用图层组的一些场景,需要进行抉择。因为图层组有以下的一些缺点,如有遗漏,敬请补充:

缺点:

  1. 维护成本高:图层组可能需要更多的维护和管理,包括图层更新、权限设置、数据源管理。

  2. 可能存在性能问题:当图层组中包含大量图层时,可能会影响地图服务的性能。

  3. 可能存在安全问题:不正确的权限设置可能导致图层组中某些图层被未经授权用户访问。

  4. 可能存在兼容性问题:某些地图客户端可能不支持图层组,无法正常使用相关地图服务。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习复习6

机器学习复习 1 - 在机器学习的背景下&#xff0c;什么是诊断(diagnostic)&#xff1f; A. 这指的是衡量一个学习算法在测试集(算法没有被训练过的数据)上表现如何的过程 B. 迅速尝试尽可能多的不同方法来改进算法&#xff0c;从而看看什么方法有效 C. 机器学习在医疗领域的应用…

上手vue2的学习笔记1之了解前端三剑客

纯小白学习前端开发&#xff0c;找学习资料也花费了一些时间&#xff0c;后续配置环境&#xff0c;也走了很多弯路&#xff0c;这里梳理一下这几天的学习资料&#xff0c;做一个简单的总结。 1.初步了解vue Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&a…

CountDownLatch基本使用及原理

CountDownLatch基本使用及原理 一、CountDownLatch简介二、CountDownLatch类的继承关系1. AbstractQueuedSynchronizer: 用于构建锁和同步器的框架。2. Sync: CountDownLatch的内部类&#xff0c;提供了锁的具体实现。 三、Semaphore的基本使用1. 使用场景&#xff1a;2. 代码实…

Unity3D:编辑属性

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 编辑属性 属性是用于游戏对象组件和资源的设置和选项。 可在 Inspector 窗口中编辑属性。 光源组件显示了各种值和引用属性 属性分为以下主要类别&#xff1a; 引用&#xff1a;…

Scrapy框架之Docker 安装 MongoDB

目录 Docker安装 MongoDB Docker 安装 MongoDB 第一次 MongoDB基础命令 算机存储数据的概念 查看数据库 切换数据库/创建数据库 删除当前数据库 创建集合 查看集合 删除集合 数据的增加 样例 数据的更新 举例 Docker安装 MongoDB Docker Docker 是一个开源的应…

ARM fiq和irq的区别 共享内存 混合联编 6.25

day4 汇编代码初始化系统中&#xff1a; 为什么要保存cpsr&#xff1a;要把其他的状态还原 如&#xff08;N Z&#xff09; user&#xff1a;mov r0,#3cmp r0,#4... //irqmovlt r1,#5irq:mov r0,#10cmp r0,#10moveq r2,#6fiq和irq的区别&#xff1a; fiq和irq的区别&#…

CVPR 2023 | SAN: Side Adapter Network for Open-Vocabulary Semantic Segmentation

CVPR 2023 | SAN: Side Adapter Network for Open-Vocabulary Semantic Segmentation 论文&#xff1a;https://arxiv.org/abs/2302.12242代码&#xff1a;https://github.com/MendelXu/SAN 架构设计 冻结的 CLIP&#xff0c;其位置编码为了适应不同于预训练的输入分辨率&…

贪心算法:解决最优问题的简洁而高效方法

目录 引言&#xff1a; 一. 概念与原理 二. 应用场景 3. 实现方法 4. 优缺点分析 引言&#xff1a; 在计算机科学领域&#xff0c;我们经常面临着需要在一系列选择中找到最优解决方案的问题。贪心算法正是针对这类最优化问题而设计的一种简洁而高效的方法。不同于其他复杂…

Educational Codeforces Round 151 (Rated for Div. 2)(A-B)

打完涨了20分…… 算法选修课就学会了dfs……如果有期末复习的这种劲头&#xff0c;其他算法估计早就学会了&#xff08; A Forbidden Integer 这个还WA了三发…… signed main(){IOS;int n,k,x;bool f1;cf{cin>>n>>k>>x;if(k1)cout<<"NO"…

Quiz 14_2-1: Using Web Services | Python for Everybody 配套练习_解题记录

文章目录 Python for Everybody课程简介Quiz 14_2-1: Using Web Services单选题&#xff08;1-15&#xff09;操作题Autograder : Extracting Data from XML Python for Everybody 课程简介 Python for Everybody 零基础程序设计&#xff08;Python 入门&#xff09; This cou…

Echarts折线图默认不显示数据圆点,鼠标hover时折线图上才显示圆点

option {......tooltip: {trigger: axis,},series: [{symbol: circle,symbolSize: 5,showSymbol: false, // 只有在 tooltip hover 的时候显示symbolitemStyle: { // symbol样式normal: {color: rgb(255, 255, 255),borderColor: rgba(255, 255, 255, 0.2), // symbol边框颜色…

6.20、JAVA 初识序列化与反序列化

初识序列化与反序列化 1 概述 序列化是指将对象的状态信息转换为可以存储或传输形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后可以通过从存储区中读取或者反序列化对象的状态,重新创建该对象. 序列化:利用ObjectOutputStream,把对象的信息,按照固定…

【QT】如何自定义QMessageBox的窗口大小,通过继承QDialog重新实现美观的弹窗

目录 1. QMessageBox原有的弹窗2. 网上第一种方法&#xff1a;通过样式表setStyleSheet实现改变弹窗大小&#xff08;总体不美观&#xff09;3. 网上第二种方法&#xff1a;重写ShowEvent()改变弹窗大小&#xff08;总体也不美观&#xff09;4. 最好的办法&#xff1a;继承QDia…

centos安装k8s

1. 前置 俩台centos服务器,不过多说明,教程基于centos 2. hosts配置 我这样配置&#xff0c;最后没发现那块有联动&#xff0c;望大佬更正 vim /etc/hosts 在末尾添加 192.***** master 192.*** note3. 防火墙 说是要关闭防火墙&#xff0c;我俩台服务器都是基于内网&…

服务器数据库中遭受Devos勒索病毒攻击后解密处理方法,勒索病毒数据恢复

在当今数字化时代&#xff0c;服务器数据库的安全性备受关注。然而&#xff0c;网络安全威胁依然存在&#xff0c;勒索病毒如Devos仍然是一种常见的攻击计算机病毒。最近&#xff0c;收到很多企业的求助&#xff0c;企业的财务系统账套遭到了Devos勒索病毒攻击&#xff0c;导致…

js数组中对象的替换,替换原数组 lodash中一些常用的方法(很实用)

代码 let myArray [{name: John, age: 25},{name: Alice, age: 30},{name: Bob, age: 35} ];// 要替换的对象 let objToReplace {name: Alice, age: 30};// 替换为的对象 let replacementObj {name: Alex, age: 28};// 使用forEach方法 myArray.forEach((obj, index) > …

浙大滨江院Om中心发布首个大规模图文配对遥感数据集,让通用基础模型也能服务遥感领域...

写在前面 2021 年年底&#xff0c;OpenAI 发布了 CLIP&#xff0c;利用带噪的图像-文本配对数据预训练的视觉语言模型&#xff0c;展示了前所未有的图像-文本关联能力&#xff0c;在各种下游任务中取得了惊人的结果。虽然取得了很大的进展&#xff0c;但是这类通用视觉语言基础…

Visual C++中的虚函数和纯虚函数(以策略设计模式为例)

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来说说Visual C中的虚函数和纯虚函数。该系列帖子全部使用我本人自创的对比学习法。也就是当C学不下去的时候&#xff0c;就用JAVA实现同样的代码&#xff0c;然后再用对比的方法把C学会。 直接说虚函数…

微信小程序 rich-text富文本框 怎么设置里面节点的样式

1、在JS中我们获取数据&#xff0c;在没有类名的情况下 使用正则匹配你想要添加演示的节点 res[1].data[0].f_content为rich-text里面的节点 如图 代码&#xff1a;让获取的节点中的图片的最大宽度为100%,高度为auto this.content res[1].data[0].f_content.replace(/\<…

数据库连接与操作怎么学习? - 易智编译EaseEditing

学习数据库连接和操作是进行数据管理和处理的关键技能之一。下面是一些建议&#xff0c;可以帮助您学习数据库连接和操作&#xff1a; 学习数据库基础知识&#xff1a; 首先&#xff0c;了解数据库的基本概念、术语和原理。掌握关系型数据库和非关系型数据库的特点以及它们之…