Cartopy:Albers等面积投影不起作用



我正在尝试在Cartopy中绘制地形光栅。我已经从这个数据库下载了一些GeoTIFF数据样本:https://zenodo.org/record/3940482.然后,我使用Python GDAL库导入数据和元数据:

from osgeo import gdal                                                          
data_object = gdal.Open(path_geotiff)                                       
data_array = data_object.ReadAsArray()                                      
data_transform = data_object.GetGeoTransform()                                                                       
proj_wkt = data_object.GetProjection()  

我需要将投影作为Cartopy对象,这是我使用PyProj库作为中间步骤实现的:

from pyproj.crs import CRS                          
proj_crs = CRS.from_wkt(proj_wkt) 
import cartopy.crs as ccrs
proj_cartopy = ccrs.Projection(proj_crs)

这似乎奏效了,并表明该投影是Cartopy、Albers Equal Area:支持的投影之一

>>> print(proj_cartopy)
PROJCRS["Albers",BASEGEOGCRS["NAD83",DATUM["North American Datum 1983",ELLIPSOID["GRS 1980",6378137,298.257222101004,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4269]],CONVERSION["unnamed",METHOD["Albers Equal Area",ID["EPSG",9822]],PARAMETER["Latitude of false origin",23,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8821]],PARAMETER["Longitude of false origin",-106,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8822]],PARAMETER["Latitude of 1st standard parallel",29.5,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8823]],PARAMETER["Latitude of 2nd standard parallel",45.5,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8824]],PARAMETER["Easting at false origin",0,LENGTHUNIT["metre",1],ID["EPSG",8826]],PARAMETER["Northing at false origin",0,LENGTHUNIT["metre",1],ID["EPSG",8827]]],CS[Cartesian,2],AXIS["easting",east,ORDER[1],LENGTHUNIT["metre",1,ID["EPSG",9001]]],AXIS["northing",north,ORDER[2],LENGTHUNIT["metre",1,ID["EPSG",9001]]]]

然后我尝试创建一个GeoAxes对象:

import matplotlib.pyplot as plt
subplot_kw = dict(projection = proj_cartopy)                                
fig, ax = plt.subplots(subplot_kw = subplot_kw)     

然而,我收到一个NotImplemented错误:

File "/Users/my_username/opt/anaconda3/envs/carto/lib/python3.9/site-packages/cartopy/mpl/geoaxes.py", line 1598, in _boundary path, = cpatch.geos_to_path(self.projection.boundary)
File "/Users/my_username/opt/anaconda3/envs/carto/lib/python3.9/site-packages/cartopy/crs.py", line 679, in boundary
raise NotImplementedError

请帮助我理解这个错误(我知道我可以手动输入投影,例如使用EPSG代码,但如果可能的话,我更喜欢保持当前的自动方法(。

据我所知,这还没有得到完全支持。

  • https://github.com/SciTools/cartopy/issues/813
  • https://github.com/SciTools/cartopy/issues/153
  • https://github.com/SciTools/cartopy/issues/923

最新更新