Python 3.x 提取几何图形(形状)中的数据

Python 3.x 提取几何图形(形状)中的数据,python-3.x,geometry,shapefile,python-xarray,Python 3.x,Geometry,Shapefile,Python Xarray,我有一个NetCDF数据集,我通常使用xarray函数调用它。我最近一直在对数据集进行横断面分析,看起来像这样(水平蓝线之间的区域是用于分析的横断面): 目前,我只能提取垂直或水平横断面内的数据(因为它们很容易提取) 但是现在我想在数据集中选择一个特定的形状,我想对其进行分析。这些形状可能不是对称的或直线的。下面是一些示例: 基本上,这些形状可以是不规则的(每个点的坐标已知) 是否可以提取数据集/值(带坐标),特别是针对感兴趣的区域 仅使用ARCMaps clip函数或Google Eart

我有一个NetCDF数据集,我通常使用xarray函数调用它。我最近一直在对数据集进行横断面分析,看起来像这样(水平蓝线之间的区域是用于分析的横断面):

目前,我只能提取垂直或水平横断面内的数据(因为它们很容易提取)

但是现在我想在数据集中选择一个特定的形状,我想对其进行分析。这些形状可能不是对称的或直线的。下面是一些示例:

基本上,这些形状可以是不规则的(每个点的坐标已知)

是否可以提取数据集/值(带坐标),特别是针对感兴趣的区域


仅使用ARCMaps clip函数或Google Earth引擎clip函数,这些步骤就很容易执行。但我无法在python中使用这些函数(因为我希望所有步骤都使用python)。有人能提供一些建议吗?如果有人知道任何与xarray有很好集成的包,那就太好了。

我使用了一个
rioxarray
包,它似乎与xarray有很好的集成,而且很容易实现

将xarray作为xr导入
将rioxarray作为rx导入
Treecover=xr.open_rasterio('/home/chandra/data/Treecover_MOD44B_2000_250m_AMAZON.tif'))
[输出]:
[668112074数据类型为float64的值]
协调:
*波段(波段)int64 1
*y(y)浮动64 13.71 13.71 13.71 13.71…-58.35-58.35-58.36-58.36
*x(x)浮动64-81.38-81.37-81.37-81.37…-34.63-34.63-34.62
属性:
变换:(0.002245788210298804,0.0,-81.37613580017715,0.0,-0.0022。。。
crs:+init=epsg:4326
回复:(0.002245788210298804,0.002245788210298804)
已平铺:0
nodatavals:(nan,)
几何图形=[
{
“类型”:“多边形”,
“坐标”:[[
[-46.23140155225633, -21.53505449239459],
[-44.91304217725633, -20.221175092759253],
[-70.22554217725633, 1.5816072875439455],
[-71.36812030225633, 0.5271132528460204]
]]
}
]
Treecover_clipped=Treecover.rio.clip(几何体,Treecover.rio.crs)
[输出]:
数组([[nan,nan,…,nan,nan],
[nan,nan,…,nan,nan],
...,
[nan,nan,…,nan,nan],
[nan,nan,…,nan,nan]]
协调:
*波段(波段)int64 1
*y(y)浮动64 1.58 1.578 1.575 1.573…-21.53-21.53-21.53-21.53
*x(x)浮动64-71.37-71.36-71.36…-44.92-44.92-44.91
空间参考int64 0
属性:
变换:(0.0022457882102988043,0.0,-71.36665774687539,0.0,-0.0。。。
_填充值:南
网格映射:空间映射

我建议使用
matplotlib
,更具体地说是
matplotlib.Path
。它有不同的方法
包含点
包含点
。你可以找一些例子。@msi\u gerva。谢谢你的输入。看来
matplotlib.Path
可以与
numpy
配合使用数组作为
xarray
的实现似乎有点棘手(或者说太间接了)。我刚刚提出了一个解决方案,使用了一个包
rioxarray
,它与
xarray
有很好的集成。我在下面发布答案。