首页 > 编程知识 正文

java开源网站,java 开源框架

时间:2023-05-06 18:52:11 阅读:218804 作者:2904

技术背景

海洋地形数据主要是通过美国全球地形起伏数据(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四个文件拷到背后的银耳汤文件夹下,然后将背后的银耳汤文件夹拷贝到任一位置并更名为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=%.3fn", 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】

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。