云环境中GDAL库的安装
# 云环境中GDAL库的配置与安装
# 写作说明
GDAL库作为遥感GIS行业最常用也是基本的一个开源库,它的强大功能自然不用在过多强调。目前市面上很多的开源软件或者第三方的开源库底层都和GDAL库相关联,比如GeoServer、QGIS等等,而我们在平时工作中这个库也是必不可少的一个重要软件。合理利用GDAL库,不仅能加速我们平时的各种数据处理速度,优化我们工作效率,同时也能加深我们对于GIS行业中各种操作原理有充分的认知。
这篇文章主要面向的是在公司里面从事遥感GIS行业的开发人员,主要原因是目前公司大部分都是采用云环境开发,工作内容大部分都需要在云上完成,所以我们需要配置云上的GDAL环境。同时目前大部分云操作系统都是RedHat系统或者Centos系统或者Arm64系统等Linux环境,所以独立掌握配置Linux环境的GDAL是必备的技能。
# 1、GDAL库介绍
GDAL库的官方介绍地址:https://gdal.org/index.html
引用官方的一段描述
GDAL is a translator library for raster and vector geospatial data formats that is released under an X/MIT style Open Source License (opens new window) by the Open Source Geospatial Foundation (opens new window). As a library, it presents a single raster abstract data model and single vector abstract data model to the calling application for all supported formats. It also comes with a variety of useful command line utilities for data translation and processing. The NEWS (opens new window) page describes the November 2021 GDAL/OGR 3.4.0 release.
需要了解的是GDAL是用来做地理信息数据处理的一个开源库,它可以处理栅格影像数据(比如tif、img等),也可以处理空间矢量数据(比如shapefile、geojson等),结合其它的软件库可以实现目前遥感GIS行业几乎所有格式数据的处理。
GDAL支持栅格数据格式:https://gdal.org/drivers/raster/index.html#raster-drivers
支持矢量数据格式:https://gdal.org/drivers/vector/index.html#vector-drivers
# 2、GDAL库安装
# Windows版
Windows版本的GDAL安装还是比较容易的主要有几种方式
# 第一种方法:使用Anaconda安装
官方推荐使用conda安装GDAL环境,他会帮你把所有的依赖找完整,相关命令如下图:
作为一个开发人员,说实话我个人不喜欢Anaconda这种环境,我还是喜欢按照自己意愿独立配置相关内容,后面介绍的两种方法就是纯粹的技术开发人员配置方式
# 第二种方法:直接下载安装包
从网站(https://download.gisinternals.com/release.php)可以下载GDAL核心包以及python绑定,自己手动安装。
# 第三种方法:使用pip安装
从这个网站(https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal)直接下载对应的whl包,然后使用 pip 安装即可。
下载下来指定的wheel文件后运行
pip3 install GDAL-xxxx.whl
如果提示缺少其它包,直接安装对应的内容即可。
# Mac版
Mac系统安装GDAL还是比较容易,已经有国外的开发人员将其打包,可以从这个网站下载(https://www.kyngchaos.com/software/frameworks/),这个网站中不仅仅可以下载GDAL安装包,还可以下载相关的插件以及Mac版本的QGIS。由于这个是国外的网站,所以有时候需要科学上网。
# Linux版
Linux环境配置是我们这次讲解的重点。
第一步配置一个总体的环境
vim ~/.bashrc
录⼊:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export PATH=$PATH:/usr/local/bin
export CPATH=:$CPATH:/usr/local/include
第二步安装相关依赖
sudo yum install -y gcc make gcc-c++ sqlite-devel libxml2-devel python3-devel numpy swig expat-devel libcurl-devel postgresql postgresql-devel bzip2 autoconf automake libtool zlib-devel libjpeg-devel bison flex
####安装Proj6
(1)下载解压
wget -c http://download.osgeo.org/proj/proj-6.2.0.tar.gz
tar xvf proj-6.2.0.tar.gz
(2)生成配置
cd proj-6.2.0
./configure --prefix=/usr/local
(3)编译
make
(4)安装
sudo make install
# 安装geos
(1)下载解压
wget -c http://download.osgeo.org/geos/geos-3.6.2.tar.bz2
tar xvf geos-3.6.2.tar.bz2
(2)生成配置
cd geos-3.6.2/
./configure --prefix=/usr/local --enable-python
(3)编译
make
(4)安装
sudo make install
####安装HDF5
(1)下载解压
wget -c https://support.hdfgroup.org/ftp/HDF5/current18/src/hdf5-1.8.21.tar
tar xvf hdf5-1.8.21.tar
(2)生成配置
cd hdf5-1.8.21/
./configure \
--prefix=/usr/local \
--enable-shared \
--enable-build-all \
--with-zlib \
--with-pthread \
--enable-cxx
(3)编译
make
(4)安装
sudo make install
# 安装NetCDF4
下载地址:https://www.unidata.ucar.edu/downloads/netcdf/
由于这个库更新很快,所以不一定会有这个相关库,可以根据自己的实际情况来定。
(1)下载解压
wget -c https://downloads.unidata.ucar.edu/netcdf-c/4.8.1/src/netcdf-c-4.8.1.tar.gz
tar xvf netcdf-c-4.8.1.tar.gz
(2)生成配置
cd netcdf-c-4.8.1/
./configure --prefix=/usr/local
(3)编译
make
(4)安装
sudo make install
# 安装openjpeg
(1)下载解压
wget -c https://github.com/uclouvain/openjpeg/archive/v2.3.1/openjpeg-2.3.1.tar.gz
tar xvf openjpeg-2.3.1.tar.gz
(2)配置编译
mkdir -v build && cd build &&
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_STATIC_LIBS=OFF .. && make
(3)安装
sudo make install
# 安装GDAL
源码下载地址:http://trac.osgeo.org/gdal/wiki/DownloadSource
(1)下载解压
wget -c http://download.osgeo.org/gdal/3.0.1/gdal-3.0.1.tar.gz
tar xvf gdal-3.0.1.tar.gz
(2)生成配置
cd gdal-3.0.1
./configure \
--prefix=/usr/local \
--with-libtiff=internal \
--with-geotiff=internal \
--with-jpeg=internal \
--with-jpeg12 \
--without-libtool \
--without-python \
--with-libkml \
--with-static-proj4 \
--with-geos \
--without-hdf4 \
--with-hdf5 \
--with-netcdf \
--with-openjpeg
(3)更新GDALmake.opt
LIBS = $(SDE_LIB) -L/usr/local/lib -lgeos_c -lgeos -lsqlite3 -lexpat -L/usr/local/lib -lnetcdf -lhdf5 -lproj -lopenjp2 -lz -lpthread -lm -lrt -ldl $(KAK_LIBS) $(DWG_LIBS) $(CURL_LIB) \
$(MRSID_LIBS) $(MRSID_LIDAR_LIBS) $(ECW_LIBS) $(INGRES_LIB) \
$(PCIDSK_LIB) $(RASDAMAN_LIB) $(SOSI_LIB) \
$(OPENCL_LIB) $(JVM_LIB) $(LIBICONV) $(FGDB_LIB) $(LIBXML2_LIB) $(MONGODB_LIB) \
$(MONGOCXXV3_LIBS) $(JNI_LIB) $(HDFS_LIB)
(4)编译
make
(5)安装
sudo make install
# 编译python版本
(1)使用源码编译安装
cd /gdal-3.0.1/swig/python/
python3 setup.py build
sudo python3 setup.py install
(2)修改配置
export PYTHONPATH=$PYTHONPATH:/修改为安装完成后提示的路径/site-packages/GDAL-3.0.1-py3.7-linux-aarch64.egg/osgeo
# 3、GDAL安装异常解决
这些异常是我在实际安装中遇到的各种问题,是非常宝贵的经验。
(1)解决configure: error: xxx A compiler with support for c++11 language features is required.
解决方案:
yum install -y gcc gcc-c++
(2)解决configure: error: no acceptable C compiler found in $PATH 问题解决
解决方案:
yum install -y gcc
(3)openjpeg.h: No such file or directory
解决方案:
重新安装openjpeg
,将其安装逻辑指定为 /usr/local
,修改 ~/.bashrc
,增加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export PATH=$PATH:/usr/local/bin
export CPATH=:$CPATH:/usr/local/include:/usr/local/include/openjpeg-2.3
(4)command 'gcc' failed with exit status 1
解决方法,安装python3-devel
sudo yum install python3-devel
(5)配置清华源
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
(6)error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file
解决方案:
1.将⽤户⽤到的库统⼀放到⼀个⽬录,如 /usr/loca/lib
cp libXXX.so.X /usr/loca/lib/
由于我们设置都在 /usr/local 所以这⼀步可以省略
2.向库配置⽂件中,写⼊库⽂件所在⽬录
#打开文件
sudo vim /etc/ld.so.conf.d/usr-libs.conf
#写入下面内容
/usr/local/lib
#退出保存
3.更新 /etc/ld.so.cache ⽂件
sudo ldconfig
(7)ImportError: No module named ‘_gdal_array'
解决方案:
这个通常是numpy和gdal安装顺序反了,应该先安装numpy等,在安装gdal。
(8)sudo sh: xx: command not found
解决方案:
# 切换到root用户
sudo su -
# 修改这个文件的权限,非常重要
chmod 777 /etc/sudoers
# 编辑这个文件
vim /etc/sudoers
# 增加指定路径
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
# 退出保存
# 修改这个文件的权限,非常重要
chmod 440 /etc/sudoers
# 4、GDAL基本命令使用
####查询GDAL版本信息
gdalinfo --version
查询结果:
# 查询影像基本信息
gdalinfo 原始影像
例子
gdalinfo /Users/lsw/Downloads/Data/wc2.1_10m_elev.tif
查询结果:
# 影像转投影
gdalwarp 参数列表 -t_srs 投影信息 原始影像 结果影像
例子:
gdalwarp -co COMPRESS=LZW -t_srs EPSG:3857 /Users/lsw/Downloads/Data/wc2.1_10m_elev.tif /Users/lsw/Downloads/3857_dem.tif
# 影像裁剪
gdalwarp 参数列表 原始影像 结果影像 -cutline 矢量文件 -crop_to_cutline
例子:
gdalwarp -co COMPRESS=LZW /Users/lsw/Downloads/Data/wc2.1_10m_elev.tif /Users/lsw/Downloads/bj_dem.tif -cutline /Users/lsw/Desktop/DLG/2004/china_shp_split/11/110000.shp -crop_to_cutline
结果:
# 写作后续
这篇文章我对于它的定位是教大家如何云环境中安装配置使用GDAL,因为目前各个公司做原生的云开发是未来发展趋势,关于云原生环境配置是我们每一个开发人员必备的能力。俗话说好:“一个不懂的配置Linux环境的工程师不是一个好的开发人员”,通过这些简单而琐碎的配置也能增加我们对于Linux环境各种库安装、配置有比较深刻的理解,学习到如何操作Linux环境,为未来升职加薪打下结实基础。
关于GDAL库的各种使用,比如如何读取栅格数据数据、如何读取矢量数据、如何做各种统计分析、数据处理等,后续看情况是否写更多的实例教程来教授大家如何进行相关操作。
# 作者简介
无形的风,大学专修数学,毕业之后反而进入了软件研发行业,后转入农业遥感GIS方面。从事多年软件设计开发,从KJava到Java开发、从Flash AS3到JavaScript开发、从C++到ObjectC开发、从Shell到Python开发,随着行业变迁发展遭受了各种语言程序的“毒打”。目前专注于国产的PIE软件研发、GEE开发与传道、Python机器学习相关方面的学习开发。