java 使用gdal_Java使用GDAL
在使用Java調(diào)用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的目錄也換成本機(jī)的目錄。接下來就可以編譯了。具體步如下:
1、編譯Java版本的GDAL:
首先使用命令行,編譯C++版本的GDAL,具體步驟參考博客:http://blog.csdn.net/liminlu0314/article/details/6937194,這里使用命令行編譯。
編譯完成之后,使用cd命令切換到swig目錄,然后執(zhí)行編譯,命令依次如下:
#下面三句是編譯C++版本的,其實(shí)只要第一句即可,后面兩句是用來安裝的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正常情況下,執(zhí)行完上面的,Java版本的GDAL應(yīng)該就編譯完成了。你會在swig\java目錄中看到編譯出來的一些文件,主要有下面幾個文件:
gdalconstjni.dll
gdaljni.dll
ogrjni.dll
osrjni.dll
gdal.jar如果有上面的文件的話,那就說明編譯成功,如果沒看,查看命令行編譯的時候輸出信息,根據(jù)輸出信息排除錯誤重新生成。將上面五個文件以及編譯GDAL的時候生成的gdal19.dll拷貝到一個新建的文件夾,用于后續(xù)的調(diào)用。
2、使用Eclipse新建一個工程,名字叫GDALTest,然后在這個工程中新建一個類叫GDALTestApp完成。打開GDALTestApp.java,修改里面的內(nèi)容為下面的內(nèi)容,然后保存,如圖1所示。
圖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標(biāo)簽,點(diǎn)擊Add Jars,選擇gdal.jar和名字中有ini的dll文件,添加到lib中,如圖2所示,然后確定。
圖2 Java配置界面
接下來,點(diǎn)擊運(yùn)行,正常情況下,會在控制臺輸出類似下面的文字,第一行是圖像的驅(qū)動格式,第二行是圖像的大小。
Driver:?GTiff/GeoTIFF
Size?is?8499,?3403
……………………………………………………華麗的分割線…………………………………………………
……………………………………以下內(nèi)容更新于2013年1月30日…………………………………………
之前的例子沒有顯示怎么讀取數(shù)據(jù),今天補(bǔ)上,先上代碼吧:
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數(shù)據(jù),所以聲明一個int數(shù)組來存儲,如果是其他數(shù)據(jù)類型,聲明相應(yīng)的類型即可
intbuf[]?=newint[iXSize];
for(inti=0;?i<10/*iYSize*/;?i++)
{
band.ReadRaster(0,?i,?iXSize,?1,?buf);??//讀取一行數(shù)據(jù)
//?下面是輸出像元值,為了方便,我只輸出了左上角?10×10的范圍內(nèi)的數(shù)據(jù)
for(intj=0;?j<10/*iXSize*/;?j++)
System.out.print(buf[j]?+?",?");
System.out.println("\n");
}
hDataset.delete();
//?可選
gdal.GDALDestroyDriverManager();
}
}
Java中,讀取數(shù)據(jù)用的接口是ReadRaster,這個函數(shù)已經(jīng)針對所有的數(shù)據(jù)類型進(jìn)行了重載,所以讀取某種類型的數(shù)據(jù),只需要聲明對應(yīng)的類型即可。運(yùn)行上面的程序,會輸出下面的內(nèi)容:
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,
總結(jié)
以上是生活随笔為你收集整理的java 使用gdal_Java使用GDAL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【RDMA】infiniband网卡安装
- 下一篇: SDIO