java adraster

阅读: 评论:0

java adraster

java adraster

摘要:

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小时内删除。

标签:gdal   java   readraster   dataset
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23