Change longitude coordinate convention from 0E-360W to -180E,180W in a NetCDF File
13 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Augusto Gabriel da Costa Pereira
le 29 Juin 2022
Modifié(e) : Augusto Gabriel da Costa Pereira
le 29 Juin 2022
Thanks!
KSSV
le 30 Juin 2022
You can add 180 to -180 to +180 or substract 180 from 0 to 360. Won't this work?
Réponses (1)
Marina
le 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 commentaires
Voir également
Catégories
En savoir plus sur NetCDF dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!