摘要:
1.1. 注意
在转换GTiff的过程中,需要注意一点。利用默认的参数在生成gtiff的过程中有可能出问题。比如用
Toggle line numbers 1dataset = gdal.Open("e:/gisdata/gtif/sd.tif")
2width = dataset.RasterXSize
3height = dataset.RasterYSize
4data = dataset.ReadAsArray(0,0,width,height)
5driver = gdal.GetDriverByName("GTiff")
6driver.CreateCopy("e:/sd.tif",dataset,0)
代码转出的GTiff文件虽然在ESRI的系列软件和其他一些看图程序中可以正常显示,但是在windows图像浏览器中不能正常显示,更重要的是在java的jai中不能正常显示。究其原因,是GDAL在导出的时候把284号域(PlanarConfiguration域)设成了2,也就是RRRR……,GGGG……,BBBB……模式显示。但是在一些软件中只认值1,也就是RGBRGBRGBRGB……,所以上面的代码需要修改成
Toggle line numbers 1dataset = gdal.Open("e:/gisdata/gtif/sd.tif")
2width = dataset.RasterXSize
3height = dataset.RasterYSize
4data = dataset.ReadAsArray(0,0,width,height)
5driver = gdal.GetDriverByName("GTiff")
6driver.CreateCopy("e:/sd.tif",dataset,0,["INTERLEAVE=PIXEL"])
默认的INTERLEAVE是BAND(tags[284]=2),我们把它改成PIXEL(tags[284]=1)。这样就可以正常显示了。 更多的创建参数看这里。
1.2. 小例子
下面介绍一个建立3波段GTiff的小例子。当然凭空想个数据出来是很难的一件事情,除非我可以飞到几万米高空瞻仰地球母亲:),于是我只好从另一个GTiff中读数据出来然后保存成另一个GTiff文件,做个意思吧。
import gdal
import Numeric
dataset = gdal.Open("e:/gisdata/gtif/sd.tif")
width = dataset.RasterXSize
height = dataset.RasterYSize
datas = dataset.ReadAsArray(0,0,width,height)
driver = gdal.GetDriverByName("GTiff")
tods = driver.Create("e:/gisdata/sd2.tif",width,height,3,options=["INTERLEAVE=PIXEL"])
tods.WriteRaster(0,0,width,string(),width,height,
band_list=[1,2,3])
这是一个很简单的另存遥感图像的方法(不包括空间信息)。这里尤其注意Create函数中的options= [ " INTERLEAVE=PIXEL " ] 参数。没有这个参数,波段像素组织会错。保存出的图像只有横向的1/3。而且彩色完全不对 。
当然datas可以另外组织,比如这样也可以
datas = dataset.ReadAsArray(0,0,width,height)
datas = atenate(datas)
当然从波段里读取数据再拼接成完整的图像更是可以的。
datas = []
for i in range(3):
band = dataset.GetRasterBand(i+1)
data = band.ReadAsArray(0,0,width,height)
datas.shape(data,(1,-1)))
datas = atenate(datas)
注意:从波段中读取的数组要拼接组织成这种形式才可以正确导出。不然整个图像看起来就像冥王星上的地形图。(这里有一点很奇怪,既然是PIXEL组织的,居然是形式而不是通常认为的RGB,形式)。如果你需要各个波段输入的话,可以循环到各个波段中,然后用Band对象的WriteRaster来操作,而非在Dataset中调用WriteRaster。
下面再看看空间参考如何导入。比如我们导入一个NAD27的空间参考,我们可以这样写
import osr
tods.SetGeoTransform( [ 444720, 30, 0, 3751320, 0, -30 ] )
srs = osr.SpatialReference()
srs.SetUTM( 11, 1 )
srs.SetWellKnownGeogCS( 'NAD27' )
tods.SetProjection( srs.ExportToWkt() )
呵呵,于是这个Tiff就变成了GTiff。空间参考系统是NAD27,起点(444720,3751320),像素大小30的TIFF了。当然直接这样写肯定是不对的。空间转换参数要进行配准运算,然后确定。我们这里就只是写个意思,说明可以这样写入文件罢了。我这里用的空间参考是美国常用的。至于中国的空间参考,你要西安还是北京,就看你高兴了。当然前提是先配准。
2. 反馈
如果您发现我写的东西中有问题,或者您对我写的东西有意见,请一定要发邮件跟我讲,Email( linux_23@163 )
本文发布于:2024-02-04 19:00:18,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170714240458589.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |