gdal java读取dxf文件 gdal读取tif_gdal java读取dxf文件


一、gdal介绍

GDAL(Geospatial Data Abstraction Library)是一个读写空间数据(这里的空间数据包括栅格数据和矢量数据)的开源库。其最核心的两个功能:GDAL 提供对多种栅格数据的支持和OGR 提供对矢量数据格式的读写支持。具体支持的数据类型可以从官方文档中查询到。官方文档的链接:

GDAL - GDAL documentationgdal.org


栅格数据(raster data)由按行和列(或格网)组织的像元(或像素)矩阵组成,其中的每个像元都包含一个信息值,数据结构更加简单,即由像元组成矩阵结构,其中的像元值表示坐标,可以表示连续表面以及执行表面分析。矢量数据(vector data)利用点,线,面的形式来表达现实世界,数据结构紧凑,冗余度低,表达精度高。


gdal java读取dxf文件 gdal读取tif_数据读取_02


二、初识栅格数据的读写

利用gdal读取栅格数据还是很方便的,具体实现代码如下:


import os
from osgeo import gdal
from osgeo import ogr
import numpy as np
import matplotlib.pyplot as plt

# 打开数据
filepath = r'./LC81270372014355LGN00_clip'    #路径请结合实际情况
ds = gdal.Open(filepath)
# 查看参数和属性
dir(ds)      #利用dir 可以查看ds的相关可操作的函数、属性或者类


数据读取成功后,可以进一步进行操作,如查看数据源信息,投影坐标信息,波段数据信息等,具体代码如下:


print(ds.GetMetadata()) #数据源信息
print(ds.GetProjection()) #数据投影信息
print(ds.GetGeoTransform()) #仿射信息

# 影像数据基本情况 波段数、行、列等
print(ds.RasterCount)  #波段数
print(ds.RasterXSize)  #行
print(ds.RasterYSize)  #列

# 影像数据读取
band1 = ds.GetRasterBand(1)   #波段的indice起始为1,不为0
img_data = ds.ReadAsArray()   #将影像数据读取为数组
img_data.shape                #查看数据shape
img_datatype = band1.DataType


利用gdal写数据,相较于读数据,要稍微复杂一些。首先要明确写入数据的驱动类型,然后创建一个数据dataset,需要包含写入数据文件名,行、列、波段书、数据类型等。创建好之后,定义dataset坐标投影信息及仿射信息,最后写入数据,具体实现代码如下:


Driver = gdal.GetDriverByName('GTiff')    #明确写入数据驱动类型
# 创建dataset
out_ds = Driver.Create('output.tif',ds.RasterXSize,ds.RasterYSize,ds.RasterCount,img_datatype)
out_ds.SetProjection(ds.GetProjection())        #投影信息
out_ds.SetGeoTransform(ds.GetGeoTransform())    #仿射信息
for i in range(1,ds.RasterCount+1):             #循环 逐波段写入
    out_band = out_ds.GetRasterBand(i)
    out_band.WriteArray(img_data[i,:,:])
out_ds.FlushCache()
del out_ds


后续,我会具体介绍不同的栅格数据(遥感图像的)读写操作,希望各位伙伴多多支持。