使用LeafLet叠加Geoserver wms图层到已有底图的方法

news2024/11/25 6:47:35

背景

        随着现代城市交通建设的飞速发展,各个城市的地铁路线和地铁站点也是越来越多。地铁极大的方便了广大人民的交通出行。作为Giser,经常会遇到需要将一份shp数据在地图上展示,甚至需要在网页端进行浏览的需要。把shp这种空间矢量数据进行web展示的方法有很多种。第一种可以采用Arcgis的技术栈,通过ArcgisServer把数据发布成服务,然后进行服务的展示。第二种可以采用SuperMap的技术栈,也是同样的技术思想,把数据发布出来。第三种是面向Java开发人员的,我们可以采用开源的Geoserver路线,把数据使用GeoServer发布成wms服务,再采用Leaflet等webgis可视化组件来进行展示。

        本文重点介绍基于LeafLet进行GeoServer发布的Wms服务加载过程中遇到的叠加展示问题,以及怎么解决这个叠加问题,让gis服务于专业分析及可视化。如果您在使用的过程当中也遇到了这个问题,可以参考本文来进行解决。

一、数据说明

        这里使用的数据来源与互联网数据分享,是全国的地铁站点数据,采用EPSG:4326 - WGS 84,字符编码:UTF-8,包含了全国主要地铁城市的站点信息。

1、数据解读

        使用ArcgisMap软件可以打开编辑shp数据,这里使用Qgis免费软件进行数据的查看和编辑。在采用GeoServer发布之前,先来简单预览一下数据。为了比较直观的看到地铁的所在省份,额外叠加了全国的省份数据(也是shp格式的)。

         使用Qgis的属性表查看功能,可以看到如下的地铁站点信息,包含的主要字段有:

序号名称别名类型长度精度
0OBJECTID主键IDLong100
1PointName地铁站名称String160
2PointUid地铁站标识码String800
3Lng经度String200
4Lat纬度String200
5IsPractica中转站String500
6LineName路线名称String500
7LineUid路线标识码String500

 2、GeoServer服务发布

        关于GeoServer的相关知识,这里不赘述,以后可以专门花一些时间来讲解GeoServer的知识以及如何进行二次开发。这里仅简单讲解GeoServer中服务的发布已经如何进行服务的调试预览。把本地的GeoServer服务启动后,在其管理页面中可以看到。

         这里我们选择将shp发布成WMS服务,相关服务的发布有很多网友介绍得很详细,在此不在说明。我们来看看发成成功后的服务,可以打开服务预览页面,找到之前发布好的地铁站点数据图层,点击OpenLayers进行服务的预览。

 使用鼠标左键点击地图上的任意一点,可以查看对应的地铁站信息,详情如下图所示:

 使用GML可以简单查询服务的数据信息,在浏览器中可以看到一下响应。

 二、Leaflet中叠加wms服务

1、仅叠加wms服务

<!DOCTYPE html>
<html>
<head>
	<title>加载geoserver图层测试</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 map = L.map('mapid').setView([34.669359, 113.642578], 4);
	//加载wms服务的图层
	var wmsLayer = L.tileLayer.wms(
		'http://localhost:8083/geoserver/testwzh/wms', {
			layers: 'testwzh:2022年全国地铁站点数据',
		}
	);
	//添加图层到地图
	wmsLayer.addTo(map);
</script>
</body>
</html>

 2、Wms服务叠加影像底图

        通常在gis服务中,还会叠加相应的底图服务,在底图的基础上一起配合wms服务共同进行展示,这样才是真正的应用,采用下面的代码进行图层叠加,来看看会出现什么效果。

<!DOCTYPE html>
<html>
<head>
	<title>加载geoserver图层测试</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>

	L.CRS.CustomEPSG4326 = L.extend({}, L.CRS.Earth, {
		code: 'EPSG:4326',
		projection: L.Projection.LonLat,
		transformation: new L.Transformation(1 / 180, 1, -1 / 180, 0.5),
		scale: function (zoom) {
			return 256 * Math.pow(2, zoom - 1);
		}
	});

var map = L.map('mapid',{crs:L.CRS.CustomEPSG4326}).setView([34.669359, 113.642578], 4);

	L.tileLayer('http://localhost:8086/data/basemap_nowater/1_10_tms/{z}/{x}/{y}.jpg', {
		maxZoom: 16,
		attribution: '夜郎kingMap data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, ' +
			'<a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
			'Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
		id: 'mapbox/streets-v11',
		tileSize: 256,
		zoomOffset: -1
	}).addTo(map);

	//加载wms服务的图层
	var wmsLayer = L.tileLayer.wms(
		'http://localhost:8083/geoserver/testwzh/wms', {
			layers: 'testwzh:2022年全国地铁站点数据',
		}
	);
	//添加图层到地图
	wmsLayer.addTo(map);
