使用 salem 中的 geojson 文件对 xarray 数据集中的感兴趣区域进行子集化
subsetting the region of interest in a xarray dataset using a geojson file in salem
如果我使用形状文件对 Xarray 数据集中的区域进行子集化,我使用以下方法:
def cookie_cut_shapefile(ds, shapeFile):
shdf = salem.read_shapefile(shapeFile)
ds_subset = ds.salem.subset(shape=shdf)
ds_roi = ds_subset.salem.roi(shape=shdf)
return ds_roi
但是如果我有 GeoJSON 文件,那么我可以使用 salem 库来进行子集化吗?我知道我可以使用 regionmask,但我想使用 salem,因为它已经在项目中使用了。
我想到的将 salem 与 GeoJSON 文件一起使用的解决方法是首先读取 geopandas 中的 GeoJSON 文件,然后将其写入形状文件,然后可以与 salem 一起使用:
df = geopandas.read_file('sample.geojson')
df.to_file("test.shp")
问题是我必须写入磁盘才能完成将 geoJSON 转换为形状文件的工作,而我不想这样做。我如何更优雅地处理这种情况? salem 能否以某种方式直接使用 GeoJSON?
Salem 的子集接受 geopandas 数据帧,因此不需要磁盘上的文件。请参阅文档中的示例 this example,其中我们使用 geopandas DataFrame 作为输入。
它不起作用的一个原因是 geoJSON 文件没有与之关联的坐标系(shapefile 都有)。在这种情况下,您需要自己指定。例如,对于 Plate Carree 投影:
shdf.crs = salem.wgs84
ds_subset = ds.salem.subset(shape=shdf)
如果我使用形状文件对 Xarray 数据集中的区域进行子集化,我使用以下方法:
def cookie_cut_shapefile(ds, shapeFile):
shdf = salem.read_shapefile(shapeFile)
ds_subset = ds.salem.subset(shape=shdf)
ds_roi = ds_subset.salem.roi(shape=shdf)
return ds_roi
但是如果我有 GeoJSON 文件,那么我可以使用 salem 库来进行子集化吗?我知道我可以使用 regionmask,但我想使用 salem,因为它已经在项目中使用了。
我想到的将 salem 与 GeoJSON 文件一起使用的解决方法是首先读取 geopandas 中的 GeoJSON 文件,然后将其写入形状文件,然后可以与 salem 一起使用:
df = geopandas.read_file('sample.geojson')
df.to_file("test.shp")
问题是我必须写入磁盘才能完成将 geoJSON 转换为形状文件的工作,而我不想这样做。我如何更优雅地处理这种情况? salem 能否以某种方式直接使用 GeoJSON?
Salem 的子集接受 geopandas 数据帧,因此不需要磁盘上的文件。请参阅文档中的示例 this example,其中我们使用 geopandas DataFrame 作为输入。
它不起作用的一个原因是 geoJSON 文件没有与之关联的坐标系(shapefile 都有)。在这种情况下,您需要自己指定。例如,对于 Plate Carree 投影:
shdf.crs = salem.wgs84
ds_subset = ds.salem.subset(shape=shdf)