技术背景

海洋地形数据主要是通过美国全球地形起伏数据(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 packagegdalDemo;2

3 importorg.gdal.gdal.Band;4 importorg.gdal.gdal.Dataset;5 importorg.gdal.gdal.Driver;6 importorg.gdal.gdal.gdal;7 importorg.gdal.gdalconst.gdalconstConstants;8 importorg.gdal.ogr.ogr;9

10 public classgealTest {11

12 public static voidmain(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】

java gdal开源库_基于GDAL库,读取.grd文件(以海洋地形数据为例)Java版相关推荐

  1. java cms 开源系统_基于Java的开源CMS系统选择

    CMS概述 对于网站CMS系统而言,基于PHP的是主流,如Drupal/Joomla在各个主流虚拟机提供商上都是标准配置,也被广泛使用. 但如果你拥有Java团队,或者项目目标是想建立一个企业网使用的 ...

  2. 模型计算算力_8核人工智能开源主板_基于 BITMAIN AI 计算模组_3.5寸

    模型计算算力_8核人工智能开源主板_基于 BITMAIN AI 计算模组_3.5寸 产品概述 产品特点 1. 超高性能,超低功耗 2.体积小,接口丰富,灵活扩展 3.开发环境友好,工具链完备 应用场景 ...

  3. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  4. java编程用户输入两个数字_编写一个Java应用程序,要求从键盘输入两个整数,计算这两个数据...,编写一个Java应用程序,要求从键盘输入一个数,判断该数是不...

    导航:网站首页 > 编写一个Java应用程序,要求从键盘输入两个整数,计算这两个数据...,编写一个Java应用程序,要求从键盘输入一个数,判断该数是不 编写一个Java应用程序,要求从键盘输入 ...

  5. java程序如何解代数方程_基于代数方程库Algebra.js解二元一次方程功能示例

    本文实例讲述了基于代数方程库Algebra.js解二元一次方程功能.分享给大家供大家参考,具体如下: 假设二元一次方程如下: x + y = 11 x - y = 5 解方程如下: 测试algebra ...

  6. css 解析 开源库_干货 | python库大全,全面高效

    黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Python开发点击右侧关注,探讨技术话题!来源丨速学Pythonhttps://mp.weixin.qq.com ...

  7. python人脸识别库_基于facenet的实时人脸识别系统

    facenet_facerecognition opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别 Abstract:本文记录了在学习深度学习过程中,使用o ...

  8. 安装esp8266库_基于ESP8266,DIY低成本智能远程开关灯小装置

    废话不多说,直接开始 首先需要必备的环境arduino ide,Blinker app(应用商店均可下载)以及必备的一些库(aduino ide1.8.7及以上版本,esp8266拓展,blinker ...

  9. dio设置自定义post请求_基于dio库封装flutter项目的标准网络框架

    网络框架是每个应用的基石,封装一个好的网络框架不仅是项目的一个好的开始,并且直接影响到随后项目的稳定性和可扩展性.在移动开发的各个端都有非常赞的网络请求基础框架,比如Android的okhttp库.s ...

  10. python pptx库中文文档_基于python-pptx库中文文档及使用详解

    个人使用样例及部分翻译自官方文档,并详细介绍chart的使用 一:基础应用 1.创建pptx文档类并插入一页幻灯片 from pptx import Presentation prs = Presen ...

最新文章

  1. 程序员加班崩溃,过路外卖小哥主动帮忙改代码,网友直呼太暖了!
  2. python中bytearray和java中byte[]的区别_Python经典面试题:说说Python中xrange和range的区别?...
  3. 全字库说文解字字体_整理了10款免费商用中文字体,超好用
  4. HDU 2009 求数列的和
  5. html文字字号不改变,如何在不改变div大小的情况下更改HTML / css中的字体大小?...
  6. [当人工智能遇上安全] 1.人工智能真的安全吗?浙大团队外滩大会分享AI对抗样本技术
  7. [系统安全] 三.IDA Pro反汇编工具初识及逆向工程解密实战
  8. ActionScript 3.0 概要
  9. 数据库事务原理详解-Spring 事务的传播属性
  10. 提供一个Android原生的Progress——SwipeToRefreshLayout下拉刷新时的等待动画
  11. FreeRTOS内核实现05:支持多优先级
  12. Thinking in Java 13.7扫描输入
  13. vB编程VB源码 VB读取EXCEL工作薄某个表中数据 ADODB.Recordset
  14. 机器人入门困惑之资料总结
  15. windows下批量创建txt文件
  16. 含泪整理最优质立秋海报设计素材,你想要的这里都有
  17. 新浪微博开发平台基于php的sdk包(包含demo程序),新浪微博API开发简介之用户授权(PHP基础篇)_PHP教程...
  18. ENSPAC的web配置直接转发
  19. css3制作广告栏效果的疑问? 1
  20. 如何用代码画出一幅好看的画

热门文章

  1. JPSE问题诊断指导四——hprof
  2. python面向对象编程指南 豆瓣_Python面向对象编程
  3. python mpi_MPI Python环境搭建
  4. 英特尔服务器主板g41性能,英特尔g41显卡好用吗 英特尔g41显卡评测【详解】
  5. 使用外网访问Flask项目
  6. 联想本装系统stop:0X000007B错误[转]
  7. 计算机程序可以通过删除卸载嘛,怎么彻底卸载电脑软件程序多种方法
  8. Android获取外网IP地址
  9. 【odoo】odoo使用阿里邮箱配置邮件系统
  10. 总结十八:程序员激励办法——激励理论