</script>
</body>
</html>

        我们会发现,wms服务发布瓦片把底图挡住了,看不到底图,但底图数据也是正常加载。您觉得问题出在了哪里呢? 

 3、问题排查

        遇到问题先不急,到官网看看Leaflet官网对于wms服务加载的API说明,leaflet wms说明。

选型类型默值说明
layersString''(必需)要显示的 WMS 图层的逗号分隔列表。
stylesString''逗号分隔的 WMS 样式列表
formatString'image/jpeg'WMS 图像格式 (对具有透明度的图层使用 'image/png' for layers with transparency)。
transparentBooleanfalse如果为 true,WMS 服务将返回具有透明度的图像。
versionString1.1.1要使用的 WMS 服务的版本
crsCRS用于 WMS 请求的坐标参考系统,默认为映射 CRS。 如果您不确定它的含义,请不要更改它。
upperCaseBooleanfalse如果为 true,WMS 请求参数键将为大写。

        请注意上面标了红色的参数,transparent,这个参数是用于控制服务返回的图像的透明度的。而且它的默认为false,也就是说,默认情况下,返回的瓦片是会挡住下层底图的瓦片。因此,可以知道大概得解决办法,修改瓦片的透明度设置,将其设置为true。

//加载wms服务的图层
var wmsLayer = L.tileLayer.wms(
	'http://localhost:8083/geoserver/testwzh/wms', {
		layers: 'testwzh:2022年全国地铁站点数据',
		format: 'image/png',
		transparent: true
	}
);

         为了方便大家更清楚直观的查看城市信息,把底图标签图层也加上去。完整的效果如下图所示:

//标签
L.tileLayer('http://localhost:8086/data/basemap_nowater/1-10label/{z}/{x}/{y}.png', {maxZoom: 10,minZoom:3,
		id: 'mapbox/label',tileSize: 256,zoomOffset: -1
}).addTo(mymap);

 总结

        以上就是本文的所有内容,本文重点介绍基于LeafLet进行GeoServer发布的Wms服务加载过程中遇到的叠加展示问题,以及怎么解决这个叠加问题,让gis服务于专业分析及可视化。如果您在使用的过程当中也遇到了这个问题,可以参考本文来进行解决。行文仓促,如有不足,欢迎来信留言批评指正。

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

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

相关文章

数据库笔记Ch04----概念数据库的设计(1)

前三章我们学习了如何使用DBMS我们学会了增删改查&#xff0c;插入数据库&#xff0c;创建视图... 这一章是我们的数据库刚刚建立&#xff0c;只有一个需求&#xff0c;需要根据用户的需求来创建数据库&#xff0c;每个表有哪些属性&#xff0c;参照关系是什么&#xff0c;主键…

一.Jetpack全套

Jetpack全套一.Jetpack介绍1.特性&#xff1a;2.分类&#xff1a;二.应用架构三.LifeCycle:1.简介2.简单使用3.实战&#xff1a;Dialog内存泄漏四.VideModel1.介绍2.简单使用3.AndroidViewModel使用4.使用viewmodel实现fragment直接数据共享五.LiveData1.介绍2.常用方法3.使用场…

车载 OTA技术概念

1 OTA技术概念 随着高级辅助驾驶的发展和自动驾驶的引入&#xff0c;汽车变得越来越智能&#xff0c;这些智能汽车被软件控制&#xff0c;装有巨量的软件程序&#xff0c;当出现一个软件程序问题或者更新时&#xff0c;如果按照传统的解决方式&#xff0c;那都将是一项很繁重的…

