Contents
70 |
71 |
72 |
73 |
74 |
75 |
76 | bbox = [-10 50 15 60];
77 | clim = [0 10];
78 |
1. OPeNDAP: query indices, generate matlab code
http://zandmotor.citg.tudelft.nl/netcdfreadersguide/
dap0 = 'http://thredds.jpl.nasa.gov/thredds/dodsC/ncml_aggregation/Chlorophyll/seawifs/aggregate__SEAWIFS_L3_CHLA_MONTHLY_9KM_R.ncml';
79 |
80 | nc.lat = ncread(dap0, 'lat');
81 | nc.lon = ncread(dap0, 'lon');
82 | nc.time = ncread_cf_time(dap0, 'time');
83 |
84 | ilon = find(nc.lon >= bbox(1) & nc.lon <= bbox(3));
85 | ilat = find(nc.lat >= bbox(2) & nc.lat <= bbox(4));
86 | itime = 1;
87 | nc.l3m_data = ncread(dap0, 'l3m_data', [ilon(1) ilat(1) itime], [length(ilon) length(ilat) 1], [1 1 1]);
88 |
render OPeNDAP
figure('name','OPeNDAP')
89 | pcolorcorcen(nc.lon(ilon),nc.lat(ilat),nc.l3m_data')
90 | tickmap('ll');grid on;
91 | set(gca,'ydir','normal')
92 | caxis(clim)
93 | axislat
94 | title(['OPeNDAP: ',datestr(nc.time(itime),'yyyy-mm-ddTHH:MM:SS')]);
95 | [ax, h]=colorbarwithvtext('OPeDAP');
96 | print2screensizeoverwrite(['OPeNDAP_plotted_',datestr(nc.time(itime),30)])
97 |
Warning: An empty directory name was given. No directory will be created.
98 | This syntax may not be supported in future releases.
99 |
2.WCS
https://publicwiki.deltares.nl/display/OET/WCS+primer
wcs0 = 'http://thredds.jpl.nasa.gov/thredds/wcs/ncml_aggregation/Chlorophyll/seawifs/aggregate__SEAWIFS_L3_CHLA_MONTHLY_9KM_R.ncml?'
100 | [url.wcs,OPT.wcs,lims.wcs] = wcs('server',wcs0,...
101 | 'axis',[-10 50 15 60],...
102 | 'format','GeoTIFF',...
103 | 'time','1997-09-01T00:00:00Z');
104 | dprintf(strrep(url.wcs,'&','\n&'))
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 | wcsname = ['WCS_',OPT.wcs.coverage,'_',datestr(datenum(OPT.wcs.time,'yyyy-mm-ddTHH:MM:SS'),30),'.',OPT.wcs.format];
117 | urlwrite(url.wcs,wcsname);
118 |
119 | wcs0 =
120 |
121 | http://thredds.jpl.nasa.gov/thredds/wcs/ncml_aggregation/Chlorophyll/seawifs/aggregate__SEAWIFS_L3_CHLA_MONTHLY_9KM_R.ncml?
122 |
123 | used WxS cache:C:\Users\UYJ\AppData\Local\Temp\matlab.ows\\thredds_jpl_nasa_gov_thredds_wcs_ncml_aggregation_Chlorophyll_seawifs_aggregate__SEAWIFS_L3_CHLA_MONTHLY_9KM_R_ncml_service_WCS_version_1_0_0_request_GetCapabilities.xml
124 | wxs:not valid: only valid option returned: l3m_data
125 | used WxS cache:C:\Users\UYJ\AppData\Local\Temp\matlab.ows\\thredds_jpl_nasa_gov_thredds_wcs_ncml_aggregation_Chlorophyll_seawifs_aggregate__SEAWIFS_L3_CHLA_MONTHLY_9KM_R_ncml_service_WCS_version_1_0_0_request_DescribeCoverage_coverage_l3m_data.xml
126 |
127 | OPT =
128 |
129 | server: 'http://thredds.jpl.nasa.gov/thredds/wcs/ncml_aggregati...'
130 | version: '1.0.0'
131 | request: 'GetCoverage'
132 | coverage: 'l3m_data'
133 | axis: [-10 50 15 60]
134 | bbox: ''
135 | format: 'GeoTIFF'
136 | crs: 'EPSG%3A4326'
137 | resx: []
138 | resy: []
139 | interpolation: ''
140 | time: '1997-09-01T00:00:00Z'
141 | disp: 1
142 | cachedir: 'C:\Users\UYJ\AppData\Local\Temp\matlab.ows\'
143 | fixqmark: 1
144 |
145 | wxs:validated: a format="GeoTIFF"
146 | wxs:not valid: a crs="EPSG%3A4326", choose from valid options:
147 | wxs:not valid: only valid option returned: OGC:CRS84
148 | wxs:not valid: only valid option returned: none
149 | http://thredds.jpl.nasa.gov/thredds/wcs/ncml_aggregation/Chlorophyll/seawifs/aggregate__SEAWIFS_L3_CHLA_MONTHLY_9KM_R.ncml?
150 | &service=WCS
151 | &version=1.0.0
152 | &request=GetCoverage
153 | &bbox=-10,50,15,60
154 | &coverage=l3m_data
155 | &format=GeoTIFF
156 | &resx=
157 | &resy=
158 | &crs=OGC:CRS84
159 | &time=1997-09-01T00:00:00
render WCS
figure('name',OPT.wcs.coverage)
160 | [A,map,alpha] = imread(wcsname);
161 | A = double(A);A(A==0)=NaN;
162 | OPT.wcs.x = linspace(OPT.wcs.axis(1),OPT.wcs.axis(3),size(A,2));
163 | OPT.wcs.y = linspace(OPT.wcs.axis(4),OPT.wcs.axis(2),size(A,1));
164 | pcolorcorcen(OPT.wcs.x,OPT.wcs.y,double(A))
165 | tickmap('ll');grid on;
166 | set(gca,'ydir','normal')
167 | axislat
168 | title(['WCS: ',OPT.wcs.time]);
169 | colorbar
170 | caxis(clim)
171 | [ax, h]=colorbarwithvtext(OPT.wcs.coverage);
172 | print2screensizeoverwrite(['WCS_plotted_',mkvar(OPT.wcs.time)])
173 |
Warning: An empty directory name was given. No directory will be created.
174 | This syntax may not be supported in future releases.
175 |
3.WMS: NB sometimes fails to to slow server rendering
https://publicwiki.deltares.nl/display/OET/WMS+primer
wms0 = 'http://thredds.jpl.nasa.gov/thredds/wms/ncml_aggregation/Chlorophyll/seawifs/aggregate__SEAWIFS_L3_CHLA_MONTHLY_9KM_R.ncml?';
176 | [url.wms,OPT.wms,lims.wms] = wms('server',wms0,...
177 | 'colorscalerange',clim,...
178 | 'styles','boxfill/sst_36',...
179 | 'time','1997-09-01T00:00:00.000Z',...
180 | 'axis',bbox);
181 | dprintf(strrep(url.wms,'&','\n&'))
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 | wmsname = ['WMS_',OPT.wms.layers,'_',datestr(datenum(OPT.wms.time,'yyyy-mm-ddTHH:MM:SS'),30),OPT.wms.ext];
191 | urlwrite(url.wms,wmsname);
192 |
used WxS cache:C:\Users\UYJ\AppData\Local\Temp\matlab.ows\\thredds_jpl_nasa_gov_thredds_wms_ncml_aggregation_Chlorophyll_seawifs_aggregate__SEAWIFS_L3_CHLA_MONTHLY_9KM_R_ncml_service_WMS_version_1_3_0_request_GetCapabilities.xml
193 | wxs:not valid: only valid option returned: l3m_data
194 | crs=CRS:84 to be used instead of crs=EPSG:4326 to prevent mixing-up lat-lon in THREDDS
195 | http://thredds.jpl.nasa.gov/thredds/wms/ncml_aggregation/Chlorophyll/seawifs/aggregate__SEAWIFS_L3_CHLA_MONTHLY_9KM_R.ncml?
196 | &service=WMS
197 | &version=1.3.0
198 | &request=GetMap
199 | &bbox=50,-10,60,15
200 | &layers=l3m_data
201 | &format=image/png
202 | &CRS=EPSG
render WMS
figure('name',OPT.wms.layers)
203 | [A,map,alpha] = imread(wmsname);
204 | image(OPT.wms.x,OPT.wms.y,A)
205 | colormap(map)
206 | tickmap('ll');grid on;
207 | set(gca,'ydir','normal')
208 | axislat
209 | title(['WMS: ',OPT.wms.time]);
210 | [ax, h]=colorbarwithvtext(OPT.wms.layers);
211 | set(ax,'YTickLabel',get(ax,'YTick')./size(map,1).*clim(2));
212 | print2screensizeoverwrite(['WMS_plotted_',mkvar(OPT.wcs.time)])
213 |
Warning: An empty directory name was given. No directory will be created.
214 | This syntax may not be supported in future releases.
215 |
--------------------------------------------------------------------------------
/matlab/EarthObservationWebServices.m:
--------------------------------------------------------------------------------
1 | % Tutorial on how to work with different flavours of web services for Earth Obersvation data
2 | % 1. netCDF-CF-OPeNDAP using netcdf4 package
3 | % 2. OGC WMS using owslib package, part of openearthtools
4 | % 3. OGC WCS using owslib package, part of openearthtools
5 | % For overview see OpenEarrth.eu > Data
6 | % Image(url='https://publicwiki.deltares.nl/download/attachments/42401809/OpenEarthBuildingBlocks_standards_client_server.png
7 |
8 | bbox = [-10 50 15 60];
9 | clim = [0 10];
10 |
11 | %% 1. OPeNDAP: query indices, generate matlab code
12 | % http://zandmotor.citg.tudelft.nl/netcdfreadersguide/
13 | dap0 = 'http://thredds.jpl.nasa.gov/thredds/dodsC/ncml_aggregation/Chlorophyll/seawifs/aggregate__SEAWIFS_L3_CHLA_MONTHLY_9KM_R.ncml';
14 |
15 | nc.lat = ncread(dap0, 'lat');
16 | nc.lon = ncread(dap0, 'lon');
17 | nc.time = ncread_cf_time(dap0, 'time');
18 |
19 | ilon = find(nc.lon >= bbox(1) & nc.lon <= bbox(3));
20 | ilat = find(nc.lat >= bbox(2) & nc.lat <= bbox(4));
21 | itime = 1;
22 | nc.l3m_data = ncread(dap0, 'l3m_data', [ilon(1) ilat(1) itime], [length(ilon) length(ilat) 1], [1 1 1]); % slow: 2D
23 |
24 | %% render OPeNDAP
25 | figure('name','OPeNDAP')
26 | pcolorcorcen(nc.lon(ilon),nc.lat(ilat),nc.l3m_data')
27 | tickmap('ll');grid on;
28 | set(gca,'ydir','normal')
29 | caxis(clim)
30 | axislat
31 | title(['OPeNDAP: ',datestr(nc.time(itime),'yyyy-mm-ddTHH:MM:SS')]);
32 | [ax, h]=colorbarwithvtext('OPeDAP');
33 | print2screensizeoverwrite(['OPeNDAP_plotted_',datestr(nc.time(itime),30)])
34 |
35 | %% 2.WCS
36 | % https://publicwiki.deltares.nl/display/OET/WCS+primer
37 | wcs0 = 'http://thredds.jpl.nasa.gov/thredds/wcs/ncml_aggregation/Chlorophyll/seawifs/aggregate__SEAWIFS_L3_CHLA_MONTHLY_9KM_R.ncml?' % service=WCS&version=1.0.0&request=GetCapabilities
38 | [url.wcs,OPT.wcs,lims.wcs] = wcs('server',wcs0,...
39 | 'axis',[-10 50 15 60],...
40 | 'format','GeoTIFF',....
41 | 'time','1997-09-01T00:00:00Z');
42 | dprintf(strrep(url.wcs,'&','\n&'))
43 | % http://thredds.jpl.nasa.gov/thredds/wcs/ncml_aggregation/Chlorophyll/seawifs/aggregate__SEAWIFS_L3_CHLA_MONTHLY_9KM_R.ncml?
44 | % &service=WCS
45 | % &version=1.0.0
46 | % &request=GetCoverage
47 | % &bbox=-10,50,15,60
48 | % &coverage=l3m_data
49 | % &format=GeoTIFF
50 | % &resx=
51 | % &resy=
52 | % &crs=OGC:CRS84
53 | % &time=1997-09-01T00:00:00
54 | wcsname = ['WCS_',OPT.wcs.coverage,'_',datestr(datenum(OPT.wcs.time,'yyyy-mm-ddTHH:MM:SS'),30),'.',OPT.wcs.format];
55 | urlwrite(url.wcs,wcsname);
56 | %% render WCS
57 | figure('name',OPT.wcs.coverage)
58 | [A,map,alpha] = imread(wcsname);
59 | A = double(A);A(A==0)=NaN;
60 | OPT.wcs.x = linspace(OPT.wcs.axis(1),OPT.wcs.axis(3),size(A,2));
61 | OPT.wcs.y = linspace(OPT.wcs.axis(4),OPT.wcs.axis(2),size(A,1));
62 | pcolorcorcen(OPT.wcs.x,OPT.wcs.y,double(A))
63 | tickmap('ll');grid on;
64 | set(gca,'ydir','normal')
65 | axislat
66 | title(['WCS: ',OPT.wcs.time]);
67 | colorbar
68 | caxis(clim)
69 | [ax, h]=colorbarwithvtext(OPT.wcs.coverage);
70 | print2screensizeoverwrite(['WCS_plotted_',mkvar(OPT.wcs.time)])
71 |
72 | %% 3.WMS: NB sometimes fails to to slow server rendering
73 | % https://publicwiki.deltares.nl/display/OET/WMS+primer
74 | wms0 = 'http://thredds.jpl.nasa.gov/thredds/wms/ncml_aggregation/Chlorophyll/seawifs/aggregate__SEAWIFS_L3_CHLA_MONTHLY_9KM_R.ncml?'; % service=WMS&version=1.3.0&request=GetCapabilities
75 | [url.wms,OPT.wms,lims.wms] = wms('server',wms0,...
76 | 'colorscalerange',clim,... % non-OGC extension
77 | 'styles','boxfill/sst_36',...
78 | 'time','1997-09-01T00:00:00.000Z',...
79 | 'axis',bbox); % spatial subet: speed-up
80 | dprintf(strrep(url.wms,'&','\n&'))
81 | % http://thredds.jpl.nasa.gov/thredds/wms/ncml_aggregation/Chlorophyll/seawifs/aggregate__SEAWIFS_L3_CHLA_MONTHLY_9KM_R.ncml?
82 | % &service=WMS
83 | % &version=1.3.0
84 | % &request=GetMap
85 | % &bbox=50,-10,60,15
86 | % &layers=l3m_data
87 | % &format=image/png
88 | % &CRS=EPSG
89 | wmsname = ['WMS_',OPT.wms.layers,'_',datestr(datenum(OPT.wms.time,'yyyy-mm-ddTHH:MM:SS'),30),OPT.wms.ext];
90 | urlwrite(url.wms,wmsname);
91 | %% render WMS
92 | figure('name',OPT.wms.layers)
93 | [A,map,alpha] = imread(wmsname);
94 | image(OPT.wms.x,OPT.wms.y,A)
95 | colormap(map)
96 | tickmap('ll');grid on;
97 | set(gca,'ydir','normal')
98 | axislat
99 | title(['WMS: ',OPT.wms.time]);
100 | [ax, h]=colorbarwithvtext(OPT.wms.layers);
101 | set(ax,'YTickLabel',get(ax,'YTick')./size(map,1).*clim(2));
102 | print2screensizeoverwrite(['WMS_plotted_',mkvar(OPT.wcs.time)])
103 |
--------------------------------------------------------------------------------
/matlab/EarthObservationWebServices.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openearth/notebooks/1786d5162aa0a0a8c2f5bd880328d92f0efeaf1b/matlab/EarthObservationWebServices.png
--------------------------------------------------------------------------------
/matlab/EarthObservationWebServices_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openearth/notebooks/1786d5162aa0a0a8c2f5bd880328d92f0efeaf1b/matlab/EarthObservationWebServices_01.png
--------------------------------------------------------------------------------
/matlab/EarthObservationWebServices_02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openearth/notebooks/1786d5162aa0a0a8c2f5bd880328d92f0efeaf1b/matlab/EarthObservationWebServices_02.png
--------------------------------------------------------------------------------
/matlab/EarthObservationWebServices_03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openearth/notebooks/1786d5162aa0a0a8c2f5bd880328d92f0efeaf1b/matlab/EarthObservationWebServices_03.png
--------------------------------------------------------------------------------
/maximum_waterlevels_in_west_terschelling.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import datetime\n",
10 | "import netCDF4\n",
11 | "import pandas as pd\n",
12 | "import seaborn as sns\n",
13 | "\n",
14 | "import numpy as np\n",
15 | "import matplotlib.pyplot as plt\n",
16 | "%matplotlib inline"
17 | ]
18 | },
19 | {
20 | "cell_type": "code",
21 | "execution_count": 2,
22 | "metadata": {},
23 | "outputs": [],
24 | "source": [
25 | "# the URL for West Terschelling\n",
26 | "url = 'http://opendap.deltares.nl/thredds/dodsC/opendap/rijkswaterstaat/waterbase/27_Waterhoogte_in_cm_t.o.v._normaal_amsterdams_peil_in_oppervlaktewater/nc/id1-WESTTSLG.nc'"
27 | ]
28 | },
29 | {
30 | "cell_type": "code",
31 | "execution_count": 3,
32 | "metadata": {},
33 | "outputs": [],
34 | "source": [
35 | "# open the dataset\n",
36 | "ds = netCDF4.Dataset(url)"
37 | ]
38 | },
39 | {
40 | "cell_type": "code",
41 | "execution_count": 4,
42 | "metadata": {},
43 | "outputs": [],
44 | "source": [
45 | "# lookup relevant variables\n",
46 | "t = ds.variables['time']\n",
47 | "ssh = ds.variables['sea_surface_height']\n",
48 | " \n"
49 | ]
50 | },
51 | {
52 | "cell_type": "code",
53 | "execution_count": 5,
54 | "metadata": {},
55 | "outputs": [],
56 | "source": [
57 | "# convert to table\n",
58 | "# get all times and convert to date objects (so we can group by year)\n",
59 | "dates = netCDF4.num2date(t[:], ds.variables['time'].units)\n",
60 | "# query history of sea surface height and squeeze out empty dimension (1 location x time)\n",
61 | "ssh_values = np.squeeze(ssh[:])\n",
62 | "df = pd.DataFrame(data=dict(dates=dates, ssh=ssh_values))\n",
63 | "# use date as an index\n",
64 | "df = df.set_index('dates')"
65 | ]
66 | },
67 | {
68 | "cell_type": "code",
69 | "execution_count": 10,
70 | "metadata": {},
71 | "outputs": [
72 | {
73 | "data": {
74 | "image/png": "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\n",
75 | "text/plain": [
76 | "