Python 介绍三 ——Gdal

 
一、安装
安装GDAL可不是那么幸运的事儿,还是有点麻烦。Python2.3,python2.4的版本有安装包,而python2.5版本就没有安装包,得自己编译,因为gdal是C++写的模块,编译时必需安装vs.net2005,还是有点麻烦的。
一般来讲,必须包括三个文件/文件夹,gdal-1.4.0(是编译好的gdal)、gdal(这是一个路径的链接,将其链接到gdal-1.4.0文件夹中,只是一个简单的文本)拷到C:/Python25/Lib/site-packages目录下,注意gdal-1.4.0名字不能改(打开gdal看看,你就知道为什么),将gdal-140(gdal-140可从网上直接下的,可用于C++接口的,用于python时还必须与gdal-1.4.0的配合才行。)拷到一定的目录下,并将这一目录添加到PATH中既可。此外,如果你用的是python2.5,还必须安装numeric用于2.5才行,本来Numeric是用于2.4的,2.5得自已搞一个才行,否则装不上去。
二、概述
包括gdal和ogr的库,gdal支持超多的栅格的格式,因此很受欢迎的,如在设计数字图像处理的计算算法时很管用,ogr是支持矢量格式,ogr是建立在gdal的基础上,只有装了gdal才能用的。
三、功能介绍
先来个例子说明吧。
import gdal
dataset=gdal.Open( "a.jpg" )
band = dataset.GetRasterBand( 1 )
a=band.ReadAsArray( 100 , 100 , 5 , 5 , 10 , 10 )
Open>>gdal.Open()打开一个文件。
GetRasterBand(1)>>获得第一波段的数据。可见GDAL与地理数据关系很紧密的,也是按波段的数据来组织的。
ReadAsArray( 100 , 100 , 5 , 5 , 10 , 10 )>> 将读出图片某一波段一定范围的数字表示。
 
    再看看另一个程序,不完整,但足已说明其主要功能了。
Band1=self.dataset1.GetRasterBand(BandNumber1)
Band2=self.dataset2.GetRasterBand(BandNumber2)
Array1=Band1.ReadAsArray(0,0,self.Width,self.Height)
Array2=Band2.ReadAsArray(0,0,self.Width,self.Height)
Array3=Array1+Array2
driver=gdal.GetDriverByName("GTiff")             NewImage=driver.Create(self.OutFile,self.Wid,self.Heig,1,options=["INTERLEAVE=PIXEL"])            NewImage.WriteRaster(0,0,self.Wid,self.Heig,Array3.tostring(),self.Wid,self.Heig,band_list=[1])
 
    主要完成两个波段的相加。
GetDriverByName>>产生一个驱动,这是生成数据集的前提条件。
Create>>产生一个空的数据集。
WriteRaster>>将数据(Array3)写进数据集。
 
    再写个例子,涉及栅格数据的投影问题。
dataset=gdal.Open( "utm.tif" )
x=dataset.GetProjectionRef()
NewImage=driver.Create( "outpututm.tif" ,Width,Height, 3 ,options=[ "INTERLEAVE=PIXEL" ])
NewImage.WriteRaster( 0 , 0 ,Width,Height,Array1.tostring(),Width,Height,band_list=[ 1 ])
NewImage.SetGeoTransform( [ 592485 , 200 , 0 , 3494382 , 0 , - 200 ] )
NewImage.SetProjection(x)
以上过程,生成一幅图-- outpututm.tif,并且将它的投影设为与utm.tif的投影一样,其中, [ 592485 , 200 , 0 , 3494382 , 0 , - 200 ]是配准的结果,分别包括左上角的坐标,及X轴、y轴的分辨率。(这个与jpw,tfw,bpw的文件内容是一致的。)
GetProjectionRef()>>获得utm.tif图像的投影信息。
SetGeoTransform()>>设置左上角起始点的坐标,实际上就是配准的过程了。
SetProjection(x)>>设置投影。
不过,还是有点晕,这个投影的转换过程实际是没有涉及重采样的过程,也不知误差会有多大,还没验证。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值