【GeoServer + MapBox-GL 搭建离线矢量切片地图服务】多图详细流程 + 踩过的坑总结


前言

我们实验室最近需要做一个地图可视化的系统,因此涉及到使用 GeoServer + maobox-gl 搭建离线地图服务,但是我以前未接触过这部分,在搭建服务的过程中遇到了太多的坑。网络上教程千篇一律,很多步骤都是一笔带过,所以从零开始的我一路上磕磕碰碰,很多问题遇到了但是在网上根本找不到解决方案,只能自己慢慢摸索,在试错上花费了大量的时间,因此想通过此博客给以后有需要的同学一些帮助,避开我遇到的坑,并且成功搭建好离线地图服务!


Geoserver 安装

前期工作

JDK的安装

GeoServer 是基于 Java 的软件,所以运行时需要 JDK 的支持,(PS:我使用的 GeoServer 是2.13版本的,所以得下载 JDK8(Java SE 8u201),如果你要用其他版本的 GeoServer,你需要下载该版本对应的 JDK 版本。

Oracle 官网上下载 JDK8 即可 JDK8下载链接

安装 GeoServer

访问 GeoServer 官方网站:点击进入官方下载页面
点进去之后直接下载的是最新的版本,要下以前的旧版本点击 Archived 就能看到。

在这里插入图片描述
选择好你要下载的版本,我是用的是 Windows Installer进行安装,记得顺便把下面对应的矢量切片插件Vector Tiles下载好,后面要用(没有矢量切片插件是不能发布矢量切片地图的)!
在这里插入图片描述

下载好安装文件之后双击安装文件,这里是选择 GeoServer 的安装路径,然后一路 next 到下一页面
在这里插入图片描述
到这个页面,选择你已安装的 JDK 或 JRE 的路径
在这里插入图片描述
下一步是设置用户名和密码,默认使用用户名“admin”和密码“geoserver” 选择默认目录和端口8080。注意,如果本机默认安装了Tomcat服务器,GeoServer的端口号不要设置成默认的8080,避免与Tomcat的端口号冲突,造成不必要的麻烦。(PS: 可以设置为8001)
在这里插入图片描述
完成设置,最后点击Install进行安装。


GeoServer 的使用

进入 GeoServer 界面

在进入 GeoServer 前需要开启 GeoServer服务,点击Start GeoServer 然后会出现一个命令行界面,注意使用GeoServer 作为 WMS 服务器期间,不要关闭此窗口
在这里插入图片描述
开启 GeoServer 服务后,回到上面的开始菜单栏点击 GeoServer Web Admin Page 就能进入 GeoServer, 之后输入前面安装时设置的账号和密码就能成功进入GeoServer 界面。

在这里插入图片描述

使用 GeoServer 发布矢量切片离线地图

要使用 GeoServer 发布矢量切片离线地图,首先你需要将刚才下载好的矢量瓦片插件压缩包里的内容放进 GeoServer 安装路径下的 ./WEB-INF/lib 里面。
在这里插入图片描述

然后准备好你的图层数据,可以是单独的shp文件,也可以是多个,或者是连接 PostSQL 的数据,这里仅演示单个shp的发布。

1. 首先添加新的工作区,Name 和 命名空间URL 最好一致,勾选默认工作区
在这里插入图片描述
在这里插入图片描述

2. 完成第一步后向工作区中添加新的数据存储
在这里插入图片描述
数据存储如果是多个图层就选择第一个红框,单个shp就选择第二个框框

在这里插入图片描述
然后数据源名称我一般和工作区一致,连接参数是指你的数据所在位置,字符集如果有中文的话选择GBK 或者 UTF-8
在这里插入图片描述
然后就可以开始图层的发布了
在这里插入图片描述
3. 图层的发布,根据你的 shp 的坐标参考系进行设置,按顺序设置完之后,点击该页面上方的 Tile Caching,进行下一步设置

在这里插入图片描述
这里需要勾选 application/vnd.mapbox-vector-tile 才能发布矢量切片地图,勾选后点击提交即可
在这里插入图片描述
4. 成功发布之后下一步点击左边栏Tile Caching 选择 Tile Layers 找到刚才自己发布的图层,点击Seed/Truncate
在这里插入图片描述
点击之后跳转到该页面进行切图到本地的设置,任务数量自选,Format 要选择红框内容,点击两次 submit,便完成切图。在这里插入图片描述
之后返回到 Tile Layers 的那个页面点击 Select Onepbf格式对图层进行预览
在这里插入图片描述
离线矢量切片地图的发布到这里就结束了,下一步是使用 Mapbox-GL 调用地图并进行渲染。


使用 Mapbox-GL 调用离线矢量切片地图

Mapbox GL JS 是一个 JavaScript 库,它使用 WebGL,以 vector tilesMapbox styles 为来源,将它们渲染成互动式地图。它是 Mapbox GL 生态系统的一部分,其中还包括 Mapbox Mobile,它是一个用 C++ 编写的兼容桌面和移动平台的渲染引擎。

PS: 你或许会需要在 MapBox 注册并申请一个 Access Token
申请Acess Taken

详情可参考MapBox调用GeoServer发布的矢量瓦片服务WMTS、TMS
这里主要讲一下 MapBox 调用 TMS 服务的代码:
MapBox API 是在线引用的 可参考官方文档

<head>
    <meta charset='utf-8'/>
    <title>mapbox添加geoserver发布的矢量瓦片</title>
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no'/>
    <script src='https://api.tiles.mapbox.com/mapbox-gl-js/v1.1.1/mapbox-gl.js'></script>
    <link href='https://api.tiles.mapbox.com/mapbox-gl-js/v1.1.1/mapbox-gl.css' rel='stylesheet'/>
    <style>
        body { margin:0; padding:0; }
        #map { position:absolute; top:0; bottom:0; width:100%; }
    </style>
</head>

后面这部分是地图的调用,需要注意的是

mapboxgl.accessToken = 'pk.eyJ1Ijoibmlja3p4dyIsImEiOiJja3hlYXI3NDQxYjhmMnVtZnRveTlxZGwwIn0.0Ude29mpR0-A0Z2Xf3PD2A';

var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/mapbox/light-v10',
    zoom: 12,
    // 图层的中心点
    center: [113.1553,23.0632]
});

