具体如何应用参考geoserver网站,主要支持2.系列gdal,因此,我编译2.4.4版本,proj用4.9.2,到官网下载相应软件:
proj-4.9.2.tar.gz(https://download.osgeo.org/proj/proj-4.9.2.tar.gz)
gdal2.4.4.tar.gz(http://download.osgeo.org/gdal/2.4.4/gdal-2.4.4.tar.gz)
geoserver-2.22.0以及geoserver-2.22.0-gdal-plugin.zip(官网下载,可下载最新的)
swig编译gdal的java版本需要如下软件:
apache-ant-1.10.12-bin.tar.gz(https://mirrors.tuna.tsinghua.edu.cn/apache/ant/binaries/apache-ant-1.10.12-bin.tar.gz)
swig-4.1.1(https://udomain.dl.sourceforge.net/project/swig/swig/swig-4.1.1/swig-4.1.1.tar.gz)
(
gdal3.4.1编译方法类似,版本有要求,我成功了的是:
gdal3.4.1,proj6.3.1,sqlite3.36,其他一致
)
下载后存放于/usr/local/目录下,进行安装。
下载完成后,即可进行安装。
解压,路径为/usr/local/apache-ant-1.10.12,
设置环境变量profile,/etc/profile添加路径,如下图所示:
export PATH=/usr/local/apache-ant-1.10.12/bin:$PATH
设置完成后,通过source /etc/profile命令更新配置文件。
可以输入ant命令,查看是否成功。
2、swig安装(切换到swig-4.1.1.tar.gz所在目录)
解压,tar xvfz swig-4.1.1.tar.gz
cd ./swig-4.1.1
bash ./configure --without-pcre【即不需要安装pcre依赖】
make
make install
安装完成后,通过swig -version查看版本信息,
如果其他目录识别不了,将其路径加如环境变量中。
3、proj安装(切换到proj-4.9.2.tar.gz所在目录)
解压,
tar xvfz proj-4.9.2.tar.gz
cd ./proj-4.9.0
./configure --prefix=/usr/local/proj-4.9.2/build/
--prefix:为输出路径,我指定一个位置,根据需要设置,在后面编译gdal的时候--with-proj需要设置该路径。
make
sudo make install
(
如果提示sqlite不存在,需要首先编译sqlite,gda3.4.1需要sqlite3.36(有最小版本要求,记不清了,我用得3.36)。
./configure时提示sqlite版本不正确等sqlite原因时(编译proj6.3.1时出现过),按如下设置:
)
That installs the native libraries in /usr/local/lib/libproj*
. Now we're ready for GDAL!
4、gdal编译
解压
tar xvfz gdal-2.4.4.tar.gz
cd ./gdal-2.4.4
./configure --with-java=/usr/local/gdal-2.4.4/jdk1.8.0_221 --with-jvm-lib=/usr/local/gdal-2.4.4/jdk1.8.0_221/jre/lib/amd64/server --with-jvm-lib-add-rpath=yes --with-sfcgal=no --with-kea=no --with-proj=/usr/local/proj-4.9.2/build/
make
make install
--with-java为java_home的路径;
--with-jvm-lib为java路径下对应路径
--with-sfcgal=no设置不编译sfcgal,否则需要安装cgal,很麻烦。
--with-kea=no 设置不编译kea库,GDAL可以通过libkea库读取、创建和更新KEA格式的文件(如果编译kea出错,就可以设置为no,根据实际情况)。
如果没有/usr/local/gdal-2.4.4/jdk1.8.0_221,请下载jdk-8u221-linux-x64.tar.gz到相应位置解压,我解压的是/usr/local/gdal-2.4.4/jdk1.8.0_221/,并配置./configure中的正确路径
5、gdal版本java编译
首先编辑 gdal-2.4.4/swig/java/java.opt 配置 JAVA_HOME 路径(不能在=号前后留空格),
JAVA_HOME=/usr/local/gdal-2.4.4/jdk1.8.0_221/ JAVADOC=$(JAVA_HOME)/bin/javadoc JAVAC=$(JAVA_HOME)/bin/javac JAVA=$(JAVA_HOME)/bin/java JAR=$(JAVA_HOME)/bin/jar JAVA_INCLUDE=-I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
编译,安装
cd gdal-2.4.4/swig/java/
make
下面这一步网上摘抄,没试用。
(
And finally copy the resulting .so
files into a directory and update yourLD_LIBRARY_PATH
environment variable to point to them:
最后,拷贝编译好的 .so 文件到一个目录,并更新你的 LD_LIBRARY_PATH 环境变量以便指向这些 .so 文件:
$ cd /gdal-1.9.1/swig/java $ ls | grep .so libgdalconstjni.so libgdaljni.so libogrjni.so libosrjni.so $ cp *.so ~/opt/linuxnative/ $ export LD_LIBRARY_PATH=~/opt/linuxnative/ # Put this in .bashrc
)
6、将geoserver-2.22.0-gdal-plugin.zip解压,拷贝到tomcat发布的geoserver的webapps/geoserver/web-inf/lib/目录下。
将gdal版本java编译的jar文件(gdal.jar)更改为与版本匹配的文件(gdal-2.4.4.jar,在gdal-2.4.4/swig/java/文件夹下),拷贝到目录下并删除gdal-3.2.0.jar文件。
7、设置路径
export LD_LIBRARY_PATH=/usr/local/gdal-2.4.4/swig/java:$LD_LIBRARY_PATH【这个路径一定是java编译的gdal的路径,我刚开始设置为gdal的路径,geoserver启动报错】
export GDAL_DATA=/usr/local/anaconda3/envs/env_django_py39/share/gdal(安装实际情况设置)
通过/etc/profile设置后,调用 source /etc/profile更新
8、结果
tomcat重启一下,打开geoserver网站,添加数据存储时,就会多出gdal对应的栅格数据源选项,如下图所示:
在服务器状态下的模块中也可以看到gdal模块:
django部署过程中gdal错误处理:
django通过mod_wsgi部署后出现no module named '_gdal'问题,一般都是缺少库,
我出现缺少CXXABI_1.3.8问题,需要找到具体原因,可通过如下方法查找:
在需要导入gdal的代码处添加django环境的osgeo模块,如下所示:
sys.path.append('/opt/anaconda3/envs/env_django/lib/python3.9/site-packages/osgeo')
然后打印导入错误消息,通过httpd的log文件查看错误,定位错误原因。
‘CXXABI_1.3.8’ not found错误解决
错误内容
ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.8’ not found
(required by /usr/local/python3/lib/python3.7/site-pacnsorflow/python/_pywrap_tensorflow_internal.so)
我的问题解决方法如下:
(1)查询自己的
strings /lib64/libstdc++.so.6 | grep CXXABI
(2)查询系统上的libstdc++.so
find / -name "libstdc++.so*"
(3)查看其中一个
strings /root/miniconda3/lib/libstdc++.so.6 | grep CXXABI
(4)复制动态库并改变软连接指向:
sudo cp /root/miniconda3/lib/libstdc++.so.6 /usr/lib64/
sudo rm libstdc++.so.6
sudo ln -s libstdc++.so.6.0.25 libstdc++.so.6