GeoServer发布多级地图并结合Arcgis进行前端调用

1.登录

用户名:admin 默认密码:geoserver,以此账户登录geoServer

2.新建工作空间

命名规范为英文,URI仅作为标识没有其他意义。

3.新建存储仓库

GeoServer仓库支持shp、geotiff、postgis数据库表等常见格式,此处仅说明geotiff格式的。

先自行在地图下载器上下载地图(地图背景为透明,拼接tif格式)

特别注意:下载的文件不止包含tif文件,还有其他如tfw,prj文件,这些文件很重要包含地址信息,要放在tif同级下,否则geoserver导入数据时可能出现无法解析情况(其他格式也要特别注意这个问题)

连接参数要指定tif文件(存在tfw,prj的需要和tif同级,只有tif文件可能geoServer无法解析)

4.图层发布

此处主要演示3级图层发布

当你在建立好存储仓库后,会自行跳转到图层发布页。没有跳转需要点击图层--添加新的资源--选择图层即可找到图层发布页。

点击发布(再次发布为已经发布过的图层,可以二次发布),填写图层名

填写边框和经纬(可以自行生产,参照下图)

回到上边点击Tile Caching选项。

下滑到GridSet配置处,如下图所示

Published zoom levels在后续切片图层时,会默认选择该处设置,它决定了最终预览时,该图层可以分多少级进行预览(如设置了3-10,在预览时你可以最小缩放到3级,最大缩放到10级)。

Cached zoom levels在进行切片图层预览时,会自动将你预览过得图片分级进行切片并放入指定文件夹下(一般在data_dir--gwc文件夹下,当然版本不同可能略有差异),建议只设置到指定级别下(如图所示,此图层为3级并将作为最终预览入口,所以设置为3/3),否则可能产生数据的冲突,导致图片混乱,这点很重要!

之后点击发布即可,这样3级图层就正式发布为wms服务了。

注:其他级别按照上述级别设置发布即可。

5.图层切片

如图点击操作Seed/Truncate,你会看到下图所示页面

Number of tasks to use为你将设置多少线程来进行图片切割,切割的图片较大时可以设置,提高并行能力。

GridSet为你发布时设置,当设置多个时,这里可以选择多个。

Format选择png即可。

Zoom start/Zoom stop在发布图层时已经设置,它表示图片按照多少级-多少级进行切割。由于我们是多级的,所以此处要一级一级去处理,在发布图层时我们已经设置了Published zoom levels为3/3,这里默认就会显示3/3,我们只需要处理当前级即可。

上述没有问题后,点击submit进行提交,会发现进度,可反复刷新进度,最终不在显示进度而显示为none时,表示已经完成。

最终在data_dir--gwc下生成对应文件,里边存放了切割好的图片。(若发现没有生成,可能为版本问题,将切割的图片存放在了内存中,建议更换磁盘存放路径或更换版本)

其他级别参照上述步骤提交即可,注意切片级别。(4级就设置为4/4...)

6.切片迁移

最终在gwc生成上述文件,并每一级下都存在切割的图片。

现在我们需要把4-16级里切割好的图片,存到3级下,最终如下图所示。

接下来,回到图层,编辑3级的图层,将Published zoom levels由原来的3/3改为3/16,请注意Cached zoom levels保持不变仍然为3/3,否则可能和切割好的图片数据产生冲突。

保存后,回到切片图层查看,找到3级,对应预览SelectOne处选择为EPSG:4326 / png(jpeg和png具体选择哪个要看当时切割时指定的Format格式为准)

7.前端展示

以Arcgis前端组件进行展示,代码如下,仅供参考,本人亲测没有问题,使用时请自行修改参数。

