直接从tar文件处理卫星数据。
pyrsgis的Python项目详细描述
用于遥感和地理信息系统的python
Pyrsgis是读取、操作和导出地理光栅的强大模块。该模块建立在gdal库的基础上,对各种地理空间分析非常有效。未经我明确许可,请勿将本包装用于商业用途。欢迎研究人员/院士提供反馈和技术支持。
doi:https://doi.org/10.5281/zenodo.2552934
该模块能够从下载的tar文件本身处理landsat数据。
请在下面找到几个示例:
让我们使用下面的代码导入模块import pyrsgis as rg
我们将首先从读取光栅开始并执行一些基本操作。
如果不使用以下命令,请确保当前工作目录与光栅文件所在的目录相同:import os
os.chdir("d:/yourDirectory")
如果目录已设置为文件位置,请跳过以上两行代码。
要读取叠加卫星图像的波段,
(1)对于所有波段:dataSource, yourArray = raster.read(file, bands='all')
返回包含投影信息的数据源和numpy数组。
要从堆叠图像中读取波段列表,请执行以下操作:
(2)波段列表:dataSource, yourArray = raster.read(file, bands=[2, 3, 4])
它将波段2、3和4返回为三维numpy数组。
要从堆叠图像中读取特定波段:
(3)对于特定波段:dataSource, yourArray = raster.read(file, bands=2)
它将带数2返回为二维numpy数组。
要从上述读取数据中导出频带,
(1)对于所有波段:raster.export(yourArray, dataSource, "sample_extracted.tif", dtype='int', bands='all')
默认情况下,dtype = 'int'
,要导出浮点类型数组(例如ndvi),请使用dtype = 'float'
(2)波段列表:raster.export(yourArray, dataSource, "sample_extracted.tif", bands=[2, 3, 4])
(3)对于特定波段:raster.export(yourArray, dataSource, "sample_extracted.tif", bands=3)
直接读取tar文件:yourData = rg.readtar("yourFilename.tar.gz")
类似地,可以读取堆叠的tiff文件:yourData = rg.readtif("yourFilename.tif")
在上述代码之后,可以评估光栅的各种特性。print(yourData.rows)
print(yourData.cols)
将给出行数和列数。
可以使用以下方法检查频带数:print(yourData.nbands)
还可以确定卫星传感器。print(yourRaster.satellite)
如果上面的代码正确地显示了正确的卫星传感器,那么这应该很容易实现:print(yourRaster.bandIndex)
这将正确显示可用波段的波段号。
任何特定的波段都可以使用:yourBand = yourData.getband(bandNumber)
上面的代码将频带作为数组返回,可以使用以下命令进行可视化:display(yourBand)
或
display(yourData.getband(bandNumber))
地图可以直接保存为图像。
也可以指定地图标题:display(yourBand, maptitle='Your Map Title')
提取的频带可以使用以下命令导出:yourData.export(yourBand, "yourOutputFilename.tif")
这会将提取的波段保存到同一目录。
如果导出浮点数据类型(带有十进制值的光栅),请显式定义该数据类型,默认值为“int”:yourData.export(yourBand, "yourOutputFilename.tif", datatype='float')
ndvi(标准化差分植被指数)可以很容易地计算出来。yourndvi = yourData.ndvi()
这将返回ndvi数组,该数组可以使用与上述波段相同的命令导出。
任何标准化差分indev都可以使用:yourIndex = yourData.nordif(bandNumber2, bandNumber1)
在后端执行(波段2-band1)/(波段2+band1)。
yourRaster.export(yourndvi, 'yourNDVI.tif', datatype='float')
注意,ndvi是float数据类型,而raw bands是integer数据类型。浮点数据导出在硬盘上使用更多空间,因此默认设置为整数。因此,若要导出任何浮点数据类型,应显式传递参数。
光栅文件也可以很容易地转换成csv文件,这是统计分析所必需的。from pyrsgis.convert import rastertocsv
指定光栅文件所在的目录yourDir = "D:\\yourRasterFolder"
rastertocsv(yourDir, filename='yourFilename.csv')
通常,光栅中的nodata或空值会变成随机负值,可以使用以下方法移除负值:rastertocsv(yourDir, filename='yourFilename.csv', negative=False)
有时光栅中的nodata或null值变为“127”或“65536”,也可以通过显式声明将其删除rastertocsv(yourDir, filename='yourFilename.csv', remove=[127, 65536])
这是一个试用和检查过程,请检查生成的csv文件是否存在此类问题
csv文件中的错误行表示所有光栅中的值为零且占用大量存储空间的单元格,可以使用以下命令消除它:rastertocsv(yourDir, filename='yourFilename.csv', badrows=False)