Change longitude coordinate convention from 0E-360W to -180E,180W in a NetCDF File

16 visualizaciones (últimos 30 días)
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 ;

Respuestas (1)

Marina
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.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by