如果是几百M的影像数据,我们直接用GeoServer发布就可以了。但如果是几十G的影像数据怎么办?

有经验的同学都知道,首选要先将影像数据构建成金字塔,才可以将数据发布浏览,要不然会卡死。

我们现在就看下,怎么用GeoServer发布影像数据金字塔吧。

一、安装插件ImagePyramid

1-1.下载插件

首先,我们要给GeoServer安装ImagePyramid插件:

看下自己的GeoServer的版本号,在以下链接下载插件:

因为我的GeoServer版本号是2.19.1,所以我下载插件的链接如下:

https://sourceforge.net/projects/geoserver/files/GeoServer/2.19.1/extensions/

如果版本号是2.19.2的话,下载插件的链接就应该是:

https://sourceforge.net/projects/geoserver/files/GeoServer/2.19.2/extensions/

点击对应的插件,下载即可。

1-2.安装插件

将下载的压缩包geoserver-2.19.1-pyramid-plugin.zip解压。

将解压的内容复制到文件夹, \geoserver-2.19.1-bin\webapps\geoserver\WEB-INF\lib中。

启动geoserver-2.19.1-bin\bin中的startup.bat。

访问http://localhost:8080/geoserver/web,数据存储——添加新的数据存储,新建数据源中,栅格数据源中多了ImagePyramid,说明插件安装成功。

二、将数据构建为金字塔

为了使用GeoServer的ImagePyramid插件,我们还得先将源数据统一为金字塔格式,可以用软件,也可以写程序,先看看软件怎么使用。

2-1.样例数据获取

打开QGIS,加载高德矢量瓦片,选取一块地方。

菜单栏,工程——导入/导出——导出地图为图片,范围为当前视图即可,解决方法中,像素分辨率设置为3000dpi,导出的数据大小大概为2G左右,测试构建金字塔是够用了。点击save。

弹出保存对话框,输入文件名,保存类型选择TIFF format。

2-2.构建金字塔文件

QGIS工具箱,GDAL——栅格杂项——重新分割图块,输入文件——添加文件,加载上一步中导出的样例数据,勾选,点击OK。

因为我只是进行示例说明,所以参数中,图块宽度和图块高度我写成了2048,构建金字塔水平数,我也选择2级,采样方式选择双线性,数据太多,我电脑存不下,也带不动。

输出数据类型选择Byte,配置好输出目录,点击运行即可。

数据量越大,运行越慢,耐心等待即可。

2-3.python代码

建议使用QGIS工具箱中的重新分割图块构建金字塔,不知道是干啥的参数就不设置。不建议使用代码构建金字塔,因为首选要配置GDAL环境,GDAL环境配置完了,运行代码写bug调bug,也很麻烦,而且python3和python2的语法格式本就不一样,还要修改默认的python解释器。

如果想挑战,可以查阅:https://gdal.org/programs/gdal_retile.html

三、GeoServer发布金字塔数据

启动geoserver-2.19.1-bin\bin中的startup.bat,访问http://localhost:8080/geoserver/web。

3-1.添加工作区

数据——工作区——新建工作区,新建一个工作区。

3-2.新增数据存储

数据存储——添加新的数据存储,新建数据源——栅格数据源——ImagePyramid。

工作区选择我们刚才新建的工作区image,数据源名称取一个。

关键是连接参数中的URL,file:后的是QGIS中金字塔文件的输出目录,点击保存即可。

GeoServer需要一个一个读取文件,可以看到页面左上角有一个小圈圈一直转啊转的,数据越大,时间越长,慢慢等待。

3-3.发布图层

数据源添加成功后,会跳转页面,点击发布。

点击保存即可。

四、查看数据

我们先看下金字塔数据,根据文件夹目录,能看出,它其实就是根据比例尺层级构建的影像瓦片。

理论上说,只要金字塔能构建成功,GeoServer就能加载全部数据。金字塔能否构建成功,取决于电脑或服务器的内存和磁盘空间大小。

数据——Layer Preview,找到jinzita图层,点击openlayers。

效果如下,prefect!

再看看瓦片的请求URL:

http://localhost:8080/geoserver/image/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&FORMAT=image%2Fjpeg&TRANSPARENT=true&STYLES&LAYERS=image%3Ajinzita&exceptions=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A404000&WIDTH=768&HEIGHT=518&BBOX=12958538.994140625%2C4863647.900390625%2C12958606.494140625%2C4863693.427734375

我们可以根据这个url获取瓦片图块,因为GeoServer默认的坐标系是3857坐标系,所以我们也可以将坐标系改为3857。

http://localhost:8080/geoserver/image/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&FORMAT=image%2Fjpeg&TRANSPARENT=true&STYLES&LAYERS=image%3Ajinzita&exceptions=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A3857&WIDTH=768&HEIGHT=518&BBOX=12958538.994140625%2C4863647.900390625%2C12958606.494140625%2C4863693.427734375

五、前端加载数据

用最简单的leaflet,代码如下:

<!DOCTYPE html><html><head><title>leaflet加载wms</title><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A==" crossorigin="" /><script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js" integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA==" crossorigin=""></script><style>html,body {height: 100%;margin: 0;}#map {width: 100%;height: 100%;}</style></head><body><div id='map'></div><script>var map = L.map('map').setView([39.98340, 116.40365], 16);//加载wms图层var wmsLayer = L.tileLayer.wms('http://localhost:8080/geoserver/image/wms?', {layers: 'image:jinzita',maxZoom: 24,});//添加图层到地图wmsLayer.addTo(map);</script></body></html>