map.on('load', function() {
    map.addLayer({
        "id": "building_a",
        "type": "fill",
        "source": {
            "type": "vector",
            // TMS 调用需要加上这行
            "scheme":"tms",
            // URL 是 GeoServer 中 TMS 的服务链接,选择墨卡托投影的那个我这里是900913
            // "tiles": ["URL/{z}/{x}/{y}.pbf"],
            "tiles": ["http://localhost:8080/geoserver/gwc/service/tms/1.0.0/OSM%3Abuilding_a@EPSG%3A900913@pbf/{z}/{x}/{y}.pbf"],
        },
        // source-layer 是你 Geoserver 图层的名称即 上面 URL 的 title
        "source-layer": "building_a",
        "paint": {
            "fill-color":"#088",
            "fill-opacity":0.8
        }
    });
});

调用成功之后预览是这个样子滴!

在这里插入图片描述
到这里Geoserver + mapbox-gl 搭建离线矢量切片地图服务就告一段落了,后面就是使用 JS 对地图各个图层进行渲染,具体可参考官方文档。有问题欢迎大家评论区交流!


【踩坑总结】

【踩到的第一个坑】跨域问题—报错:有CORS的错误提示

跨域问题的解决参考,GeoServer解决跨域问题 (CORS)亲测有用

【踩到的第二个坑】无法预览Pbf

解决方案:
GeoServer 的安装我是使用是2.13的版本,我一开始使用的是2.20版本,然后我在发布服务之后遇到了pbf格式文件无法预览的问题(我暂时还没找到问题出在哪里,有知道的伙伴可以在评论说一声),所以我卸载了2.20版本装了个2.13版本。

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
基于Geoserver搭建离线地图服务器是一个能够提供离线地图数据服务的系统。Geoserver是一个开源的地理信息系统(GIS)服务器,可将地图数据以Web服务的形式提供给用户。 在搭建离线地图服务器时,首先需要准备地图数据。可以使用各种GIS工具将地图数据转换为Geoserver支持的格式,如Shapefile、Geotiff等。这些地图数据可以包括地理要素、矢量数据、DEM数据等。 接下来,将这些地图数据加载到Geoserver中,可以使用Geoserver自带的管理界面或通过REST API进行操作。在加载地图数据时,需要配置图层样式、投影坐标系等信息,以便地图数据能够正确显示。 在地图数据加载完成后,可以通过Geoserver服务接口来访问地图数据。用户可以通过Web浏览器、地图客户端等方式来查询、浏览地图数据。Geoserver支持多种地图服务协议,如WMS、WFS、WCS等,可以根据需要选择合适的协议。 离线地图服务器的优势在于,用户可以在没有网络连接的情况下访问地图数据。这对于部分地区网络条件较差或需要在偏远地区进行地图操作的用户非常重要。此外,Geoserver还支持地图数据的缓存,可以提高地图数据的访问速度,提供更好的用户体验。 综上所述,基于Geoserver搭建离线地图服务器是一个能够提供离线地图数据服务的系统,可以通过Web接口访问地图数据,并在缺乏网络连接的情况下提供地图浏览、查询等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ricce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值