[gdal-dev] NetCDF projection help

Gerald Nelson nelson.gerald.c at gmail.com
Tue Jul 12 08:50:57 PDT 2022


Have you tried using the R package terra? It imports netCDF pretty much painlessly. It has the latest version of GDAL in the background doing the heavy lifting.

Gerald C. Nelson
Professor Emeritus, UIUC
+1 217-390-7888 (cell)
+1 970-639-2079 (land line)
Skype: jerrynelson
http://bit.ly/1arho7d

From: gdal-dev <gdal-dev-bounces at lists.osgeo.org> on behalf of "DeTracey, Brendan" <Brendan.DeTracey at dfo-mpo.gc.ca>
Date: Tuesday, July 12, 2022 at 5:53 AM
To: "gdal-dev at lists.osgeo.org" <gdal-dev at lists.osgeo.org>
Subject: [gdal-dev] NetCDF projection help

Hi,

I have been "gifted" a netcdf raster that I must vectorize. When I load the raster into QGIS the coordinates are not correct. I believe that QGIS uses GDAL drivers. I have included a download link to the file, a ncdump -h,  and gdalinfo output, all at the bottom of this message. The raster is on the CORDEX arctic grid [https://cordex.org/domains/region-11-arctic/], a rotated pole projection with the pole at 0.0E, 6.55N and a Top Left Corner of 337.12E, 33.88N. My raster is double the resolution described in the specification. The raster covers the arctic and is a binary mask for Baffin Bay. The raster includes the lat and lon, but not the rotated projection lat and lon.

What do I need to do to get QGIS to properly load the coordinates for this raster? (The raster is too coarse for my needs. My plan is to use QGIS to manually draw a shapefile of the raster boundaries.) Why is the GDAL netcdf driver not properly creating an affine? Is it because the raster spans the pole?

Thanks so much,
Brendan

https://file.io/3ITCNwX0fg3s : CORDEX_subarea_O3.nc : 1MB

$ ncdump -h CORDEX_subarea_O3.nc
netcdf CORDEX_subarea_O3 {
dimensions:
        x = 232 ;
        y = 266 ;
variables:
        double lon(y, x) ;
                lon:standard_name = "longitude" ;
                lon:long_name = "longitude" ;
                lon:units = "degrees_east" ;
                lon:_CoordinateAxisType = "Lon" ;
        double lat(y, x) ;
                lat:standard_name = "latitude" ;
                lat:long_name = "latitude" ;
                lat:units = "degrees_north" ;
                lat:_CoordinateAxisType = "Lat" ;
        double mmask(y, x) ;
                mmask:coordinates = "lon lat" ;
                mmask:_FillValue = -9.e+33 ;
                mmask:missing_value = -9.e+33 ;

// global attributes:
                :CDI = "Climate Data Interface version 1.6.8 (http://mpimet.mpg.de/cdi)" ;
                :Conventions = "CF-1.4" ;
                :history = "Mon Apr 20 17:37:28 2020: cdo eqc,3 All_subareas_CORDEX_final.nc CORDEX_subarea_O3.nc\n",
                        "Sat Apr 11 22:10:21 2020: cdo add jonn.nc jlnn.nc jann.nc\n",
                        "Sat Apr 11 21:55:59 2020: cdo sub latest_5.nc jln.nc jon.nc\n",
                        "Sat Apr 11 17:29:06 2020: cdo add jos.nc Land_subareas_new.nc All_subareas_CORDEX_reedited.nc\n",
                        "Sat Apr 11 17:22:45 2020: cdo sub All_subareas_CORDEX_edited.nc j.nc jos.nc\n",
                        "Tue Apr 07 15:58:18 2020: cdo add jon.nc EPA_Arctic_bioregions_CORDEX_land_masked_edited.nc All_subareas_CORDEX_edited.nc\n",
                        "Tue Apr 07 15:19:29 2020: cdo sub All_subareas_CORDEX_best.nc jl.nc jo.nc_\n",
                        "Tue Apr 07 00:58:57 2020: cdo remapnn,ARC-22_sample_grid.nc All_subareas_.25deg.nc j.nc\n",
                        "Tue Apr 07 00:48:41 2020: cdo add NAA_subareas_.25deg.nc EPA_Arctic_bioregions_.25degx-1.nc All_subareas_.25deg.nc\n",
                        "Tue Apr 07 00:48:01 2020: cdo mulc,-1 EPA_Arctic_bioregions_.25deg.nc EPA_Arctic_bioregions_.25degx-1.nc\n",
                        "Mon Apr 06 17:20:07 2020: cdo add 4xAlaskan_Tundra_mask_l2_.25deg.nc jNSCff.nc jNSCA.nc\n",
                        "Mon Apr  6 17:18:06 2020: /HOME/opt/package/nco/linux64/bin/ncap2 -s mask_array=int(mask_array) jNSCf.nc jNSCff.nc\n",
                        "Mon Apr  6 17:17:29 2020: /HOME/opt/package/nco/linux64/bin/ncap2 -s where(mask_array > 3.) mask_array = 3. jNSCfl.nc jNSCf.nc\n",
                        "Mon Apr  6 17:17:06 2020: /HOME/opt/package/nco/linux64/bin/ncap2 -s mask_array=float(mask_array) jNSC.nc jNSCfl.nc\n",
                        "Mon Apr 06 16:38:46 2020: cdo add 3xArctic_Cordillera_mask_l2_.25deg.nc jNS.nc jNSC.nc\n",
                        "Mon Apr 06 16:36:11 2020: cdo add Southern_Arctic_mask_l2_.25deg.nc 2xNorthern_Arctic_mask_l2_.25deg.nc jNS.nc\n",
                        "Mon Apr 06 16:35:10 2020: cdo mulc,2 Northern_Arctic_mask_l2_.25deg.nc 2xNorthern_Arctic_mask_l2_.25deg.nc" ;
                :DOMAIN_number_total = 1 ;
                :DOMAIN_number = 0 ;
                :DOMAIN_dimensions_ids = 1, 2 ;
                :DOMAIN_size_global = 568, 400 ;
                :DOMAIN_size_local = 568, 400 ;
                :DOMAIN_position_first = 1, 1 ;
                :DOMAIN_position_last = 568, 400 ;
                :DOMAIN_halo_size_start = 0, 0 ;
                :DOMAIN_halo_size_end = 0, 0 ;
                :DOMAIN_type = "BOX" ;
                :history_of_appended_files = "Mon Oct  2 22:18:28 2017: Appended file mesh_zgr.nc had following \"history\" attribute:\n",
                        "Mon Oct  2 22:18:08 2017: ncks -A mesh_hgr.nc mesh_zgr.nc\n",
                        "" ;
                :NCO = "\"4.5.2\"" ;
                :CDO = "Climate Data Operators version 1.6.8rc2 (http://mpimet.mpg.de/cdo)" ;
}


$ gdalinfo CORDEX_subarea_O3.nc
Warning 1: Recode from UTF-8 to CP_ACP failed with the error: "Invalid argument".
Driver: netCDF/Network Common Data Format
Files: CORDEX_subarea_O3.nc
       CORDEX_subarea_O3.nc.aux.xml
Size is 232, 266
Metadata:
  mmask#coordinates=lon lat
  mmask#missing_value=-9e+33
  mmask#_FillValue=-9e+33
  NC_GLOBAL#CDI=Climate Data Interface version 1.6.8 (http://mpimet.mpg.de/cdi)
  NC_GLOBAL#CDO=Climate Data Operators version 1.6.8rc2 (http://mpimet.mpg.de/cdo)
  NC_GLOBAL#Conventions=CF-1.4
  NC_GLOBAL#DOMAIN_dimensions_ids={1,2}
  NC_GLOBAL#DOMAIN_halo_size_end={0,0}
  NC_GLOBAL#DOMAIN_halo_size_start={0,0}
  NC_GLOBAL#DOMAIN_number=0
  NC_GLOBAL#DOMAIN_number_total=1
  NC_GLOBAL#DOMAIN_position_first={1,1}
  NC_GLOBAL#DOMAIN_position_last={568,400}
  NC_GLOBAL#DOMAIN_size_global={568,400}
  NC_GLOBAL#DOMAIN_size_local={568,400}
  NC_GLOBAL#DOMAIN_type=BOX
  NC_GLOBAL#history=Mon Apr 20 17:37:28 2020: cdo eqc,3 All_subareas_CORDEX_final.nc CORDEX_subarea_O3.nc
Sat Apr 11 22:10:21 2020: cdo add jonn.nc jlnn.nc jann.nc
Sat Apr 11 21:55:59 2020: cdo sub latest_5.nc jln.nc jon.nc
Sat Apr 11 17:29:06 2020: cdo add jos.nc Land_subareas_new.nc All_subareas_CORDEX_reedited.nc
Sat Apr 11 17:22:45 2020: cdo sub All_subareas_CORDEX_edited.nc j.nc jos.nc
Tue Apr 07 15:58:18 2020: cdo add jon.nc EPA_Arctic_bioregions_CORDEX_land_masked_edited.nc All_subareas_CORDEX_edited.nc
Tue Apr 07 15:19:29 2020: cdo sub All_subareas_CORDEX_best.nc jl.nc jo.nc_
Tue Apr 07 00:58:57 2020: cdo remapnn,ARC-22_sample_grid.nc All_subareas_.25deg.nc j.nc
Tue Apr 07 00:48:41 2020: cdo add NAA_subareas_.25deg.nc EPA_Arctic_bioregions_.25degx-1.nc All_subareas_.25deg.nc
Tue Apr 07 00:48:01 2020: cdo mulc,-1 EPA_Arctic_bioregions_.25deg.nc EPA_Arctic_bioregions_.25degx-1.nc
Mon Apr 06 17:20:07 2020: cdo add 4xAlaskan_Tundra_mask_l2_.25deg.nc jNSCff.nc jNSCA.nc
Mon Apr  6 17:18:06 2020: /HOME/opt/package/nco/linux64/bin/ncap2 -s mask_array=int(mask_array) jNSCf.nc jNSCff.nc
Mon Apr  6 17:17:29 2020: /HOME/opt/package/nco/linux64/bin/ncap2 -s where(mask_array > 3.) mask_array = 3. jNSCfl.nc jNSCf.nc
Mon Apr  6 17:17:06 2020: /HOME/opt/package/nco/linux64/bin/ncap2 -s mask_array=float(mask_array) jNSC.nc jNSCfl.nc
Mon Apr 06 16:38:46 2020: cdo add 3xArctic_Cordillera_mask_l2_.25deg.nc jNS.nc jNSC.nc
Mon Apr 06 16:36:11 2020: cdo add Southern_Arctic_mask_l2_.25deg.nc 2xNorthern_Arctic_mask_l2_.25deg.nc jNS.nc
Mon Apr 06 16:35:10 2020: cdo mulc,2 Northern_Arctic_mask_l2_.25deg.nc 2xNorthern_Arctic_mask_l2_.25deg.nc
  NC_GLOBAL#history_of_appended_files=Mon Oct  2 22:18:28 2017: Appended file mesh_zgr.nc had following "history" attribute:
Mon Oct  2 22:18:08 2017: ncks -A mesh_hgr.nc mesh_zgr.nc

  NC_GLOBAL#NCO="4.5.2"
Subdatasets:
  SUBDATASET_1_NAME=NETCDF:"CORDEX_subarea_O3.nc":lon
  SUBDATASET_1_DESC=[266x232] longitude (64-bit floating-point)
  SUBDATASET_2_NAME=NETCDF:"CORDEX_subarea_O3.nc":lat
  SUBDATASET_2_DESC=[266x232] latitude (64-bit floating-point)
  SUBDATASET_3_NAME=NETCDF:"CORDEX_subarea_O3.nc":mmask
  SUBDATASET_3_DESC=[266x232] mmask (64-bit floating-point)
Geolocation:
  LINE_OFFSET=0
  LINE_STEP=1
  PIXEL_OFFSET=0
  PIXEL_STEP=1
  SRS=GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]
  X_BAND=1
  X_DATASET=NETCDF:"CORDEX_subarea_O3.nc":lon
  Y_BAND=1
  Y_DATASET=NETCDF:"CORDEX_subarea_O3.nc":lat
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,  266.0)
Upper Right (  232.0,    0.0)
Lower Right (  232.0,  266.0)
Center      (  116.0,  133.0)
Band 1 Block=232x1 Type=Float64, ColorInterp=Undefined
  Min=0.000 Max=1.000
  Minimum=0.000, Maximum=1.000, Mean=0.021, StdDev=0.144
  NoData Value=-9.00000000000000009e+33
  Metadata:
    coordinates=lon lat
    missing_value=-9e+33
    NETCDF_VARNAME=mmask
    STATISTICS_MAXIMUM=1
    STATISTICS_MEAN=0.021243842364532
    STATISTICS_MINIMUM=0
    STATISTICS_STDDEV=0.14419619109437
    _FillValue=-9e+33


