在使用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. Label 的作用是什么,是怎么用的?
  2. [转贴]超过80%的80后大学生不知道自己将来要干什么
  3. cockpit代替secureCRT
  4. 如何自行找出 SAP Spartacus 查询用户信息的 API Service 类
  5. async,await执行流看不懂?看完这篇以后再也不会了
  6. POJ1177 Picture 线段树+离散化+扫描线
  7. java web tcp长连接超时时间_常用java web容器http长连接超时设置
  8. 瑞幸咖啡自曝虚假交易 22 亿,App 反冲 TOP 1
  9. 用Grafana为Elasticsearch做日志分析
  10. 修改 系统文件夹 名称 视频设备
  11. oracle中变量前加冒号_oracle变量的定义和使用【转】
  12. JVM、JRE、JDK、Java SE、Java EE、Java ME
  13. OpenDDS简单示例,轻松入门
  14. 免费的SQL Server监控工具
  15. 零基础学习用labview制作温度采集系统
  16. 计算机学科生物知识与能力,2018下全国教资统考高中生物学科知识与能力试题(科目三)答案...
  17. 二年级语文备课组集体备课观摩活动
  18. 关于PIN只能更改不能删除的解决方法
  19. 高德地图 瓦片地图上画圆,线段等
  20. 什么是死锁和如何解决死锁

热门文章

  1. mysql续型_mysql续集(查询部分)
  2. winform ctrl键单击多选_鼠标各键在CAD中的运用,左右键常用,但滚轮这个功能不一定用过...
  3. python获取网页标题_Python2获取网页标题
  4. TortoiseGit:参考文章
  5. jmeter 导出聚合报告_使用Jmeter聚合报告生成对比图表
  6. 华为虚拟home键关闭_华为手机音量忽大忽小,不妨打开这3个开关调整,音量变大变清晰...
  7. Qt之问题: Unknown module(s) in QT: multimedia
  8. 小学教育专业有计算机课程吗,小学计算机课程教学工作总结
  9. python 使用lxml中的xpath 和 scrpay中的xpath的区别
  10. 参加西安第三届数字油田高端论坛暨第二届国际学术会议