win10和ubuntu部署安装gdal库(Java版)
win10
1、安装Java环境
2、下载gdal
下载地址:https://www.gisinternals.com/release.php
3、配置环境变量
在E:\release-1900-x64-gdal-3-2-0-mapserver-7-6-1\bin\gdal\java找到jar包,放到Java项目里lib文件夹下,dll库文件放到C:\Windows\System32文件夹下,然后就可以开始编码了。
package sad;
import org.gdal.gdal.*;
import org.gdal.gdalconst.gdalconstConstants;
import org.gdal.ogr.DataSource;
import org.gdal.ogr.ogr;
public class Hello {
public static void main(String[] args) {
//此处换成自己文件的位置的路径
//readGDAL("E:\\xxxxxxx.tif");
getElevationFromTif("C:\\xxxx.tif");
}
/**
* 读取tif文件的相关信息
* @param fileName
*/
public static void readGDAL(String fileName) {
gdal.AllRegister();
//读取影像数据
Dataset dataset = gdal.Open(fileName,gdalconstConstants.GA_ReadOnly);
if(dataset == null){
System.err.println("GDALOpen failed - "+gdal.GetLastErrorNo());
System.err.println(gdal.GetLastErrorMsg());
System.exit(1);
}
Driver driver = dataset.GetDriver();
System.out.println("Driver:"+driver.getShortName()+"/"+driver.getLongName());
//读取影像信息
int xSize = dataset.getRasterXSize();
int ySize = dataset.getRasterYSize();
int bandCount = dataset.GetRasterCount();
System.out.println("size is "+xSize+","+ySize+",光带数:"+bandCount);
Band band = dataset.GetRasterBand(1);
int type = band.GetRasterDataType();
//type为1,代表的是Eight bit unsigned integer
System.out.println(type);
dataset.delete();
gdal.GDALDestroyDriverManager();
}
/**
* shp转换geojson
* @param shpFileName
* @param geojsonFileName
*/
public static void shpToGeojson(String shpFileName,String geojsonFileName) {
// 注册所有的驱动
ogr.RegisterAll();
// 为了支持中文路径,请添加下面这句代码
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");
// 为了使属性表字段支持中文,请添加下面这句
gdal.SetConfigOption("SHAPE_ENCODING","");
//shp文件所在的位置
//String strVectorFile = "D:\\sichuan\\sichuanPointALL.shp";
//打开数据
DataSource ds = ogr.Open(shpFileName,0);
if (ds == null)
{
System.out.println("打开文件失败!" );
return;
}
System.out.println("打开文件成功!" );
org.gdal.ogr.Driver dv = ogr.GetDriverByName("GeoJSON");
if (dv == null)
{
System.out.println("打开驱动失败!" );
return;
}
System.out.println("打开驱动成功!" );
//输出geojson的位置及文件名
//String geojsonFileName = "D:\\data\\sichuan.geojson";
dv.CopyDataSource(ds, geojsonFileName);
System.out.println("转换成功!");
}
/**
* 获取每个点的高程值
* @param fileName_tif
*/
public static void getElevationFromTif(String fileName_tif) {
gdal.AllRegister();
Dataset hDataset = gdal.Open(fileName_tif, gdalconstConstants.GA_ReadOnly);
if (hDataset == null)
{
System.err.println("GDALOpen failed - " + gdal.GetLastErrorNo());
System.err.println(gdal.GetLastErrorMsg());
System.exit(1);
}
Driver hDriver = hDataset.GetDriver();
System.out.println("Driver: " + hDriver.getShortName() + "/" + hDriver.getLongName());
int iXSize = hDataset.getRasterXSize();
int iYSize = hDataset.getRasterYSize();
System.out.println("Size is " + iXSize + ", " + iYSize);
Band band = hDataset.GetRasterBand(1);
//这里是DEM数据,所以声明一个int数组来存储,如果是其他数据类型,声明相应的类型即可
int buf[] = new int[iXSize];
for(int i=0; i<50/*iYSize*/; i++)
{
band.ReadRaster(0, i, iXSize, 1, buf); //读取一行数据
// 下面是输出像元值,为了方便,我只输出了左上角 10×10的范围内的数据
for(int j=0; j<50/*iXSize*/; j++){
System.out.print(buf[j] + ", ");
}
System.out.println("\n");
}
hDataset.delete();
// 可选
gdal.GDALDestroyDriverManager();
}
}
ubuntu
1、部署要求
java,ant,pcre和swig:其中pcre是swig所需的依赖项,因此必须先于swig安装。java、ant和swig都可以通过 -version查看。ava和ant的安装比较类似,将下载下来的压缩包解压好后,在/etc/profile文件中配置好JAVA_HOME、ANT_HOME以及CLASSPATH后即可记得对这三个变量进行export,并把前两个加入到PATH中。
gcc和g++ :这个如果没有去装一个就好了,可以通过命令gcc -v 和 g++ -v 来查看
SQLite3:PROJ需要的环境 下载地址: https://www.sqlite.org/download.html
PROJ:gdal需要的环境 下载地址:https://proj.org/download.html
GEOS:gdal需要的环境 下载地址:http://download.osgeo.org/geos/
注:gadl3.0以上需要proj6以上
2、安装
SQLite3:解压,配置 并编译安装 SQLite3
powershell
tar -zxvf sqlite-autoconf-3330000.tar.gz
cd sqlite-autoconf-3330000/
./configure
make
make install
PROJ:解压、配置 并编译 PROJ
tar -zxvf proj-6.3.0.tar.gz
cd proj-6.3.0/
./configure
make
make install
GEOS:解压、配置并编译安装GEOS
提示:其中/opt/geosXXX为定义的安装位置
tar -xvf geosXXX.tar.gz
cd ./geosXXX
./configure --prefix=/opt/geosXXX
make
make install
配置动态链接库
让gdal能够找到proj及geos的所在位置。共享文件默认安装在/usr/local/lib位置下:
cd /etc/ld.so.conf.d/
touch local.conf
echo "/usr/local/lib" > local.conf
最后可使用ldconfig -v来查看详细信息。
GDAL 解压、配置 并编译安装 GDAL
wget -c -P /storage/software/gdal http://download.osgeo.org/gdal/3.3.2/gdal-3.3.2.tar.gz
tar -zxvf gdal-3.2.0.tar.gz
cd gdal-3.2.0/
./configure
make
make install
不配置./configure编译路径 默认在/usr/local/lib下
修改配置文件
vi /etc/profile
新增:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
刷新:
source /etc/profile
检测gdal是否编译成功
gdalinfo -version
GDAL编译java
编辑 vi gdal-3.2.0/swig/java/java.opt 配置 JAVA_HOME 路径:
#
# Java Stuff
#JAVA_HOME = "C:\Program Files\Java\jdk1.6.0_16"
#JAVA_HOME = /usr/lib/jvm/java-6-openjdk/
#JAVA_HOME = /usr/lib/jvm/java-7-openjdk-amd64/
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
JAVA_HOME = /usr/local/jdk1.8.0_261/
编译
cd gdal-3.2.0/swig/java/
make
make install
make成功,在当前文件夹下生成了 gdal.jar 和 一堆 *.so 文件。
添加动态链接库
把/gdal/gdal-3.3.2/swig/java/下的.so文件拷贝到/usr/local/lib/下去:
执行:# cp /gdal/gdal-3.3.2/swig/java/*.so /usr/local/lib/
因为之前安装gdal的时候,配置的 /etc/profile中库指向的是/usr/local/lib
gdal.jar打包到maven
gdal.jar拷贝到本地项目根目录下
然后在项目pom文件中引用:
<dependency>
<groupId>org.gdal</groupId>
<artifactId>gdal</artifactId>
<version>3.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/.idea/libraries/gdal.jar</systemPath>
</dependency>
问题
问题
1、编译gdal时,出现:
/gdal-3.1.1/.libs/libgdal.so: undefined reference to `sqlite3_column_origin_name'
/gdal-3.1.1/.libs/libgdal.so: undefined reference to `sqlite3_column_table_name'
解决办法:sqlite3需要配置一个宏:
cd ./sqlite-autoconf-3320300
找到./sqlite3.c文件,添加
#define SQLITE_ENABLE_COLUMN_METADATA 1
如下:
#define SQLITE_CORE 1
#define SQLITE_AMALGAMATION 1
#ifndef SQLITE_PRIVATE
# define SQLITE_PRIVATE static
#endif
#define SQLITE_ENABLE_COLUMN_METADATA 1
/************** Begin file ctime.c *******************************************/
/*
然后再:
./configure
make
sudo make install
2、编辑proj从报错
configure: error: Package requirements (sqlite3 >= 3.11) were not met:
是因为缺少sqlite3相关库,解决办法:
yum -y install sqlite-devel
3、make 编译gdal报错jpeg2000dataset.cpp:35:10: fatal error: jasper/jasper.h: No such file or directory
解决办法:
下载jasper:http://download.osgeo.org/gdal/jasper-1.900.1.uuid.tar.gz
安装:参考官网
安装:
wget http://download.osgeo.org/gdal/jasper-1.900.1.uuid.tar.gz
tar xvf jasper-1.900.1.uuid.tar.gz
cd jasper-1.900.1.uuid
./configure
make
make install
等待编译完成,在bashrc文件中添加库链接:
vi ~/.bashrc
在最后添加如下:
export PATH=$PATH:/usr/local/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
保存应用:
:wq
source ~/.bashrc
再去重新make GDAL