因为前端代码中有maxZoom为24,所以虽然我构建金字塔的时候,只构建了2级,但在前端页面中,可以把数据放大到24级比例尺下看。

效果还是很清晰的。

六、总结

有三点需要注意。

首先是构建金字塔的层级数量和图块的宽度高度,因为层级越多,文件越大,图块的宽度高度越小,文件越多,所以建议可以先切一小块数据,走一遍流程,最终确定金字塔的层级和图块的宽度高度。

金字塔的文件夹层级和地图比例尺层级是反的,文件夹数字越小,图像越清晰,这个看看文件就能明白。金字塔层级到底要多少,要根据影像范围和页面地图最小比例尺来确定。

因为GeoServer默认的坐标系有3857,既WGS84的伪距墨卡托投影,所以如果我们的数据坐标系如果是这个,在构建金字塔和GeoServer发布的时候,都不需要指定坐标系。如果数据不是这个坐标系,建议将数据的坐标系转换成3857之后,再进行金字塔构建,因为后续数据发布,前端展示的时候,重新指定坐标系很麻烦。

用GeoServer发布影像金字塔,并在leaflet中加载,流程如上,之前也说了,这种金字塔的构建方法非常类似于地图瓦片,所以只要能把金字塔构建出来,并通过GeoServer发布出来,数据渲染展示的效率就会很高。

GeoServer发布影像金字塔并leaflet加载相关推荐

  1. leaflet 加载 geoserver 发布的 wms 服务

    1. 安装 geoserver 服务:略 2. 启动 geoserver: 3. 登录 geoserver 控制台:( 默认账号.密码为 admin.geoserver ) 4. 新建工作区: 5. ...

  2. leaflet加载离线地图教程以及下载离线地图瓦片工具

    关于源码以及教程侵权请联系作者删除 最近在做一个leaflet加载离线地图的东西,结果在网上找到一份相关的教程以及源码 源码链接:https://pan.baidu.com/s/1cGew8PAU-L ...

  3. Leaflet加载百度地图

    为了验证一下百度地图的影像.矢量.注记等瓦片数据是否是坐标统一的,写了一个简单的leaflet加载百度影像瓦片.矢量瓦片.注记瓦片的页面,叠加在一起,看了一下,果然坐标系是统一的. <!DOCT ...

  4. leaflet 加载腾讯地图

    地图切片,又叫地图瓦片,,个人比较喜欢叫切片. leaflet 默认的地图切片规则是,切片原点在左上角(即[85.05112877980659,-180]),而腾讯地图的使用切片规则是,其他不变,原点 ...

  5. leaflet加载百度地图(路网矢量图和卫星影像图)示例代码032

    第032个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet加载百度地图,这里使用了control.layers进行切换两种不同的百度底图.这里要引用proj4,proj4leaf ...

  6. leaflet加载天地图

    概述: leaflet是一个轻量级的并且开源的地图框架,是由esri发起的,由于其轻量.简单而被大家喜欢,本文带你学习如何在leaflet中加载天地图. 实现: leaflet加载天地图比较简单,做了 ...

  7. leaflet加载Geoq智图,4种形式切换(示例代码033)

    第033个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet加载Geoq智图,这里使用了control.layers进行多个底图间的自由切换. 直接复制下面的 vue+leafle ...

  8. leaflet加载腾讯地图 (路网、影像、地形) 示例教程034

    第034个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet加载腾讯地图,这里使用了control.layers进行切换3种不同的百腾讯底图. 直接复制下面的 vue+leafle ...

  9. leaflet加载geojson热力图加载坐标组热力图

    通过SuperMap Leaflet加载geojson热力图,geojson通过数据服务查询获取到. geojson需要转换为4326坐标. geojson热力图加载 <!DOCTYPE htm ...

最新文章

  1. 新技能 MyBatis 千万数据表,快速分页!
  2. python接口自动化测试(三)-requests.post()
  3. 红帽OpenShift总经理谈容器技术需要关注的方向
  4. matplotlib散点图,圆
  5. Garbage Collection Optimization for High-Throughput and Low-Latency Java Applications--转载
  6. 2017年9月分c语言,2020年9月中国编程语言排行榜
  7. mint-ui 写一个下拉滑动选择,mt-popup和mt-picker结合使用
  8. 三国历史的教训读后感_历史上伟大的创新者的教训,你永远都不会忘记
  9. co88 sap 实际结算_SAP 物料帐的基本原理
  10. 页面编程小技巧 —— 大屏图片自适应
  11. 盘点功能软件测试用例,盘点那些必不可少的“用例集”
  12. mysql sock golang_golang socket连接复用 - smux
  13. 为个人博客添加文章评论功能
  14. python查文章字数
  15. 使用logisim设计简易CPU
  16. 数据科普:期权的希腊字母 | 上(投资必知必会)
  17. 搞清Δ,梯度, 方向导数,散度,拉普拉斯算子
  18. java笔记从基础到高级完整版
  19. python字典相乘_知乎
  20. 地震资料处理的几个概念

热门文章

  1. 大数据 智能交通调度_大数据时代下的智能交通
  2. 一个团队管理者应该干什么?
  3. 顺序图中的复合片断(条件、可选、循环、同步)和引用片断
  4. springboot+flyway+oracle11g+mysql8 整合包
  5. java xmx4096m_为什么设置了heap最大内存为4096之后,只用了2048就内存溢出
  6. 字符串匹配:Sunday算法
  7. java serialport_java SerialPort串口通讯的使用
  8. 3.1_2 JavaSE入门 P1 【Java基础】Java语言概述、JDK编译
  9. Echarts主题更换
  10. NXP(Freescale) QorIQ T2080 SRIO FRA程序分析