直接从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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java访问私有字段而不使用getter方法?   使用PowerMockito在JavaEWSAPI中模拟测试拉订阅   启动活动时未保存java首选项并清除变量   java如何在servlet中检索子域?斯普林有帮手吗   java使用Docker从命令行构建Android项目   java Android,ActionBar后退按钮(setDisplayHomeAsUpEnabled(true))重新创建父活动   java在重用FileOutputStream时应该关闭流吗?   java使用RESTAPI将文件上载到s3 bucket   Java SOAP Web服务应用程序中的mysql用户登录方法不工作   java使用多个数字计算百分比并转换为长   java Android SQLiteDatabase查询忽略空格   java如何在Javafx中比较两个字段文本   java错误:未设置java_HOME,在Eclipse安装后找不到   java在安卓中保存对象   java如何使用jaxws从返回List<Object>的服务中检索值   java Google OAuth2 JWT令牌验证异常   SpringMVC中的JavaUTF8编码问题,当从JSP表单发送POST请求中的越南语信件时   java从webview重定向到安卓应用程序   JUnit 5中多个扩展的java顺序