基于 geopandas DataFrame 几何图形聚合栅格数据

发布于 2025-01-11 17:40:10 字数 667 浏览 0 评论 0原文

情况
我有两个数据集:

  1. 使用 rioxarray 加载的栅格数据,一个 xarray.DataArray
  2. 一个带有 geometries 指示的 geopandas.DataFrame 1. 数据集中的区域

两个数据集中的地理数据位于相同的 CRS (EPSG:4326) 中。

问题
对于 2. 中的每个条目,我想聚合 1. 中与特定几何图形重叠的所有值。有点像使用几何图形的 .group-by() + .sum()

当前 WIP 方法
xagg 已经做到了这一点,不幸的是在我的一个子集上速度很慢当我尝试在完整数据集上使用它时,数据集和规模会更糟。

问题
有没有一种简单而有效的方法可以在Python中做到这一点? (该解决方案不需要准确地复制 xagg 的结果。)

Situation
I have two datasets:

  1. Raster data loaded using rioxarray, an xarray.DataArray
  2. An geopandas.DataFrame with geometries indicating areas in the 1. dataset

The geo data in both datasets are in the same CRS (EPSG:4326).

Problem
For each entry in 2. I want to aggregate all values from 1. which overlap with the specific geometry. Kind of like an .group-by() using the geometries + .sum().

Current WIP approach
The package xagg does that already, is unfortunately slow on a subset of my dataset and scales worse when I try to use it on my full dataset.

Question
Is there an simple and efficient way to do this in Python?
(The solution wouldn't need to replicate the results from xagg accurately.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏天碎花小短裙 2025-01-18 17:40:10

WRT 你的评论是我用来做你想做的事情的一些伪代码。在这种情况下,正在执行的函数输出文件。如果这一点不明显,那么如果您只有 1 个大光栅和 1 个大多边形文件,策略将不会有帮助。该方法假定平铺数据并使用索引系统将正确的栅格与覆盖的多边形进行匹配。完整的例子有点超出了单一答案的范围。但如果您询问具体情况是否有问题,我可以尽力提供帮助。除了 dask 的良好文档之外,这里还有很多其他帖子以及 dask 延迟示例。

results_list = []

for f in raster_file_list: 

    temp_list = dask.delayed(your_custom_function)(f, your_custom_function_arg_1, your_custom_function_arg_2)
    results.append(temp_list)
    
results = dask.compute(*results_list, scheduler='processes')

WRT your comment here is some pseudo code I've used to do what you're after. The function being executed outputs files in this case. If it's not obvious this, strategy isn't going to help if you just have 1 big raster and 1 big poly file. This method assumes tiled data and uses an indexing system to match the right rasters with the overlaying polys. The full example is kind of beyond the scope of a single answer. But if you ask specifics if you have issues I can try to assist. In addition to dask's good documentation, there are lots of other posts on here with dask delayed examples.

results_list = []

for f in raster_file_list: 

    temp_list = dask.delayed(your_custom_function)(f, your_custom_function_arg_1, your_custom_function_arg_2)
    results.append(temp_list)
    
results = dask.compute(*results_list, scheduler='processes')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文