问题标签 [rasterio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
465 浏览

python - 如何使用 python 将 RGB 多波段 GeoTIFF 投影到指定区域范围?

我想从多波段 GeoTIFF 绘制和 RGB 图像(因为它是卫星图像)并将其投影到指定的区域范围。

最近,我使用“georaster”成功地使用单波段栅格做到了这一点。但是,当我尝试对多波段栅格执行相同操作时,在调用image = georaster.MultiBandRaster(file, bands='all', load_data=extent)以与 georaster.SingleBandRaster 相同的方式加载子集数据后,出现以下错误:

回溯(最后一次调用):文件“slovakia.py”,第 15 行,在 image = georaster.MultiBandRaster(file, band='all', load_data=extent) File "/usr/local/lib/python2.7/ dist-packages/georaster/georaster.py",第 1249 行,init if self.r == None: ValueError: 具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

当我无法加载多波段数据的子集时,我尝试从 GeoTIFF 中包含的 3 个波段创建 RGB 图像,而不将其投影到底图。然而,结果相当令人惊讶。

投影到指定区域的单波段栅格: Single_band

由 3 个波段组成的 RGB 图像: RGB_image

GeoTIF 的波段 2 如下所示: band2_greyscale

我将欢迎有关 MultiBandRaster 的子集数据加载MultiBandRaster 的 RGB 绘图的任何帮助或建议。我也将感谢任何其他有关如何执行此操作的 python 方法。

0 投票
0 回答
1122 浏览

python - 屏蔽感兴趣区域后减小光栅大小

我尝试用rasterio

rasterio用来掩盖感兴趣的区域,然后将其余范围定义为无数据

我的目标是保持原始光栅边界,选择感兴趣的区域,但减小图像大小

我使用以下精彩的文档 Masking a raster using a shapefile from rateriowebsite

我从原始程序更改了以下行

结果就在这里,正是我想要的:

结果

但是新的光栅文件大小保持不变!我希望将图像尺寸减小到一半或更多!

所以我尝试了以下操作:

gdal_translate -of GTiff -a_nodata 0 input.tif output.tif

或者

gdal_translate -of GTIFF -scale -a_nodata 0 myVrt.vrt output.tif

两者都没有帮助

0 投票
1 回答
95 浏览

python - 我应该如何将响应对象输入与需要文件路径的代码集成?

我有一些代码可以获取我保存在计算机上的 JP2 图像文件并将它们转换为 numpy 数组。代码如下所示:

我编写了一个脚本,可以使用请求来获取这些图像:

我现在的问题是如何合并这些方法?仅使用 rasterio.open(image_response) 对我来说失败了,我应该如何尝试实现我的目标?响应对象是否具有固有的文件路径?任何帮助是极大的赞赏

0 投票
1 回答
976 浏览

python-3.x - 逐块迭代加载图像,其中块部分重叠

尝试处理大型卫星图像(~10GB)。为了节省内存,图像块 ( block/ tile) 在每次迭代中都被加载到内存中。

平铺图像

示例代码如下:

但是,对于任何需要内核明智操作的处理(例如任何类似的convolve过滤器smoothing),这都会导致在块边缘附近的处理中出现问题。为了解决这个问题,每个块应该稍微重叠,如下所示:

重叠放大

我的目标是按以下方式加载块,其中可以根据需要调整重叠量。

重叠瓷砖

到目前为止,我还没有找到任何直接的方法来实现这一点。我将不胜感激在这方面的任何帮助。

0 投票
2 回答
1637 浏览

python - 将栅格像元大小与另一个栅格匹配

我一直在使用此处发布的代码将栅格的像元大小与另一个栅格相匹配。更具体地说,我有 20m 单元格\像素大小的 sentinel-2 波段(jp2 格式)波段,我想将其拆分\重新采样\调整大小为 10m。到目前为止,我所做的非常有效的是使用我添加的链接中的脚本,我在其中输入了两个栅格:20m 波段和另一个 10m 波段。它们都具有相同的空间范围,相同的 crs。我现在遇到的奇怪问题是这个脚本仍然可以工作,但是输出光栅大小约为 500mb,而原始大小约为 1000kb。我不明白为什么会发生这种情况。有任何想法吗?我在 win 10 机器上使用 python 3。如果您有另一种使用gdal或拆分单元格大小的方法rasterio或其他 python 库,它也可以提供帮助。我只想将每 20m 像素拆分为 4 个 10m 像素,具有相同的值,即每个新的 10m 单元格将具有与 20m 单元格相同的值。我正在发布我正在使用的代码:

0 投票
0 回答
675 浏览

python - 计算旋转坐标空间中 numpy 数组的区域统计信息

蓝光::

我在使用rasterstats包计算带有旋转数组的区域统计数据时遇到问题。我猜问题出在我的仿射矩阵上,但我不完全确定。下面是仿射变换矩阵和输出:

在此处输入图像描述

背景:

我正在为地下水流模型创建文件,并且需要使用来自波多黎各农业水资源管理门户网站的一些 .csv 数据来计算每个模型网格单元的区域统计数据。这些数据可用于许多参数(例如 ET、tmax、tmin、precip 等)的每日时间步长。这些文件没有地理参考,但是可以使用辅助文件来指定每个单元格的经度/纬度,然后可以使用以下方式进行投影pyproj

在计算区域统计数据之前,我需要创建将行/列坐标与投影 x/y 坐标相关联的仿射变换。我指定 6 个参数来Affine使用仿射库创建对象:

在哪里:

  • a = 像素宽度
  • b = 行旋转(通常为零)
  • c = 左上像素左上角的 x 坐标
  • d = 列旋转(通常为零)
  • e = 像素的高度(通常为负)
  • f = 左上角像素的左上角的 y 坐标

(来自https://www.perrygeo.com/python-affine-transforms.html

生成的仿射矩阵看起来很合理,我尝试将行和列旋转作为弧度和度数传递,结果几乎没有变化。链接到网格特征:grid_2km.geojson

在此处输入图像描述

此外,使用仿射对象转换的 x、y 值对与使用 来自本机 lon、lat 值的值对之间存在差异pyproj

在此处输入图像描述

0 投票
0 回答
836 浏览

python-3.x - ModuleNotFoundError: No module named 'rasterio' even 它是从 cmd 安装的

我使用 Python 3.7.2 和 Pycharm 作为 IDE。我正在尝试导入 rasterio 包,但它在 Pycharm ModuleNotFoundError 中给了我一个错误:没有名为“rasterio”的模块。甚至我已经使用 GDAL 从 cmd 安装了它,正如这里提到的https://rasterio.readthedocs.io/en/stable/installation.html。显然,我想要使用的所有软件包都与 Pycharm 存在相同的问题,因为即使我通过 cmd 安装它们,它也总是给我这个错误。我尝试像使用 Numpy 一样从 Pycharm 安装 rasterio 包,但它给了我一个 GDAL 问题。对于 numpy 它工作得很好。谢谢。

0 投票
0 回答
35 浏览

python - 如何使用 gdal2tiles.py 或 rasterio 更新作为覆盖多个国家的非常大底图的一部分的特定栅格图块?

我使用预渲染了一个跨越多个国家的自定义基础地图gdal2tiles.py,它就像一个魅力。但是当有数据更新时,我不知道如何只更新特定的图块,比如底图的 1/3。所以我在这里有两个问题

1) 如何为预渲染的底图跨多个缩放级别更新特定图块?

2)是否可以在查询时间内动态渲染光栅图块(来自卫星图像)?