------------------------------------------
Brendan DeTracey, VS 203/2-3
brendan.detracey at dfo-mpo.gc.ca<mailto:brendan.detracey at dfo-mpo.gc.ca>

Ocean Monitoring and Observation Section | Section de surveillance et d'observation océanique /
Ocean Modelling and Analysis Section | Section d'analyse et de modélisation

Ocean and Ecosystem Sciences Division | Division des sciences de l'écosystème et de la mer
Fisheries and Oceans Canada | Pêches et Oceans Canada
Bedford Institute of Oceanography | Institut Océanographique de Bedford
P.O. Box 1006, 1 Challenger Dr. | C.P.1006, 1 Challenger Dr.
Dartmouth, N.S. Canada B2Y 4A2 | Dartmouth, N.-É., Canada B2Y 4A2
Telephone | Téléphone 902-426-9727
------------------------------------------
If you have received this communication by mistake, please notify the sender immediately and delete the communication without printing, copying or forwarding it. Thank you.
Si vous avez reçu cette communication par erreur, veuillez en aviser l'expéditeur immédiatement et la supprimer sans l'imprimer, la copier, ou la faire suivre. Merci.
------------------------------------------

_______________________________________________
gdal-dev mailing list
gdal-dev at lists.osgeo.org<mailto:gdal-dev at lists.osgeo.org>
https://lists.osgeo.org/mailman/listinfo/gdal-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20220712/71633190/attachment-0001.htm>


More information about the gdal-dev mailing list