基于GDAL库,读取.grd文件(以海洋地形数据为例)Java版
技术背景
海洋地形数据主要是通过美国全球地形起伏数据(GMT)获得,数据格式为grd(GSBG)二进制数据,打开软件通过是Surfer软件,surfer软件可进行数据的编辑处理,以及进一步的可视化表达等功能操作;由于Surfer软件不支持二次开发,没有提供相应的SDK供开发者进行使用,所以这一切只能通过相应类似的技术进行实现,首先,数据的读取,如何通过编程实现数据的读取操作呢?这里就要说一下GIS软件所使用的一个开源库-GDAL,GDAL库的具体解释资料,请查阅官方网站【https://www.gdal.org/index.html】,由于后期要进行数据入库的步骤,所以本文提供的是一种采用Java语言进行读取的方法,前面的GDAL库的编译方法请参考博客1【GDAL从源码到JAVA应用】,下面具体讲一下环境配置。
首先讲GDAL库文件进行整理,将jdal.jar、gdalalljni.dll、gdalalljni.exp、gdalalljni.lib四个文件拷到bin文件夹下,然后将bin文件夹拷贝到任一位置并更名为gdal,然后将该文件夹,设置入系统环境变量path内,这一步完成即成功了一半;然后打开Eclipse,创建项目gdalDemo,右击项目选择“构建路径”(Build Path),然后选择“configure Build Path”,再选择“Java Build Path”,选择“库”,点击“添加额外的JAR文件”,具体如下图所示

添加完成以后,创建Java类,开始编辑读取代码,话不多说,代码奉上
1 package gdalDemo;
2
3 import org.gdal.gdal.Band;
4 import org.gdal.gdal.Dataset;
5 import org.gdal.gdal.Driver;
6 import org.gdal.gdal.gdal;
7 import org.gdal.gdalconst.gdalconstConstants;
8 import org.gdal.ogr.ogr;
9
10 public class gealTest {
11
12 public static void main(String[] args) {
13
14 // 注册所有的驱动
15 ogr.RegisterAll();
16 // 为了支持中文路径,请添加下面这句代码
17 gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");
18 // 为了使属性表字段支持中文,请添加下面这句
19 gdal.SetConfigOption("SHAPE_ENCODING","");
20
21 String fileName_tif = "E:/test/E135N30_sf.grd";
22
23 //使用只读方式打开图像
24 Dataset hDataset = gdal.Open(fileName_tif, gdalconstConstants.GA_ReadOnly);
25 if (hDataset == null)
26 {
27 System.err.println("GDALOpen failed - " + gdal.GetLastErrorNo());
28 System.err.println(gdal.GetLastErrorMsg());
29 System.exit(1);
30 }
31
32 //输出图像的格式信息
33 Driver hDriver = hDataset.GetDriver();
34 System.out.println("Driver: " + hDriver.getShortName() + "/" + hDriver.getLongName());
35
36 //输出图像的大小和波段个数
37 int iXSize = hDataset.getRasterXSize(); //列数
38 int iYSize = hDataset.getRasterYSize(); //行数
39 int iBandCount = hDataset.getRasterCount(); //元素(因素)数
40 System.out.println("Size is " + iYSize + " x " + iXSize + "\n" + "BandCount: " + iBandCount);
41
42 Band band = hDataset.GetRasterBand(1);
43 int itype = band.GetRasterDataType();
44 System.out.println("dataType: "+itype);
45
46 //输出图像的坐标和分辨率信息
47 double [] adfGeoTransform = new double[6];
48 hDataset.GetGeoTransform( adfGeoTransform);
49 System.out.printf( "Origin =(%.6f,%.6f)\n",adfGeoTransform[0], adfGeoTransform[3]);
50 System.out.printf( "PixelSize = (%.6f,%.6f)\n",adfGeoTransform[1], adfGeoTransform[5]);
51
52 //获取该波段的最大值最小值,如果获取失败,则进行统计
53 Double [] bGotMin = new Double [2];
54 Double [] bGotMax = new Double [2];
55 band.GetMinimum( bGotMin);
56 band.GetMaximum( bGotMax);
57 if(bGotMin[0] != null && bGotMax[0] != null){
58 System.out.printf( "Z value Min=%.3f,Max=%.3f\n", bGotMin[0], bGotMax[0]);
59 }
60
61 System.out.println("\nexample Data(10x10):");
62 //读取一行数据
63 float buf[] = new float[iXSize];
64
65 for(int i=0; i<10/*iYSize*/; i++)
66 {
67 band.ReadRaster(0, i, iXSize, 1, buf); //读取一行数据
68
69 // 下面是输出像元值,为了方便,我只输出了左上角 10×10的范围内的数据
70 for(int j=0; j<10/*iXSize*/; j++)
71 System.out.print(buf[j] + ", ");
72 System.out.println("\n");
73 }
74
75 hDataset.delete();
76
77 // 关闭驱动
78 gdal.GDALDestroyDriverManager();
79 }
80
81 }
读取结果

