问题标签 [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 回答
1793 浏览

python - 如何使用 rasterio 将光栅图像 (TIFF) 的大小调整为 800x600?

我想制作一个光栅图像的子集并将其放在 800x600 的尺寸中。我正在查看 Rasterio 食谱,但它似乎不允许我输入诸如 800x600 之类的尺寸。这是我一直在看的:https ://mapbox.s3.amazonaws.com/playground/perrygeo/rasterio-docs/cookbook.html

另外,我看到了这个并认为它可能会起作用:https ://rasterio.readthedocs.io/en/latest/topics/windowed-rw.html

我使用了阅读器代码片段:

但是,当我运行它时,它给了我错误消息:

不知道是什么导致了这个错误。我在想 Windows 是 rasterio 中的一个内置函数,我可以简单地调用它并调整图像大小以制作一个子集。

我还希望能够在屏幕上显示新的 800x600 图像(使用 Spyder),但不确定这是如何完成的。

任何和所有的帮助都将不胜感激,并将投票赞成。

谢谢

0 投票
0 回答
1054 浏览

python - 使用 python 库 Rasterio 创建 TIFF 图像的子集,然后显示并保存?

我有两张光栅图像,一张来自波段 4,最后是 B4,另一张来自波段 5,最后是 B5。我想将 B5 栅格子集化为 800x600,然后显示它并将其保存为 GeoTiff。然后我想计算 NDVI(我假设我需要 B4 和 B5 来执行此操作,但不确定)。然后我想显示 B5 栅格的 NDVI 子集。显示它并将其另存为 GeoTiff。

我将如何创建 TIFF 光栅图像的 800 x 600 像素子集?我还想获取该 TIFF 并为该子集生成 NDVI 图像。

注意:我正在使用 Landsat 图像。图像在文件标题的末尾有 B5。

到目前为止我所做的:

我想使用 Spyder 或 Jupyter 笔记本来显示它。所以我想使用 matplotlib 并做了流动的代码:

这样做会生成一个 800x600 matplotlib 窗口,但它都是紫色的,不知道为什么它会产生这个。

现在我希望能够显示这个 800x600 的图像。然后,我想在该子集 800x600 图像上执行 NDVI。然后显示带有 NDVI 显示的子集 800x600 图像。

我知道公式是:NDVI = (NIR - red) / (NIR + red)

但是我如何从这张 Landsat 图像中提取 NIR 和红色呢?

我的尝试:

当我为乐队运行该代码时,我收到错误:

当我运行此代码时:

它返回“1”。

所以这意味着陆地卫星图像只有一个波段?但是为了做 NDVI,我不需要 3 个波段吗?

我正在考虑编写一些这样的代码来从该栅格中获取 NDVI。但不知道如何去提取乐队:

这段代码不起作用,因为波段没有被定义为任何东西,所以我不知道如何定义波段来获取 NDVI。

在此之后,我不确定如何显示保存渲染图像。

0 投票
1 回答
377 浏览

python - 收到错误“具有多个元素的数组的真值不明确”?

我正在尝试使用 Rasterio、Matplotlib 和 Numpy 绘制光栅图像。尽管我所做的可能与实际的 python 代码和错误无关且一般。

这是代码:

带有回溯的完整错误消息:

我正在使用此处找到的代码并尝试使用我自己的 TIF 文件在我的机器上重现它。它说“以全分辨率拉取图像子集”。链接: https ://github.com/geohackweek/tutorial_contents/blob/ba5e9443137a9aca87cdcdcd70e9e6a237cc64ba/raster/notebooks/rasterio-landsat-aws.ipynb

我在 IDE Sypder 上运行并使用 Python 3.6

请,任何帮助表示赞赏。

谢谢

0 投票
1 回答
1998 浏览

python - 使用 matplotlib 和 Rasterio 我正在尝试将栅格保存为 GeoTIFF 并拒绝它?

我已经能够使用 matplotlib 绘制和显示我的光栅图像。那部分是成功的。我坚持的部分能够以某种方式保存该情节。对于 rasterio,我发现了两个有用的教程:

https://rasterio.readthedocs.io/en/latest/topics/windowed-rw.html

https://www.earthdatascience.org/courses/earth-analytics-python/multispectral-remote-sensing-in-python/export-numpy-array-to-geotiff-in-python/

我已经计算了一个名为 NDVI 的函数,通过 matplotlib 我可以使用以下代码以我想要的方式显示它。但是当我将文件保存为 GeoTIFF 时,我桌面上的图像全是黑色的。我也计划重新投影数据,并且我已将代码注释掉。

这是我的代码:

这是我使用 matplotlib 时 NDVI 的样子(我想将它作为 GeoTIFF 文件保存到我的桌面):

NDVI

感谢您的任何帮助!

0 投票
1 回答
994 浏览

python - 如何使用 Rasterio 从多数据集 MODIS 图像中打开特定数据集(波段)?Rasterio IndexError:波段索引超出范围

如何使用 Rasterio 从多数据集 MODIS 图像中打开特定数据集?

我在 GitHub 上发布了一些示例数据:https ://github.com/SteveObert/rasterIO_question/tree/master/data

如果我打开一个只有一个波段的 MODIS HDF 文件,下面的代码会按照我想要的方式工作:

输出:

但是,如果我尝试打开包含多个数据集的 MODIS HDF 文件,则会收到错误“Rasterio IndexError: band index out of range”,如下所示。

上面代码中的错误如下所示:

最终,我想将栅格剪辑到 shapefile。只要 Modis 图像只有一个波段,在本例中为“NDSI_Snow_Cover”,下面的代码就会按照我想要的方式工作。

0 投票
0 回答
500 浏览

python - 用光栅读取 4 波段图像

我正在尝试查看具有 4 个波段的 tif 卫星图像。我想删除最后一个波段 (NIR) 并仅查看 RGB 图像,因此我试图将 NIR 从图像的其余部分中分离出来。这是我的代码

我提供了代码的屏幕截图和我得到的输出截屏

只显示 1 个波段似乎很好,但知道为什么当我尝试将 RGB 波段显示在一起时,我总是看到带有黄色和白色配色方案的图像吗?一开始我以为是 cmap 问题,但即使我添加了 'cmap="gray"',图像的颜色仍然保持不变。

0 投票
1 回答
232 浏览

python - 如何计算人口与土地覆盖类型百分比之间的皮尔逊相关系数(r)?

我的以下代码输出似乎是每个人口普查区的字典列表,这基本上就像一个指定的土地区域。我能够计算出人口和几种不同土地覆盖类型的百分比。现在我想计算每种土地覆盖类型的人口和百分比之间的皮尔逊相关系数。

我要做的是提取/过滤字典列表,以便我可以将人口与每种土地覆盖类型进行比较。因此,皮尔逊相关性:

  • 人口和开发土地
  • 人口荒地
  • 人口和林地
  • ...

这是代码:

运行此代码后,我会得到以下字典列表,我想知道如何提取/过滤人口并将其与每个土地覆盖百分比进行比较,并最终计算 Pearson r 相关性。

有什么想法可以循环遍历,然后根据每种土地覆盖类型的百分比计算总人口变量的 Pearson r?

谢谢

0 投票
1 回答
283 浏览

python - 在 rasterio 中索引 numpy 数组和打开文件之间的权衡

使用时,rasterio我可以执行以下任一方法来获取栅格的单个波段:

它会打印出来:

但我很好奇哪个“更好”?我假设索引到 numpy 数组比从文件中读取要快得多,但是打开其中一些大型卫星图像会占用大量内存。有什么好的理由去做其中一个吗?

0 投票
0 回答
308 浏览

python - 如何使用 rasterio 模块创建一个用圆点填充的 numpy 数组?

我正在使用 rasterio 模块将光栅图像传输到 numpy 数组中。从那个 numpy 数组中,我想提取一个子数组,它只包含一个圆的点。圆将从给定点(起始 numpy 数组的索引 x 和 y)和半径(以米为单位的距离)定义。Rasterio 可以处理每个单元格表示的真实距离(米而不是索引)。但我找不到一个函数来获取距给定点特定距离的单元格。

0 投票
1 回答
307 浏览

python - 如何将 GeoTIFF 投影到指定区域范围?

我正在尝试在指定区域显示 GeoTIFF 文件。我想要做的是将多波段 GeoTIFF 文件投影到指定区域。

我的 GeoTIFF 是包含欧洲地区 3 个波段的卫星图像。我想将它投影到中欧地区(由纬度/地段定义的范围)。我一直在尝试使用 rasterio 解决这个问题,但到目前为止我一直很不走运。这是我执行后得到的:

without_geotiff

如您所见,生成的图像不包含我的 GeoTIF。知道如何解决这个问题吗?