python - 从 proj4 参数构造 cartopy CRS
问题描述
我下载了 MODIS .hdf 文件。用 xarray 加载它,它给了我一个属性ds.Proj4String == ' +a=6378137.0 +b=6356752.3142451793 +no_defs +proj=latlong\n'
。
如何使用该字符串将原始坐标转换为例如纬度/经度?
这是数据的样子:
<xarray.Dataset>
Dimensions: (XDim:mod06: 1503, YDim:mod06: 833)
Dimensions without coordinates: XDim:mod06, YDim:mod06
Data variables:
Cloud_Optical_Thickness (YDim:mod06, XDim:mod06) float32 ...
Attributes:
HDFEOSVersion: HDFEOS_V2.19
StructMetadata.0: GROUP=SwathStructure\nEND_GROUP=SwathStructure\nGROUP=...
CoreMetadata: \nGROUP = INVENTORYMETADATA\n GROUPTYPE = MASTERGROUP...
ArchiveMetadata: GROUP = ARCHIVEDMETADATA\n GROUPTYPE = MASTERGROUP\n\...
Proj4String: +a=6378137.0 +b=6356752.3142451793 +no_defs +proj=lat...
文档proj4_params
告诉我作为键值对传递,所以我去了
ss = ds.Proj4String.split()
proj = {}
for s in ss:
k = s.split('=')
if len(k)==2:
proj[k[0][1:]] = k[1]
print(proj)
并到达{'a': '6378137.0', 'b': '6356752.3142451793', 'proj': 'latlong'}
,但ccrs.CRS(proj)
仍会引发有关globe
缺少属性的错误。
解决方案
尚不支持仅从 proj.4 字符串创建 CartoPy 投影,请参阅此 PR。您使用的 CRS 类本身并不足以在 CartoPy 中创建功能齐全的投影,并且实际上被设计为其他投影的基类。
就您得到的错误而言,globe
无论传入什么,它都是必需的参数proj4_params
。您可以使用以下内容创建Globe
实例:
globe = ccrs.Globe(semimajor_axis=proj.pop('a'), semiminor_axis=proj.pop('b'))
推荐阅读
- c# - 实体框架核心:没有外键的一对多?
- c# - 是什么让 Nullable 类型可以赋值为 null?
- swift - 在 UILongPressGestureRecognizer 中,当开始状态仍为 ON 时,添加的视图不会显示
- r - R Shiny Apps - 如何停止可以从 eval 表达式中删除 OS 文件的 shell 命令
- rust - 如何在结构上与 Rust 中的私有字段匹配?
- bash - Bash:如何根据输入参数调用函数?
- angular - 在 ckeditor 的工具栏上显示提及按钮
- python - 如何不向无效路由路径添加前缀
- javascript - MySQL 会在事务回滚时自动释放连接吗?
- dataframe - 使用带有 Pandas 的 Lambda 在缺少 geopy Nominatim 字典键(引发 KeyError)的列中写入“”值