Change longitude coordinate convention from 0E-360W to -180E,180W in a NetCDF File
13 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Augusto Gabriel da Costa Pereira
am 29 Jun. 2022
Bearbeitet: Augusto Gabriel da Costa Pereira
am 29 Jun. 2022
Thanks!
KSSV
am 30 Jun. 2022
You can add 180 to -180 to +180 or substract 180 from 0 to 360. Won't this work?
Antworten (1)
Marina
am 6 Mai 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 Kommentare
Siehe auch
Kategorien
Mehr zu NetCDF finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!