xml 复制代码
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
		<title>WMTSLayer | Sample | ArcGIS API for JavaScript 4.22</title>
		<link rel="stylesheet" href="https://js.arcgis.com/4.22/esri/themes/light/main.css" />
		<style>
			html,
			body,
			#viewDiv {
				padding: 0;
				margin: 0;
				height: 100%;
				width: 100%;
			}

			.esri-layer-list {
				width: 310px;
			}
		</style>
		<script src="https://js.arcgis.com/4.22/"></script>
		<script>
			require([
				"esri/Map",
				"esri/views/MapView",
				"esri/layers/WMTSLayer",
				"esri/widgets/LayerList",
				"esri/layers/WebTileLayer",
				"esri/geometry/SpatialReference"
			], (Map, MapView, WMTSLayer, LayerList, WebTileLayer, SpatialReference) => {
				
				let layer = new WebTileLayer({
					id: 'qx:qx_Level_3',
					urlTemplate: 'http://localhost:8080/geoserver/gwc/service/wmts?layer=qx:qx_Level_3&style=&tilematrixset=EPSG:4326&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image/png&TileMatrix=EPSG:4326:{level}&TileRow={row}&TileCol={col}',
					spatialReference: new SpatialReference({
						wkid: 4326
					}),
					tileInfo: {
						'rows': 256,
						'cols': 256,
						'compressionQuality': 0,
						'origin': {
							'x': -180,
							'y': 90
						},
						'spatialReference': {
							'wkid': 4326
						},
						'lods': [{
								'level': 0,
								'resolution': 0.703125,
								'scale': 279541132.0143589
							},
							{
								'level': 1,
								'resolution': 0.3515625,
								'scale': 139770566.00717944
							},
							{
								'level': 2,
								'resolution': 0.17578125,
								'scale': 69885283.00358972
							},
							{
								'level': 3,
								'resolution': 0.087890625,
								'scale': 34942641.50179486
							},
							{
								'level': 4,
								'resolution': 0.0439453125,
								'scale': 17471320.75089743
							},
							{
								'level': 5,
								'resolution': 0.02197265625,
								'scale': 8735660.375448715
							},
							{
								'level': 6,
								'resolution': 0.010986328125,
								'scale': 4367830.1877243575
							},
							{
								'level': 7,
								'resolution': 0.0054931640625,
								'scale': 2183915.0938621787
							},
							{
								'level': 8,
								'resolution': 0.00274658203125,
								'scale': 1091957.5469310894
							},
							{
								'level': 9,
								'resolution': 0.001373291015625,
								'scale': 545978.7734655447
							},
							{
								'level': 10,
								'resolution': 0.0006866455078125,
								'scale': 272989.38673277234
							},
							{
								'level': 11,
								'resolution': 0.00034332275390625,
								'scale': 136494.69336638617
							},
							{
								'level': 12,
								'resolution': 0.000171661376953125,
								'scale': 68247.34668319309
							},
							{
								'level': 13,
								'resolution': 8.58306884765625e-005,
								'scale': 34123.67334159654
							},
							{
								'level': 14,
								'resolution': 4.291534423828125e-005,
								'scale': 17061.83667079827
							},
							{
								'level': 15,
								'resolution': 2.1457672119140625e-005,
								'scale': 8530.918335399136
							},
							{
								'level': 16,
								'resolution': 1.0728836059570313e-005,
								'scale': 4265.459167699568
							}
						]
					}
				})
				const map = new Map({
					layers: [layer]
				});
				const view = new MapView({
					container: "viewDiv",
					map: map,
					center: [107, 34], //
					zoom: 3,
					spatialReference: new SpatialReference(4326)
				});
			});
		</script>
	</head>
	<body>
		<div id="viewDiv"></div>
	</body>
</html>

结束!

相关推荐
花椒技术13 小时前
从7S到4S,我们如何系统性降低直播播放延迟
性能优化·程序员
程序员cxuan16 小时前
vibe coding 凉了,wish coding 来了
人工智能·后端·程序员
JustTest21 小时前
Mac mini初始安装软件记录
程序员
SimonKing1 天前
轻量级富文本编辑器Quill,保姆级教程,5分钟快速上手
java·后端·程序员
文心快码BaiduComate2 天前
Comate搭载Kimi K2.6,长程13h!
前端·后端·程序员
图图玩ai2 天前
SSH 命令管理工具怎么选?从命令收藏到批量执行一次讲清
linux·nginx·docker·ai·程序员·ssh·可视化·gmssh·批量命令执行
SamDeepThinking2 天前
程序员懂业务,到底要懂到什么程度
后端·程序员·团队管理
盖世英雄酱581362 天前
java技术博主停更3个月了???
程序员
DyLatte2 天前
我做了个AI项目后才发现:会做事的人,正在输给会讲故事的人
前端·后端·程序员
SimonKing2 天前
别让你的代码裸奔!Spring Boot混淆全攻略(附配置)
java·后端·程序员