引言
由于将geotiff文件转为WRF所需的二进制文件,需要在服务器上编译安装convert_geotiff
。
convert_geotiff
依赖安装 GeoTIFF
和LibTIFF
,各种库的安装还是configure
、make
、make install
这三板斧,另外在安装好相关库以后记得设置环境变量。
在安装时存在依赖关系为:
convert_geotiff安装依赖
libtiff
其中libTIFF
安装包下载路径:
代码语言:javascript复制http://download.osgeo.org/libtiff/
tar -xvf tiff-4.3.0.tar.gz
cd tiff-4.3.0/
./configure --prefix=your_install_dir/tiff
make
make check
make install
sqlite
下载地址:
代码语言:javascript复制https://www.sqlite.org/download.html
tar -xvf sqlite-autoconf-3380200.tar.gz
cd sqlite-autoconf-3380200/
./configure --prefix=your_install_dir/sqlite
make
make install
curl
下载地址:
代码语言:javascript复制https://curl.se/download.html
tar -xvf curl-7.82.0.tar.gz
cd curl-7.82.0/
./configure --prefix=your_install_dir/curl --without-ssl
make
make install
proj
包下载路径
http://download.osgeo.org/proj/
最新的9.0.0版本需要使用cmake
安装的。
由于出现error: downloading 'https://github.com/google/googletest/archive/release-1.11.0.zip' failed
错误,因此在cmake
步骤中选择取消测试选项,安装方法如下:
tar -xvf proj-9.0.0.tar.gz
cd proj-9.0.0/
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=your_install_dir/proj
-DSQLITE3_INCLUDE_DIR=$SQLITE3_HOME/include
-DSQLITE3_LIBRARY=$SQLITE3_HOME/lib/libsqlite3.so
-DTIFF_INCLUDE_DIR=$TIFF_HOME/include
-DTIFF_LIBRARY_RELEASE=$TIFF_HOME/lib/libtiff.so.5
-DCURL_INCLUDE_DIR=$CURL_HOME/lib
-DCURL_INCLUDE_DIR=$CURL_HOME/lib
-DBUILD_TESTING=OFF
..
make
make install
其中SQLITE3_HOME、TIFF_HOME、
这里发现只有make
、make install
才能在指定安装目录生成lib
,bin
等文件夹,官网的cmake ..
、cmake --build .
步骤则不行。
其中需要注意的是sqlite3
和tiff
的lib库连接需要详细到xxx.so相关库,否则会报如下错误。
../../lib/libproj.so.25.9.0.0: undefined reference to `TIFFTileSize64'
../../lib/libproj.so.25.9.0.0: undefined reference to `TIFFSetTagExtender'
../../lib/libproj.so.25.9.0.0: undefined reference to `TIFFClose'
../../lib/libproj.so.25.9.0.0: undefined reference to `TIFFMergeFieldInfo'
../../lib/libproj.so.25.9.0.0: undefined reference to `TIFFGetField'
../../lib/libproj.so.25.9.0.0: undefined reference to `TIFFIsCODECConfigured'
../../lib/libproj.so.25.9.0.0: undefined reference to `TIFFIsTiled'
../../lib/libproj.so.25.9.0.0: undefined reference to `TIFFReadEncodedTile'
../../lib/libproj.so.25.9.0.0: undefined reference to `TIFFClientOpen'
../../lib/libproj.so.25.9.0.0: undefined reference to `TIFFSetSubDirectory'
../../lib/libproj.so.25.9.0.0: undefined reference to `TIFFReadDirectory'
../../lib/libproj.so.25.9.0.0: undefined reference to `TIFFCurrentDirOffset'
../../lib/libproj.so.25.9.0.0: undefined reference to `TIFFReadEncodedStrip'
../../lib/libproj.so.25.9.0.0: undefined reference to `TIFFStripSize64'
collect2: error: ld returned 1 exit status
gmake[2]: *** [bin/cct] Error 1
gmake[1]: *** [src/apps/CMakeFiles/cct.dir/all] Error 2
gmake: *** [all] Error 2
cmake更新(可选)
如果在执行cmake
安装中出现如下报错,则需要安装新版的cmake
,若没有问题则跳过cmake
的安装这一步。
CMake Error at CMakeLists.txt:12 (cmake_minimum_required):
CMake 3.9 or higher is required. You are running version 2.8.12.2
下载安装包:
代码语言:javascript复制https://cmake.org/files/v3.23/
tar -xvf cmake-3.23.0.tar.gz
cd cmake-3.23.0/
./configure --prefix=your_install_dir/cmake
make
make install
其中在make
这一步比较长,半小时还多。安装结束后在指定安装目录下会出现:bin
,doc
, share
这3个文件夹。
由于需要使用cmake
来编译proj
,需要为cmake
设置好环境变量。
# 加载cmake
export CMAKE_HOME=your_install_dir/cmake
export PATH=$CMAKE_HOME/bin:$PATH
其中PATH
中需要把新装的路径放在最前面,否则执行cmake还是显示原来的安装位置。
$ cmake --version
cmake version 3.23.0
geotiff
包下载路径:
代码语言:javascript复制http://download.osgeo.org/geotiff/libgeotiff/
tar -xvf libgeotiff-1.7.1.tar.gz
cd libgeotiff-1.7.1/
./configure --prefix=your_install_dir/geotiff
--with-libtiff=your_install_dir/tiff
--with-proj=your_install_dir/proj
--with-zlib --with-jpeg
make
make check
make install
中间会出现问题:
代码语言:javascript复制checking for PROJ >= 6 library... checking for proj_create_from_wkt in -lproj... no
checking for proj_create_from_wkt in -lproj... no
checking for internal_proj_create_from_wkt in -lproj... no
checking for internal_proj_create_from_wkt in -lproj... no
checking for internal_proj_create_from_wkt in -linternalproj... no
checking for internal_proj_create_from_wkt in -linternalproj... (cached) no
configure: error: PROJ 6 symbols not found
打开config.log
,可以发现对于proj
库指向了-L/public1/home/scb5863/software/proj/lib,而最后的路径应该是lib64,而非lib。
这里的解决办法是在proj
的安装路径下将lib64文件夹直接复制为lib
文件夹,即cp -r lib64/ lib/
。当然也可以通过软连接的方式。
在make check
最后,出现了如下问题,但也不影响使用,留坑待续。
PROBLEMS HAVE OCCURRED
test file testlistgeo_out saved
make[2]: *** [check-local] Error 100
make[2]: Leaving directory `/public1/home/scb5863/software/package/libgeotiff-1.7.1/test'
make[1]: *** [check-am] Error 2
make[1]: Leaving directory `/public1/home/scb5863/software/package/libgeotiff-1.7.1/test'
make: *** [check-recursive] Error 1
convert_geotiff
下载地址为:
代码语言:javascript复制https://github.com/openwfm/convert_geotiff
export CPPFLAGS="-I/your_install_dir/tiff/include -I/your_install_dir/geotiff/include"
export LDFLAGS="-L/your_install_dir/tiff/lib -L/your_install_dir/geotiff/lib"
./configure --prefix=your_install_dir/convert_geotiff
make
make isntall
运行成功在安装目录中会自动生成bin
文件夹,其中存在convert_geotiff
可执行程序。
$ ./bin/convert_geotiff
Missing FileName.
Usage: ./bin/convert_geotiff [OPTIONS] FileName
Converts geotiff file `FileName' into geogrid binary format
into the current directory.
Options:
-h : Show this help message and exit
-c NUM : Indicates categorical data (NUM = number of categories)
-b NUM : Tile border width (default 3)
-w [1,2,4] : Word size in output in bytes (default 2)
-z : Indicates unsigned data (default FALSE)
-t NUM : Output tile size (default 100)
-s SCALE : Scale factor in output (default 1.)
-m MISSING : Missing value in output (default 0., ignored for categorical data)
-u UNITS : Units of the data (default "NO UNITS")
-d DESC : Description of data set (default "NO DESCRIPTION")
将convert_geotiff
加入$PATH
环境变量即可随意调用了。
- 如果在
make
阶段碰到如下问题,然后打开Makefile
文件,找到207行LIBS = -lgeotiff -ltiff
,在后面添加-lm
,接着继续运行make
。
/usr/bin/ld: geogrid_tiles.o: undefined reference to symbol 'ceil@@GLIBC_2.2.5'
//usr/lib64/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [convert_geotiff] Error 1
- 如果安装结束后运行
./convert_geotiff
出现如下错误:
./convert_geotiff: error while loading shared libraries: libgeotiff.so.5: cannot open shared object file: No such file or directory
可能是geotiff
的LD_LIBRARY_PATH
环境变量设置错误,修改后再重新编译即可运行。
在configure
步骤,出现了如下warning,虽然也不影响最终可执行程序的编译生成和运行,就先留个坑,如果后续发生报错再回头梳理。
checking for libproj... checking whether HAVE_LIBPROJ is declared... no
configure: WARNING: libproj support is not compiled into geotiff. convert_geotiff will not be able to work with projected files.
小结
这里还是主要介绍了没有root权限的情况下,如何安装conver_geotiff
以及相关依赖库。
因为后面会记录一下WRF中一些数据的替换,其中conver_geotiff
用到的情况比较多,也是基础性的安装,所以就先放出来了。