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所示。

45163724_1.png

图1 Eclipse界面

importorg.gdal.gdal.Dataset;

importorg.gdal.gdal.Driver;

importorg.gdal.gdal.gdal;

importorg.gdal.gdalconst.gdalconstConstants;

publicclassGDALTestApp {

/**

* @param args

*/

publicstaticvoidmain(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所示,然后确定。

45163724_2.png

图2 Java配置界面

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

Driver: GTiff/GeoTIFF

Size is 8499, 3403

……………………………………………………华丽的分割线…………………………………………………

……………………………………以下内容更新于2013年1月30日…………………………………………

之前的例子没有显示怎么读取数据,今天补上,先上代码吧:

importorg.gdal.gdal.Band;

importorg.gdal.gdal.Dataset;

importorg.gdal.gdal.Driver;

importorg.gdal.gdal.gdal;

importorg.gdal.gdalconst.gdalconstConstants;

publicclassGDALTestApp {

/**

* @param args

*/

publicstaticvoidmain(String[] args)

{

String fileName_tif = "E:\\Austra\\DEM\\srtm_65_18.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());

intiXSize = hDataset.getRasterXSize();

intiYSize = hDataset.getRasterYSize();

System.out.println("Size is "+ iXSize +", "+ iYSize);

Band band = hDataset.GetRasterBand(1);

//这里是DEM数据,所以声明一个int数组来存储,如果是其他数据类型,声明相应的类型即可

intbuf[] =newint[iXSize];

for(inti=0; i<10/*iYSize*/; i++)

{

band.ReadRaster(0, i, iXSize, 1, buf);  //读取一行数据

// 下面是输出像元值,为了方便,我只输出了左上角 10×10的范围内的数据

for(intj=0; j<10/*iXSize*/; j++)

System.out.print(buf[j] + ", ");

System.out.println("\n");

}

hDataset.delete();

// 可选

gdal.GDALDestroyDriverManager();

}

}

Java中,读取数据用的接口是ReadRaster,这个函数已经针对所有的数据类型进行了重载,所以读取某种类型的数据,只需要声明对应的类型即可。运行上面的程序,会输出下面的内容:

Driver: GTiff/GeoTIFF

Size is 6001, 6001

64, 64, 64, 63, 62, 62, 64, 63, 61, 61,

61, 62, 63, 66, 64, 64, 63, 63, 62, 61,

62, 61, 63, 64, 65, 62, 63, 61, 63, 64,

64, 63, 63, 62, 63, 65, 64, 64, 62, 63,

64, 61, 63, 63, 63, 64, 65, 63, 62, 64,

64, 63, 62, 63, 62, 62, 63, 64, 64, 64,

64, 63, 63, 64, 65, 62, 61, 63, 62, 63,

62, 64, 63, 64, 63, 60, 62, 61, 62, 63,

62, 65, 63, 63, 62, 60, 64, 63, 61, 62,

63, 65, 64, 63, 62, 61, 64, 63, 60, 61,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值