Change longitude coordinate convention from 0E-360W to -180E,180W in a NetCDF File
    5 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
Hi all,
I have a NetCDF file that plots a global map of the salinity, on top of which I superimpose the coastline coordinates from MATLAB's map toolbox such that I can have a clearer definition of my world map.
However, the MATLAB map has a -180E to 180W longitude convention while the NetCDF map has a 0E to 360W longitude convention. When I try to convert the NetCDF map (which seems like a very simple operation) such that its convention is the same as that of MATLAB (i.e. -180E to 180E), the plot seems to be coming awfully wrong every time.
Any suggestions?
Thanks in advance for your help.
(below is the code)
 %%URL & Display
 %Load URL(s)
 url = 'https://podaac- opendap.jpl.nasa.gov:443/opendap/allData/smap/L3/RSS/V2/8day_running/SCI/2018/131/RSS_smap_SSS_8day_running_20 18_135_v02.0.nc' ;
 %Display variables
 %ncdisp(url)
 %%Call Variables
    %Time
    time_start = ncreadatt(url, '/', 'time_coverage_start') ; 
    time_end = ncreadatt(url, '/', 'time_coverage_end') ; 
    %Coordinates
    lat = ncread(url, 'lat') ;
    lon360 = ncread(url, 'lon') ; 
        %Convert longitude to 180W - 180E 
          %First way to do it
            lon = rem( (lon360 + 180), 360) - 180 ;
            lon_idx = lon > 180 ;
            lon(lon_idx) = -lon(lon_idx) + 180 ; 
 %         %Second way to do it
 %           lon = rem((lon360 + 180), 360) + 180 ; 
    %Salinity
    sal = ncread(url, 'sss_smap') ;
 %%Plot
 %Prep Data
    [LON, LAT] = meshgrid(lon, lat) ;
    v = linspace(min(sal(:)), max(sal(:)), 50) ; 
 %Figure
    fig = figure ;
    fig.Position = [ 100 200 1000 500 ] ;
 %Plot Data
    [~, h] = contourf(LON, LAT, sal', v) ;
    h.LineStyle = 'none' ;
    hold on
 %Plot World Map
    load coastlines
    plot(coastlon,coastlat)
 %Colorbar
    c = colorbar ; 
 %Grid
    grid on
    ax = gca ; 
    ax.GridColor = [1 0 0] ;
 %Labeling
    c.Label.String = 'Salinity (PSU)' ; %Colorbar Label
    title( strcat({'Recorded: '}, {time_start(1:10)}, {' to '}, {time_end(1:10)} ) ) ; %Graph Title
    ax.FontSize = 14 ;
2 comentarios
  Augusto Gabriel da Costa Pereira
 el 29 de Jun. de 2022
				
      Editada: Augusto Gabriel da Costa Pereira
 el 29 de Jun. de 2022
  
			Thanks!
  KSSV
      
      
 el 30 de Jun. de 2022
				You can add 180 to -180 to +180 or substract 180 from 0 to 360. Won't this work? 
Respuestas (1)
  Marina
 el 6 de Mayo de 2023
        Hi Konstantinos,
I have the same problem and I found this functions that maybe could help you solve the longitud units:
If you want more information I found it at:
I hope its help you and others.
0 comentarios
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



