java gdal dataset.readraster_Gdal浅析(一)读取栅格数据到Dataset

本文介绍了使用Java GDAL库读取栅格数据的步骤,包括注册GDAL、打开文件、获取Dataset、理解Dataset成员以及常用方法如获取驱动、投影、波段数等。示例代码展示了如何操作波段和获取数据大小。

gdal读取栅格数据的流程分析

今天,利用gdal写了一个demo用来读取栅格数据、并显示其波段、色调等信息。

在此分享一下,我对gdal读取栅格数据的流程的浅析。

1、使用gdal的第一步肯定是先要注册。使用静态函数gdal.AllRegister();

2、gdal将所有的栅格数据都是读取到一个它自己定义的dataset中,所以OSGeo.GDAL.Dataset ds=new OSGeo.GDAL.Dataset();

3、使用open函数 ds = gdal.Open(inputFileName, gdalconst.GA_ReadOnly);

4、至此,全路径为inputFileName的栅格文件已经读到ds中,下面介绍OSGeo.GDAL.Dataset类

总体来说,OSGeo.GDAL.Dataset实际上就是一系列相关联的波段的组合。

其共有成员如下:

virtual  ~GDALDataset ()

int  GetRasterXSize (void)

int  GetRasterYSize (void)

int  GetRasterCount (void)

GDALRasterBand *  GetRasterBand (int)

virtual void  FlushCache (void)

virtual const char *  GetProjectionRef (void)

virtual CPLErr  SetProjection (const char *)

virtual CPLErr  GetGeoTransform (double *)

virtual CPLErr  SetGeoTransform (double *)

virtual CPLErr  AddBand (GDALDataType eType, char **papszOptions=NULL)

virtual void *  GetInternalHandle (const char *)

virtual GDALDriver *  GetDriver (void)

virtual int  GetGCPCount ()

virtual const char *  GetGCPProjection ()

virtual const GDAL_GCP *  GetGCPs ()

virtual CPLErr  SetGCPs (int nGCPCount, const GDAL_GCP *pasGCPList, const char *pszGCPProjection)

virtual CPLErr  AdviseRead (int nXOff, int nYOff, int nXSize, int nYSize, int nBufXSize, int nBufYSize, GDALDataType eDT, int nBandCount, int *panBandList, char **papszOptions)

CPLErr  RasterIO (GDALRWFlag, int, int, int, int, void *, int, int, GDALDataType, int, int *, int, int, int)

int  Reference ()

int  Dereference ()

GDALAccess  GetAccess ()

int  GetShared ()

void  MarkAsShared ()

CPLErr  BuildOverviews (const char *, int, int *, int, int *, GDALProgressFunc, void *)

上述代码是C语言的,有比较烦躁的指针。不过只要大家仔细思考,还是可以很轻松的将其转换成C#语言的。

5、其中我们要使用的、或者说比较常用的方法有以下几个。

获取驱动,例如对于tif文件的驱动就是GeoTiff。

virtual GDALDriver *  GetDriver (void)

获取投影方式,在.NET中,返回值是string类型的投影描述语句

virtual const char *  GetProjectionRef (void)

获取波段数目,这个值决定了下面的分别获取每一个波段的循环次数

int  GetRasterCount (void)

for (int iBand = 1; iBand <= ds.RasterCount; iBand++)

{

Band band = ds.GetRasterBand(iBand);//获取制定波段

}

int  GetRasterXSize (void)

int  GetRasterYSize (void)

获取波段的size

最后一个:

CPLErr  BuildOverviews (const char *, int, int *, int, int *, GDALProgressFunc, void *)

这个是在ds上构建Overviews,我猜想是建类似金字塔的抽取,或称之为视图。目前还在摸索,希望高手指教!

6、这次就先研究到Band,下次从Band入手,继续摸索。

Demo的效果图如下:

--

9e293802d9981f8061c33c14cce526da.png

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值