【深度学习】基于Hough变化的答题卡识别(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。⛳座右铭&#…

云开发--实现发送邮件+短信+链接跳转小程序功能

目录 1、小程序实现发送邮件 准备一个qq邮箱&#xff0c;并启动SMTP服务 确定小程序云开发环境&#xff0c;并新建云函数 2、小程序实现发送短信 确定应用 确定签名 确定模板 编写云函数-发送短信 3、链接跳转小程序 H5 配置 生成 URL Link 学习记录&#xff1a; …

【获奖案例巡展】科技向善之星——中航电梯5G+大数据管理平台

为表彰使用大数据、人工智能等基础软件为企业、行业或世界做出杰出贡献和巨大创新的标杆项目&#xff0c;星环科技自2021年推出了“新科技 星力量” 星环科技科技实践案例评选活动&#xff0c;旨在为各行业提供更多的优秀产品案例&#xff0c;彰显技术改变世界的力量&#xff0…

网络编程(python)

文章目录一、网络基础&#xff08;IP&#xff0c;端口&#xff0c;TCP等&#xff09;二、TCP网络应用可开发流程三、HTTP协议和静态Web服务器四、搭建Python自带静态Web服务器一、网络基础&#xff08;IP&#xff0c;端口&#xff0c;TCP等&#xff09; IP地址&#xff1a;标识…

企业的数据中台到底指的是什么?_光点科技

随着数据技术的不断发展和企业数据应用的广泛应用&#xff0c;越来越多的企业开始将数据中台作为数字化转型的核心战略之一。那么&#xff0c;企业的数据中台到底指的是什么呢&#xff1f; 数据中台是一种以数据为核心的企业数字化转型架构&#xff0c;旨在通过数据的汇聚、整合…

Lego- 美团接口自动化测试实战(详细解析)

目录&#xff1a;导读 一、概述 1.1 接口自动化概述 1.2 提高 ROI 1.3 Lego 的组成 二、脚本设计 2.1 Lego 的做法 2.2 测试脚本 2.3 配置文件 三、用例设计 3.1 一些思考 3.2 Lego 接口自动化测试用例 3.3 参数化 3.4 前后置动作 3.5 执行各部分 四、网站功能 …

软件测试员----面试,你准备好了么?

最近有机会做一些面试工作&#xff0c;主要负责面试软件测试人员招聘的技术面试。 之前一直是应聘者的角色&#xff0c;经历了不少次的面试之后&#xff0c;多少也积累一点面试的经验&#xff0c;现在发生了角色转变。初次的面试就碰到个工作年限比我长的&#xff0c;也没有时间…

c++11 标准模板(STL)(std::stack)(四)

定义于头文件 <stack> template< class T, class Container std::deque<T> > class stack;std::stack 类是容器适配器&#xff0c;它给予程序员栈的功能——特别是 FILO &#xff08;先进后出&#xff09;数据结构。 该类模板表现为底层容器的包装…

Spark学习——DataFrame清洗HDFS日志并存入Hive中

目录 1.开启Hadoop集群和Hive元数据、Hive远程连接 2.配置 3.读取日志文件并清洗 4.单独处理第四列的数据——方法一&#xff1a; 5.单独处理第四列的数据——方法二&#xff1a; 6.单独处理第四列的数据——方法三&#xff1a; 7.数据清洗结果展示 8.存入Hive中 9.…

The 2021 China Collegiate Programming Contest (Harbin) D. Math master

题目链接 题解 2632^{63}263大概是101910^{19}1019那么一共有19位需要讨论, 每一个位数各有保留和删除两种状态, 全部状态就是2182^{18}218种 因为每一位数都有两种状态, 使用二进制数表示每个状态, 正好能全部表示, 在二进制位数下1表示保留, 0表示删除(反过来也一样) 使用二…

分布式版本控制工具 —— Git

一、Git 基本介绍 1.1 相关概念 1️⃣ 首先&#xff0c;我们要知道什么是Git&#xff1f; Git 是一个免费、开源的版本控制系统&#xff0c;它可以有效地跟踪文件的更改&#xff0c;协调多人在同一个项目上的开发&#xff0c;以及管理不同版本的代码。 Git 最初是由 Linus …

微服务架构下认证和鉴权理解

认证和鉴权 从单体应用到微服务架构&#xff0c;优势很多&#xff0c;但是并不是代表着就没有一点缺点了。 微服务架构&#xff0c;意味着每个服务都是松散耦合的。因此&#xff0c;作为软件工程师和架构师&#xff0c;我们在分布式架构中面临着安全挑战。微服务对外开放的端…

PLE详解

具体的实践中&#xff0c;我们主要参考了腾讯的PLE(Progressive Layered Extraction)模型&#xff0c;PLE相对于前面的MMOE和ESMM&#xff0c;主要解决以下问题&#xff1a; 多任务学习中往往存在跷跷板现象&#xff0c;也就是说&#xff0c;多任务学习相对于多个单任务学习的…

Linux/Ubuntu服务自启动原理剖析及三种实现方式

面向Linux系统&#xff0c;并非只是Ubuntu&#xff1b;系统版本不同&#xff0c;配置上可能有所不同。 1、自启动的原理剖析 1.1、 运行等级 Linux分了7个运行等级&#xff0c;分别用数字0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6表示…

【Python】【进阶篇】十八、Python爬虫获取动态加载数据

目录十八、Python爬虫获取动态加载数据18.1 确定网站类型18.2 影片详情信息18.3 影片总数量18.4 影片类型与类型码18.5 编写完整程序十八、Python爬虫获取动态加载数据 如何获取电影“分类排行榜”中的电影数据&#xff08;电影&#xff09;&#xff0c;比如输入“剧情”则会输…

用EasyX图形库画一个哆啦A梦

继续说图形库&#xff0c;加一点实战用图形画图&#xff08;用来巩固代码&#xff09;&#xff1a; rectangle这个函数 四个参数&#xff0c;左上角坐标的x,y值&#xff0c;右下角坐标的x,y值&#xff1b;因为只要有两个点&#xff0c;就可以以它们的横坐标之差为长&#xff…

三范式建模和维度建模,到底该选哪一个?

编辑导语&#xff1a;当你需要从头开始设计数据仓库时&#xff0c;你会选择哪种建模方式&#xff1f;也许&#xff0c;你会从三范式建模和维度建模二者中选择。但是这二者有其各自的适用范围&#xff0c;具体选择哪种方法&#xff0c;还需要回归至业务层。本篇文章里&#xff0…