在使用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所示。

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

图2 Java配置界面

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

Driver: GTiff/GeoTIFF
Size is 8499, 3403

……………………………………………………华丽的分割线…………………………………………………
……………………………………以下内容更新于2013年1月30日…………………………………………

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

import org.gdal.gdal.Band;
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 = "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());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<10/*iYSize*/; i++){band.ReadRaster(0, i, iXSize, 1, buf);  //读取一行数据// 下面是输出像元值,为了方便,我只输出了左上角 10×10的范围内的数据for(int j=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, 

Java使用GDAL相关推荐

  1. java实现gdal栅格矢量化_gdal栅格矢量化 - osc_lfs4vsih的个人空间 - OSCHINA - 中文开源技术交流社区...

    #include "gdal_alg.h" 栅格矢量化功能用于将栅格数据生成矢量数据,通常用于分类图像.GDAL库中使用函数GDALPolygonize()或者函数GDALFPol ...

  2. java 使用GDAL读取

    一.windows环境下: 1.下载编译好的文件:http://download.gisinternals.com/sdk.php 2.dll文件的两种使用方式: 1.把release-xxxx/bi ...

  3. JAVA调用GDAL实现影像格式转换,以tif to jpg为例

    前言 本文简单实现java调用GDAL实现影像格式转换. package Marcus.com;import org.gdal.gdal.Dataset; import org.gdal.gdal.D ...

  4. java使用GDAL将shp文件转为geojson文件

    java使用GDAL将shp文件转为geojson文件 代码如下(示例): //将shp文件转为geojson文件//shp文件所在的位置String strVectorFile = "E: ...

  5. java实现gdal栅格矢量化,《GDAL源码剖析与开发指南》一一1.5 GDAL源码目录

    本节书摘来自异步社区出版社<GDAL源码剖析与开发指南>一书中的第1章,第1.5节,作者:李民录 更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.5 GDAL ...

  6. java gdal_Java GDAL 环境配置

    一.简介 GDAL是栅格和矢量地理空间数据格式的转换器库,由开源地理空间基金会根据X / MIT样式的开源许可证发布.作为一个库,它为调用的应用程序提供了所有支持格式的单个栅格抽象数据模型和单个矢量抽 ...

  7. Java 使用GDAL 读写 shapefile

    阅读目录 读取shp文件,并把它转化为json 写shp文件 回到顶部 读取shp文件,并把它转化为json import org.gdal.ogr.*; import org.gdal.ogr.Dr ...

  8. Java gdal .mif/.mid文件读取

    上一篇研究了 Windows10 64位 Python读取.mif/.mid文件并转成txt 今天研究一下Java读取MIF. 俩种解决办法: (1)Python程序读取.mif/.mid转成txt, ...

  9. gdal java api_Java使用GDAL库

    GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用抽象数据模型来表达所支持的各种文件格式.它还有一系列命令行 ...

最新文章

  1. jquery中一些容易忽略的方法
  2. [转发]项目修复-把有麻烦的项目带向成功
  3. maven <skip></skip>属性
  4. ft232r usb uart驱动 win7_新电脑想装WIN7,技术员让装WIN10,不是忽悠你,是有原因的...
  5. php imagemagick 文档,调用ImageMagick的PHP函数中文文档
  6. 用SQL语句向表格中插入数据
  7. 小技巧来助阵 玩转Chrome浏览器
  8. azure webjob java_使用 WebJobs 运行后台任务 | Azure Docs
  9. iOS开发造轮子 | 通用占位图
  10. 关于mono的编译与安装
  11. 构建高性能ASP.NET站点 开篇
  12. UICollectionViewDelegateFlowLayout 使用
  13. jQuery的回调管理机制(二)
  14. windows 任务栏点击无反应,电脑没有任务栏怎么办
  15. 如何排查带宽超过限制?
  16. 想深入学习计算机需要看哪些经典书籍?
  17. C# 一些學習小筆記及技巧
  18. 科兴与香港大学临床试验中心研究团队和香港港怡医院合作,在中国香港启动奥密克戎特异性灭活疫苗加强剂临床试验
  19. 使用 Google Guava Striped 实现基于 Key 的并发锁
  20. DQ坐标轴锁相环(pll)

热门文章

  1. notepad出现中文显示方格处理方法
  2. app 如何接收遥控信息_如何选购红外接收头?华新告诉你产品的标准
  3. linux getopt源码,linux getopt()
  4. 深度学习声纹识别_kaldi/语音识别ASR/声纹识别SRE/资源汇总
  5. python画彩色螺旋线_Python turtle 绘制彩色螺旋线
  6. 【Spring框架】全集详解
  7. ❤️Mybatis开发中什么是多对一处理、一对多处理?
  8. vue启动项目报错 Couldn‘t find preset “es2015“ relative to directory
  9. ubuntu之录屏软件kazam的安装
  10. 漫游飞行_除了防打扰,手机飞行模式还有这些作用