Java运用GDAL

Java使用GDAL

在使用Java调用GDAL之前,先说明一下编译。在编译的时候,需要JRE、Ant和SWIG这三个东西,没有的先下载这两个东西,下载完之后,安装,ANT和SWIG直接解压就行,不用安装。接下来用记事本打开nmake.opt,找到第86行左右的地方,如下:

# SWIG Java settings
!IFNDEF JAVA_HOME
JAVA_HOME = "C:\Program Files\Java\jdk1.6.0_26"
!ENDIF
!IFNDEF ANT_HOME
ANT_HOME=F:\Work\GDAL\gdal_need\apache-ant-1.8.4
!ENDIF
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\win32

将上面的JAVA_HOME和ANT_HOME后面的路径修改为本地Java和Ant的路径,只要修改到主文件夹即可(就是有bin文件夹的那个文件夹),如果文件夹路径有空格的话,把路径用双引号括起来。然后把SWIG的目录也换成本机的目录。接下来就可以编译了。具体步如下:


1、编译Java版本的GDAL:

首先使用命令行,编译C++版本的GDAL,具体步骤参考博客:http://blog.csdn.net/liminlu0314/article/details/6937194,这里使用命令行编译。

编译完成之后,使用cd命令切换到swig目录,然后执行编译,命令依次如下:

#下面三句是编译C++版本的,其实只要第一句即可,后面两句是用来安装的C:\warmerda\bld
nmake /f makefile.vc
nmake /f makefile.vc install
nmake /f makefile.vc devinstall

#接下来是编译Java版本的GDAL
cd swig
nmake /f makefile.vc java
正常情况下,执行完上面的,Java版本的GDAL应该就编译完成了。你会在swig\java目录中看到编译出来的一些文件,主要有下面几个文件:
gdalconstjni.dll
gdaljni.dll
ogrjni.dll
osrjni.dll
gdal.jar
如果有上面的文件的话,那就说明编译成功,如果没看,查看命令行编译的时候输出信息,根据输出信息排除错误重新生成。将上面五个文件以及编译GDAL的时候生成的gdal19.dll拷贝到一个新建的文件夹,用于后续的调用。

2、使用Eclipse新建一个工程,名字叫GDALTest,然后在这个工程中新建一个类叫GDALTestApp完成。打开GDALTestApp.java,修改里面的内容为下面的内容,然后保存,如图1所示。

Java运用GDAL

图1 Eclipse界面

import org.gdal.gdal.Dataset;
import org.gdal.gdal.Driver;
import org.gdal.gdal.gdal;
import org.gdal.gdalconst.gdalconstConstants;

public class GDALTestApp {

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		String fileName_tif = "F:\\Data\\11NOV23034214-P2AS_R3C3-052581320010_03_P001.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());

		System.out.println("Size is " + hDataset.getRasterXSize() + ", "
				+ hDataset.getRasterYSize());

		hDataset.delete();
		
		// 可选
		gdal.GDALDestroyDriverManager();
	}
}
保存完之后,将刚才生成的那些dll和jar文件拷贝到工程所在文件夹中,然后在工程右键,选择Build Path->configure build path,弹出属性对话框,然后切换到libraries标签,点击Add Jars,选择gdal.jar和名字中有ini的dll文件,添加到lib中,如图2所示,然后确定。

Java运用GDAL

图2 Java配置界面

接下来,点击运行,正常情况下,会在控制台输出类似下面的文字,第一行是图像的驱动格式,第二行是图像的大小。

Driver: GTiff/GeoTIFF
Size is 8499, 3403
1楼goodnew前天 11:19
很好,但不知道java调gdal有什么用?难道要写cs系统?还是做一个在线处理系统?
Re: liminlu0314昨天 20:01
回复goodnewnBS的系统啥的,应该还是可以的吧