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

目录

前言

一、关于图层组

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.hqwc.cn/news/20399.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring | 资源处理】

Resource Resource 接口介绍核心方法常见接口优缺点 内置Resource实现UrlResourceClassPathResourceFileSystemResourcePathResourceServletContextResourceInputStreamResourceByteArrayResource Resource 接口 不幸的是&#xff0c;Java的标准Java.net.URL类和各种URL前缀的标…

Go实现socks5服务器

SOCKS5 是一个代理协议&#xff0c;它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色&#xff0c;使得内部网中的前端机器变得能够访问Internet网中的服务器&#xff0c;或者使通讯更加安全。SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器&#…

Web3 智能合约通过数组方式存储更多学生数据

之前的文章 Web3 在Truffle项目中编写出自己的第一个solidity智能合约带大家写了一个相对捡漏的智能合约 这样 每次 我们set 后 都会将原来的数据覆盖掉了 那么 有些人可能会想 那我们弄个数组 将新的数据全部加到数组里不就行了吗&#xff1f; 这个想法其实就很不错 我们可以…

智能汽车的主动悬架工作原理详述

摘要&#xff1a; 本文将详细介绍主动悬架功能原理设计。 主动悬架是车辆上的一种汽车悬架。它使用车载系统来控制车轮相对于底盘或车身的垂直运动&#xff0c;而不是由大弹簧提供的被动悬架&#xff0c;后者的运动完全由路面决定。主动悬架分为两类&#xff1a;真正的主动悬架…

OpenCV 入门教程:轮廓特征和轮廓匹配

OpenCV 入门教程&#xff1a;轮廓特征和轮廓匹配 导语一、轮廓特征二、轮廓匹配三、示例应用3.1 目标识别3.2 形状分析 总结 导语 轮廓特征和轮廓匹配是图像处理中用于描述和比较轮廓的技术。通过提取轮廓的形状、面积、周长等特征&#xff0c;并进行比较和匹配&#xff0c;我…

Android 系统的分区介绍

由于Android系统采用Linux架构&#xff0c;所以Android的系统分区可以类比同样采用Linux架构的操作系统&#xff08;如Windows&#xff09;。 Android系统分区分类 现在一般常见的Android分区方式共有三种&#xff0c;在不同的Android系统版本上会采用不同的分区方式。 1、传…

应用级监控方案Spring Boot Admin

1.简介 Spring Boot Admin为项目常用的监控方式&#xff0c;可以动态的监控服务是否运行和运行的参数&#xff0c;如类的调用情况、流量等。其中分为server与client&#xff1a; server&#xff1a; 提供展示UI与监控服务。client&#xff1a;加入server&#xff0c;被监控的…

遥感云大数据在灾害、水体与湿地领域案例实践及GPT【洪涝灾害、洪水敏感性和风险模拟、河道轮廓监测、地下水变化、红树林遥感制图】

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

换零钱II:Python代码解Java题目

银行现存零钱面值种类动态变化但数量无限&#xff0c;类方法change()完成指定金额的最少零钱个数兑换。 (本笔记适合学透python基本数据结构&#xff0c;熟悉class的基构造&#xff0c;对类内全局变量有一定认的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1…

从CPU缓存结构到原子操作

文章目录 一、CPU缓存结构1.1 CPU的多级缓存1.2 Cache Line 二、写回策略三、缓存一致性问题及解决方案3.1 缓存一致性问题3.2 解决方案3.2.1 总线嗅探3.2.2 事务的串行化3.2.3 MESI 四、原子操作4.1 什么是原子操作4.2 c 标准库的原子类型4.2.1 atomic<T\>4.2.2 is_lock…

这款语音同声翻译软件为你提供智能翻译体验

林娜&#xff1a;嘿&#xff0c;你知道吗&#xff1f;现在有很多语音翻译软件可以帮助我们进行实时的语言翻译&#xff01; 罗伟&#xff1a;真的吗&#xff1f;有什么语音翻译软件呢&#xff1f;能告诉我一些详情吗&#xff1f; 林娜&#xff1a;当然&#xff0c;接下来我将…

SpringBoot+JWT实现单点登录解决方案

一、什么是单点登录? 单点登录是一种统一认证和授权机制&#xff0c;指在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的系统&#xff0c;不需要重新登录验证。 单点登录一般用于互相授信的系统&#xff0c;实现单一位置登录&#xff0c;其他信任的…