我正在使用以下软件包:
import pandas as pd
import numpy as np
import xarray as xr
import geopandas as gpd
我有以下存储数据的对象:
print(precip_da)
Out[]:
<xarray.DataArray 'precip' (time: 13665, latitude: 200, longitude: 220)>
[601260000 values with dtype=float32]
Coordinates:
* longitude (longitude) float32 35.024994 35.074997 35.125 35.175003 ...
* latitude (latitude) float32 5.0249977 5.074997 5.125 5.174999 ...
* time (time) datetime64[ns] 1981-01-01 1981-01-02 1981-01-03 ...
Attributes:
standard_name: convective precipitation rate
long_name: Climate Hazards group InfraRed Precipitation with St...
units: mm/day
time_step: day
geostatial_lat_min: -50.0
geostatial_lat_max: 50.0
geostatial_lon_min: -180.0
geostatial_lon_max: 180.0
这看起来如下:
precip_da.mean(dim="time").plot()
我的 shapefilegeopandas.GeoDataFrame
代表一个多边形。
awash = gpd.read_file(shp_dir)
awash
Out[]:
OID_ Name FolderPath SymbolID AltMode Base Clamped Extruded Snippet PopupInfo Shape_Leng Shape_Area geometry
0 0 Awash_Basin Awash_Basin.kml 0 0 0.0 -1 0 None None 30.180944 9.411263 POLYGON Z ((41.78939511000004 11.5539922500000...
如下所示:
awash.plot()
在另一个之上绘制一个,它们看起来像这样:
ax = awash.plot(alpha=0.2, color='black')
precip_da.mean(dim="time").plot(ax=ax,zorder=-1)
我的问题是,如何xarray.DataArray
通过检查经纬度点是否位于存储为 a 的 shapefile 内部来掩盖geopandas.GeoDataFrame
?
所以我只想要那个形状文件中的降水值(毫米/天)。
我想做如下的事情:
masked_precip = precip_da.within(awash)
或者
masked_precip = precip_da.loc[precip_da.isin(awash)]
编辑 1
我曾考虑过使用该rasterio.mask
模块,但我不知道输入数据需要采用什么格式。听起来好像它做了正确的事情:
“使用输入形状创建一个蒙版或填充的数组。像素被蒙版或设置为输入形状之外的 nodata ”
此处从 GIS Stack Exchange 转贴