任何形式的帮助表示赞赏

我已经尝试仅渲染更新数据的特定图块,但它最终破坏了两个不同数据集之间的共享图块(例如两个陆地卫星图块)。

0 投票
0 回答
676 浏览

python - 如何将 xarray MFdataset 转换为多个 geotiff?尝试了两种方法,到目前为止都失败了

我正在尝试将多个 NetCDF4 文件转换为 GeoTIFF 栅格,同时将数据从每日频率降低到每月频率(忽略 NaN)。不幸的是,当我想将数据写入 geotiff 时,我遇到了错误。

使用 xarray 打开和下采样文件很容易(如果与 R 相比,功能很棒,这是我习惯使用的)只保留一个变量,如我所愿并从每日值计算每月平均值,但是,我被困在试图将我的结果导出/转换为多个 *.tif 文件。

甚至尝试将其转换为多个 NetCDF3 文件,因为我可以轻松地将它们转换为 geotiff,但也失败了。

输入数据是每日频率的 4018 个 ESA 土壤水分“.nc4”文件,覆盖全球,但每一步都不完整(每天只有条带充满数据,其余为空/NA),所以我想忽略 NaN用于计算每月平均值。

总的来说,这 4018 天总计长达 132 个月(11 年),而我的 xarray 数据集由下面的代码生成,似乎正如预期的那样表明了这一点。

我在这里收到以下警告:“默认缩减维度将在 xarray 0.12 之后更改为分组维度。要消除此警告,请显式传递 dim=xarray.ALL_DIMS。skipna=skipna, allow_lazy=True, **kwargs)” 不确定如果这很重要,但当我打印monthly_data xarray 时结果似乎还可以。

现在我收到了这个错误:“IndexError: tuple index out of range” 我认为错误在于我尝试使用它的方式,而不是在脚本上,尽管我看不到在哪里。

Robin Wilson 制作的脚本非常适合我的目标,从这里获得:https ://github.com/robintw/XArrayAndRasterio/blob/master/rasterio_to_xarray.py

我看到错误追溯到第 84 行:

和第 122 行:

所以,看来我的时间很暗,我希望能算作乐队,这不是剧本所期望的,所以它失败了。而且我显然搞砸了“文件名”参数。

不知道怎么...我可以使用这个脚本或修改它来做我想做的事吗?(保存132个“.tif”文件对应132级时间dim)

我认为我缺乏 python 知识阻碍了我,因为我在两个过程中都遇到错误(xarray 到 GeoTIFF 或 xarrayDataset 到 NetCDF3 经典)。

当我检查monthly_data 时,我看到了我的预期:只有“sm”变量、所有三个维度和132 个时间“值”。

有人可以帮忙吗?

0 投票
1 回答
2282 浏览

python - PyCharm 中的 rasterio 和 gdal DLL 加载失败

我有一个安装了 rasterio 的 conda 环境和一大堆其他库,包括 gdal。

当我做:

在 jupyter notebook 上,它加载得很好,我可以利用它的方法等。

当我在 PyCharm 上使用相同的环境和解释器执行完全相同的操作时,我会出现以下错误:

我很难理解为什么会这样,因为它在 jupter notebook 中加载得很好。