Error using .assign_latitude_longitude: AttributeError: crs attribute is not available

Error using .assign_latitude_longitude: AttributeError: crs attribute is not available

我正在使用 NDFD 预测数据集,并希望在数组中分配纬度和经度,以便我能够在 matplotlib 之外绘制数据。我的版本是:

python 3.8,metpy 1.0.0,cartopy 0.18.0,xarray 0.16.2,虹吸管 0.8.0

import os.path
import sys
import xarray
from xarray.backends import NetCDF4DataStore
import xarray as xr
import pyproj

from datetime import *

import cartopy.feature as cfeature
#import cartopy.io.shapereader as shpreader
import metpy
import siphon
import math

from siphon.catalog import TDSCatalog
from siphon.radarserver import RadarServer
from siphon.cdmr import Dataset

import cartopy.crs as ccrs
import numpy as np
import pandas as pd
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
#from awips.dataaccess import DataAccessLayer
%matplotlib inline

gfs_catalog = ('https://thredds.ucar.edu/thredds/catalog/grib/NCEP/NDFD/NWS/CONUS/CONDUIT/catalog.xml?dataset=grib/NCEP/NDFD/NWS/CONUS/CONDUIT/Best')
cat = TDSCatalog(gfs_catalog)
ncss = cat.datasets[0].subset()
query = ncss.query()
query.time_range(datetime.utcnow(),datetime.utcnow()+timedelta(days=7))
query.accept('netcdf') 
query.variables('Total_precipitation_surface_6_Hour_Accumulation','Total_precipitation_surface_12_Hour_Ac
cumulation_probability_above_0p254')

query.lonlat_box(west=-86.175, east=-86.0, north=39.85, south=39.75)
data = ncss.get_data(query)
ds = xr.open_dataset(NetCDF4DataStore(data))

#This works to return x and y in metpy's custom projection
var = ds.metpy.parse_cf('Total_precipitation_surface_6_Hour_Accumulation')

#This doesn't
var2 = ds.metpy.assign_latitude_longitude(force='False')

AttributeError: crs 属性不可用。

assign_latitude_longitude 要求提供有关 CRS 的信息,以便它可以根据您的投影坐标正确计算经度和纬度。这意味着您首先需要以某种方式调用 parse_cf() 。在你上面的代码中,你将调用parse_cf('Total_precipitation_surface_6_Hour_Accumulation')的结果保存到var,但是这个并没有修改存储在[=17中的原始Dataset =].

相反,您需要在 具有 的变量上调用它,并将信息解析为:

var = var.metpy.assign_latitude_longitude(force=False)

(注意 False 而不是 'False')。您还可以在完整数据集上使用 parse_cf()assign_latitude_longitude()

ds = ds.metpy.parse_cf()
ds = ds.metpy.assign_latitude_longitude(force=False)

请注意,在后一种情况下,这将下载 所有 个变量的元数据。