Tengo dos conjuntos de datos:
El clima:
- temperatura media de un mes
- Archivo NetCDF (Convención CF 1.6)
- grid_mapping_name: rotated_latitude_longitude (con las coordenadas rlat y rlong que definen la cuadrícula)
- rejilla curvilínea
Fracción de área de cosecha:
- Trigo
- Archivo Geotiff
- EPSG: 4326 (coordenadas lon y lat que definen la cuadrícula)
- rejilla rectilínea
He conseguido trazar ambos conjuntos de datos (véase la imagen siguiente).
Quiero extraer los valores de los datos climáticos donde crece el trigo. Sin embargo, los dos conjuntos de datos tienen sistemas de coordenadas diferentes (cuadrícula lon/lat girada frente a cuadrícula lon/lat normal), por lo que no se alinean.
¿Sugerencias?
EDITAR : Si llamo a climatedata.rio.crs
Obtengo la siguiente salida:
GEOGCRS["undefined",BASEGEOGCRS["undefined",DATUM["World Geodetic System 1984",ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ID["EPSG",6326]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8901]]],DERIVINGCONVERSION["Pole rotation (netCDF CF convention)",METHOD["Pole rotation (netCDF CF convention)"],PARAMETER["Grid north pole latitude (netCDF CF convention)",39.25,ANGLEUNIT["degree",0.0174532925199433,ID["EPSG",9122]]],PARAMETER["Grid north pole longitude (netCDF CF convention)",198,ANGLEUNIT["degree",0.0174532925199433,ID["EPSG",9122]]],PARAMETER["North pole grid longitude (netCDF CF convention)",0,ANGLEUNIT["degree",0.0174532925199433,ID["EPSG",9122]]]],CS[ellipsoidal,2],AXIS["longitude",east,ORDER[1],ANGLEUNIT["degree",0.0174532925199433,ID["EPSG",9122]]],AXIS["latitude",north,ORDER[2],ANGLEUNIT["degree",0.0174532925199433,ID["EPSG",9122]]]]
EDITAR :
Paso 1: Transformar los datos climáticos en una cuadrícula lon-lat de espacio regular.
climatedata = xa.open_dataset(r'filepath.nc', decode_cf = True, decode_coords = "all")
df = climatedata.squeeze().to_dataframe().reset_index()
geometry = gpd.points_from_xy(df.lon, df.lat)
gdf = gpd.GeoDataFrame(df, crs=climatedata.rio.crs, geometry=geometry)
geo_grid = make_geocube(vector_data=gdf, resolution=(-0.1, 0.1), rasterize_function=rasterize_points_griddata,)
geo_grid = geo_grid.tas_moy[:,:]
geo_grid.rio.crs
es la misma que la mencionada anteriormente. harvestdata.rio.crs
es la siguiente:
GEOGCS["unknown",DATUM["unknown",SPHEROID["WGS 84",6378137,298.257223563]],PRIMEM["unknown",0],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST]]
Paso 2: Reproyectar los datos climáticos a los datos de la cosecha:
harvestdata = xa.open_dataset(r'filepath.tif')
climatedata_matched = geo_grid.rio.reproject_match(harvestdata)
Problema: climatedata_matched es un array sólo con valores NaN.