至此,文件读取完成。
致谢
感谢李民录老师的指导,以及相关技术博主的技术分享,谢谢!
参考博客
1、GDAL从源码到JAVA应用【https://blog.csdn.net/lw19910913/article/details/77746164】
2、Build Instructions for GDAL/OGR In Java【http://trac.osgeo.org/gdal/wiki/GdalOgrInJavaBuildInstructions】
3、GDAL-JavaAPI【https://gdal.org/java/overview-summary.html】
4、Java使用GDAL【https://blog.csdn.net/liminlu0314/article/details/8395622】
基于GDAL库,读取.grd文件(以海洋地形数据为例)Java版的更多相关文章
- 基于GDAL库,读取.grd文件(以海洋地形数据为例)C++版
技术背景 海洋地形数据主要是通过美国全球地形起伏数据(GMT)获得,数据格式为grd(GSBG)二进制数据,打开软件通过是Surfer软件,surfer软件可进行数据的编辑处理,以及进一步的可视化表达 ...
- 使用C#版本的gdal库打开hdf文件
作者:朱金灿 来源:http://blog.csdn.net/clever101 最近应同事的请求帮忙研究下使用C#版的gdal库读取hdf文件,今天算是有一点成果,特地做一些记录. 首先是编译C#版 ...
- 基于GDAL库,读取海洋风场数据(.nc格式)c++版
经过这一段时间的对海洋数据的处理,接触了大量的与海洋相关的数据,例如海洋地形.海洋表面温度.盐度.湿度.云场.风场等数据,除了地形数据是grd格式外,其他的都是nc格式的数据.本文将以海洋风场数据为例 ...
- 关于基于GDAL库QT软件平台下C++语言开发使用说明
背景前提 地理空间数据抽象库(GDAL)是一个用于读取和编写栅格和矢量地理空间数据格式的计算机软件库,由开源地理空间基金会在许可的X / MIT风格免费软件许可下发布. 作为一个库,它为调用应用程序提 ...
- 基于GDAL库,读取.nc文件(以海洋表温数据为例)C++版
对于做海洋数据处理的同学,会经常遇到nc格式的文件,nc文件的格式全称是NetCDF,具体的详细解释请查询官网[https://www.unidata.ucar.edu/software/netcdf ...
- 基于GDAL库海洋表温日平均计算工具设计与实现 C++版
技术背景 在对物理海洋数据处理过程中,表层温度是众多要素中的一种,本文书要是针对海洋表温数据批量日平均处理的一个工具设计.首先要在对当前的SST数据文件作一下简要的说明,SST全称为sea surfe ...
- C++调用GDAL库读取并输出tif文件,并计算斑块面积输出景观指数:CSD
部分源码选自GDAL库的官方网址:www.gdal.org,其余的代码为笔者自己编写. // readfile.cpp : 定义控制台应用程序的入口点. // /* part of the codes ...
- GDAL库——读取图像并提取基本信息
GDAL库是一个跨平台的栅格地理数据格式库,包括读取.写入.转换.处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持).它使用了一个单一的抽象数据模型就支持了大多数的栅格数据.这里有GDAL ...
- gdal库对ENVI文件的一点支持不好
作者:朱金灿 来源:http://blog.csdn.net/clever101 使用GDALOpen函数打开ENVI的img文件,如果使用更新的方式即GA_Update会改写对应的hdr文件.改写h ...
随机推荐
- linux 下安装minconda3
一.关于bashrc目录,此文件是隐藏的,如果要打开此文件需要用: vim /root/.bashrc 二.linux下关于防火墙的命令 1.查看防火墙状态 firewall-cmd --state ...
- notepad++加到右键
win10系统左下角点击"开始"->运行->regedit,打开注册表编辑器 在HKEY_CLAsssEs_RooT→ * → shell 下,在shell下,新建项命 ...
- 详谈 Java工厂 --- 静态工厂 【简单工厂模式】
1.前言 什么是工厂模式? 就是为了尽可能将代码的耦合度降低而产生的设计模式. 这篇随笔讲解静态工厂的思路和具体操作. 2.总结 (1)静态工厂又称 简单 工厂模式 ,是最最简单的工厂模式. (2)优 ...
- Kong 微服务网关在 Kubernetes 的实践
来源:分布式实验室译者:qianghaohao本文主要介绍将 Kong 微服务网关作为 Kubernetes (https://www.alauda.cn)集群统一入口的最佳实践,之前写过一篇文章使用 ...
- Numpy实现简单BP神经网络识别手写数字
本文将用Numpy实现简单BP神经网络完成对手写数字图片的识别,数据集为42000张带标签的28x28像素手写数字图像.在计算机完成对手写数字图片的识别过程中,代表图片的28x28=764个像素的特征 ...
- git 重置密码后,本地电脑需要修改git密码
查看用户名git config user.name 查看密码git config user.password 查看邮箱git config user.email 修改密码git config --gl ...
- 【记录一个问题】macos下lldb调试opencv的一个程序,出现“failed to load objfile for”错误,并且无法调试进入opencv的函数
opencv编译使用了Debug版本,打开了BUILD_WITH_DEBUG_INFO=ON选项. 发现问题后,我又在CMAKE_CXX_FLAGS_DEBUG中设置为 -g -ggdb3,在CMAK ...
- HashSet 实现类
HashSet 实现类 通过 HashCode 判断元素是否存在,若存在则不添加,否则添加以此实现唯一性 常用方法 Modifier and Type Method and Description b ...
- 微信小程序入门教程之一:初次上手
微信是中国使用量最大的手机 App 之一,日活跃用户超过3亿,月活跃用户超过11亿(2019年底统计),市场极大. 2017年,微信正式推出了小程序,允许外部开发者在微信内部运行自己的代码,开展业务. ...
- cygwin -- 在windows平台上运行的unix模拟环境
cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购).它对于学 ...