近期开始搞智慧农业项目,除了基本的农业传感器对接和软件开发设计外,我们还搞了台大疆农用无人机,在地块完成飞行后,通过大疆平台会将地块重建为二维地图,输出格式为地理数据常用tif格式的文件,初步想法是将tif文件发布为地图服务,作为遥感高清地图使用。
在下大学专业是地理信息与计算机相结合的学科,所以在这方面有所了解,对于处理这些数据也有些经验,大学期间用的ArcGIS软件,但是国外收费软件,想作为自己的地理数据服务器的话不现实,所以找到了这款开源的地理数据服务器软件。
GeoServer简介
GeoServer is an open source server for sharing geospatial data.
划重点:开源! 支持windows和linux操作系统,我服务器用的linux,下面介绍一下在windows的安装和使用。
GeoServer安装
我在linux系统上安装时遇到了java版本和GeoServer版本不兼容的问题,最后使用的是java17.0.6和GeoServer2.22.4完美运行的。
给大家演示的是windows系统下java17.0.7和GeoServer2.23.1版本,官网上下载安装包,按照提示设置端口后就完事了,安装成功后可以在应用程序中看到以下图标,然后点击Start,会出现第二个框框,会看到成功/失败信息。
GeoServer启动
服务成功启动后,浏览器中输入localhost:port,port是安装时设置的端口,看到以下页面则安装成功,点击“Context Path”对应的“/geoserver”,看到第二个页面则大功告成!用户名:admin,密码:geoserver。
发布地图服务
我用的是大疆构建的tif文件。
新建工作空间
新建存储仓库-发布数据源
如果你只有一个tif文件,直接选择1.GeoTIFF,然后选择对应的文件。
如果你有多个tif文件,需要拼接起来,将多个tif文件放在一个文件夹下,选择2.ImageMosaic,然后选择此文件夹即可。
点击发布,最后点击保存就能在图层页面看到你保存的图层了,文件越大处理越慢。
图层预览
按照下图指引,最终就能看到我们成功的发布了我们自己的地图服务了!
前端访问
当我用openlayer去访问自己服务时,出现了跨域报错问题,寻觅一番找到了解决方案:geoserver跨域问题解决方案。 最终看到自己的自定义图层了!后面给大家讲下自定义图层样式的设置。
const ndviLayer = new TileLayer({
source: new TileWMS({
ratio: 1,
url: 'http://localhost:8088/geoserver/test/wms',
params: {
FORMAT: format,
VERSION: '1.1.1',
STYLES: 'ndvi',
LAYERS: 'test:NDVI',
exceptions: 'application/vnd.ogc.se_inimage'
}
})
});
const map = new Map({
target: 'map',
layers: [
ndviLayer
],
view: new View({
projection: 'EPSG:4326',
center: [118.9615777, 35.83509],
zoom: 18
})
});