GeoServer 多级地图发布流程

GeoServer 多层级地图发布流程

事情起因

最近参与了一个是以地图为主的项目(见下图)。
在这里插入图片描述
其中有个功能是框选截图功能,功能是比较简单。结合html2canvas和地图自身的画矩形工具很快就实现了截图功能。但是发现加载在线第三方的地图底图资源(智图)存在不允许跨域的问题。载图完成后图片没有底图。所以就打算本地发布瓦片底图,解决跨域的问题同时为后期发布自定义底图做准备。
在这里插入图片描述

准备工作
  1. 服务选择: 因为之前接触过ArcServer的地图发布服务和ArcGis前端组件。本项目中对地图服务的要求并不高,只是单纯的用来发布瓦片底图。同时项目中的地图前端组件库选用的是Leaflet开源组件。所以决定用同样开源的GoeServer服务来发布地图。
  2. 下载安装:GeoServer下载地址。选择 “Production”版本下对应平台的安装包。安装流程本文就不讲了,请自行搜索(GeoServer运行需要java环境)。
  3. 登录GeoServer: 在地址中输入 http://localhost:你的端口号/geoserver/web/,输入帐号:admin,密码:geoserver。登录成功后跳转到(如下图所示页面)后,GeoServer的准备工作就完成了。接下来我们去准备发布地图所用的资源文件。
    在这里插入图片描述
  4. 地图文件下载器:网上有很比如:水经注万能下载器、太乐地图下载器、LVS地图下载器(免费)、BIGEMAP下载器等等,基本功能和能下载的底图资源都差不太多。本文使用的是太乐地图下载器,选择了Arcgis暖色图[0-7]级来作为本次地图发布的底图。在这里插入图片描述

由于用的是标准版下载器(不花钱),所以只能先下载成库文件,再通过下载器转成tif文件。下图中的LXX.tif就是GeoServer发布地图要使用的资源文件。到此我们的地图发布的准备工作就完成了。接下来进入到本文的重点:地图发布
在这里插入图片描述

地图发布

以上地图发布的准备工作就做完了。接下来我们开始发布地图,发布地图的几个流程大致如下:创建工作区——>数据存储——>创建图层——>发布地图——>地图切片——>切片合并,一共六个步骤。

  1. 创建工作区:
    选择数据中的:工作区–>新建工作区–>命名–>URI–>开启需要的服务
    在这里插入图片描述
    在这里插入图片描述

  2. 数据存储:
    选择数据中的:数据存储–>添加新的数据存储–>栅格数据源:GeoTIFF–>工作区:blue–>数据源名称:最好和tif文件相同,方便后期管理 -->连接参数:下载到本地的LXX.tif文件这里先选择L00.tif。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 创建图层:
    选择数据中的:图层–>添加新的资源–>添加图层:blue:blue_00–>发布
    在这里插入图片描述
    在这里插入图片描述

  4. 发布地图:
    发布图层中:坐标参考系统–>定义SRS:选择和要发布的地图一致的坐标系,本文选择的是EPSG:3857。–>边框:Compute from SRS bounds。一定要重新计下边界–>保存:图层发布完成
    在这里插入图片描述

  5. 地图切片:
    Tile Caching中:Tile Layers–>Seed/Truncate–>Grid set: 选择的图层一致的坐标系–>Format: image/png–>Zoom start: 当前图层一致:00–>Zoom stop: 当前图层一致:00–>Submit
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

当 List 中的切片进程完成后。在GeoServer\2.13.1\data_dir\gwc\blue_L00\EPSG_3857_00\0_0目录下,可以看到已经切片好的底图。
在这里插入图片描述

  1. 切片合并:
    现在把2、3、4、5步骤重复几次,把余下的1-7级地图tif文件都发布并切片。把切好的瓦片图都复制到gwc\blue_L00目录下(如下图)。这样我们在访问blue:blue00时就可以加载出0-7级的所有层级的地图。
    在这里插入图片描述
本地加载
  1. 加载WMS服务:现在我们来测试下地图是否发布成功,本文使用的是Leaflet地图组件库V1.6.0版本。代码如下:
	const map = L.map('map',{
		center: [36.00, 120.00],
		zoom:5,
		minZoom:1,
		maxZoom:7,
		crs:L.CRS.EPSG3857    								// 这里要和发布的地图CRS保持一致 
	})
	const wms = L.titleLayer.WMS(
	'http://localhost:9000/geoserver/gwc/service/wms?', 	// 本地发布地图的WMS服务地址
	{ 
		layer:'blue:L00', 									// 图层名称必须和发布的图层名一致
		format: 'image/png',								// 地图切片的格式
        transparent: true,							
	}).addTo(map)
	

在这里插入图片描述
嗯。本地加载成功,并可以在0-7级之间进行缩放。

  1. 跨域:地图发布完成了。现在只是前端可以正常加载,但进行截图时还是会存在不允许跨域的问题,所以还要对GeoServer的web.xml文件做如下的修改:
    在这里插入图片描述
    把上图中两处位置代码的注释放开。即允许跨域的访问地图。

  2. 截图:接下来我们截图测试下看看效果
    在这里插入图片描述
    在这里插入图片描述

OK。在前端跨域访问的情况下。截图后是有地图底图的,到此为止我们的目标就完成了。至于底图的加载速度嘛,比第三方是要快那么一点点。

结束语

通过GeoServer来发布多层级地图的流程就基本完成了。一些进阶的应用比如:瓦片图的缓存GeoWebCache等内容等有空再写。

感谢您的阅读,希望本文对您有所帮助。 —— chysxslt

原创文章 3 获赞 3 访问量 291

猜你喜欢

转载自blog.csdn.net/chysxslt/article/details/105752850