|
1 | 1 | # Book settings
|
2 | 2 | # Learn more at https://jupyterbook.org/customize/config.html
|
3 | 3 |
|
4 |
| -title: Cloud-native geospatial datacube workflows with open-source tools |
| 4 | +title: Cloud-native geospatial data cube workflows with open-source tools |
5 | 5 | author: Emma Marshall
|
6 | 6 | copyright: "2025" #, Emma Marshall
|
7 | 7 | #logo: logo.png
|
@@ -33,7 +33,7 @@ bibtex_bibfiles:
|
33 | 33 |
|
34 | 34 | # Information about where the book exists on the web
|
35 | 35 | repository:
|
36 |
| - url: https://github.com/e-marshall/cloud-open-source-geospatial-datacube-workflows |
| 36 | + url: https://github.com/e-marshall/cloud-open-source-geospatial-data-cube-workflows |
37 | 37 | branch: main
|
38 | 38 |
|
39 | 39 | launch_buttons:
|
@@ -74,192 +74,10 @@ sphinx:
|
74 | 74 | - substitution
|
75 | 75 |
|
76 | 76 | myst_substitutions:
|
77 |
| - part1_title: "Part 2: Background" |
78 |
| - part2_title: "ITS_LIVE ice velocity data tutorial" |
79 |
| - #part2_title: "Using Xarray to examine cloud-based glacier surface velocity data" |
80 |
| - part3_title: "Sentinel-1 RTC imagery tutorial" |
81 |
| - #part3_title: "Sentinel-1 RTC data workflows with xarray" |
82 |
| - part4_title: "Part 5: Conclusion" |
83 |
| - |
84 |
| - #tutorial 1 nb titles |
85 |
| - title_its_nb1: "# 3.1 Accessing cloud-hosted ITS_LIVE data" |
86 |
| - title_its_nb2: "# 3.2 Working with larger than memory data" |
87 |
| - title_its_nb3: "# 3.3 Handling raster and vector data" |
88 |
| - title_its_nb4: "# 3.4 Exploratory data analysis of a single glacier" |
89 |
| - title_its_nb5: "# 3.5 Exploratory data analysis of multiple glaciers" |
90 |
| - |
91 |
| - #tutorial 2 nb titles |
92 |
| - title_s1_1: "# 4.1 Read Sentinel-1 data processed by ASF" |
93 |
| - title_s1_2: "# 4.2 Wrangle metadata" |
94 |
| - title_s1_3: "# 4.3 Exploratory analysis of ASF S1 imagery" |
95 |
| - title_s1_4: "# 4.4 Read Sentinel-1 RTC data from Microsoft Planetary Computer" |
96 |
| - title_s1_5: "# 4.5 Comparing Sentinel-1 RTC datasets" |
97 |
| - #title_s1_6: "# 6. Example of Sentinel-1 RTC time series analysis" |
98 | 77 |
|
99 | 78 | #global nb sections
|
100 |
| - intro: "## Introduction" |
101 |
| - overview: "### Overview" |
102 |
| - outline: "### Outline" |
103 |
| - learning_goals: "### Learning goals" |
104 |
| - concepts: "#### Concepts" |
105 |
| - techniques: "#### Techniques" |
106 |
| - conclusion: "## Conclusion" |
107 | 79 | break: "----"
|
108 | 80 |
|
109 |
| - #nb1 |
110 |
| - #can't get subs + links to headings to work |
111 |
| - # so not using lettered headings for now |
112 |
| - # but still using numbered subsections (a1_...) |
113 |
| - a_its_nb1: "A. Overview of ITS_LIVE data" |
114 |
| - a1_its_nb1: "1) Data structure overview" |
115 |
| - a2_its_nb1: "2) Climate Forecast (CF) Metadata Conventions" |
116 |
| - |
117 |
| - b_its_nb1: "B. Read ITS_LIVE data from AWS S3 using Xarray" |
118 |
| - b1_its_nb1: "1) Overview of ITS_LIVE data storage and catalog" |
119 |
| - b2_its_nb1: "2) Read ITS_LIVE data from S3 storage into memory" |
120 |
| - b3_its_nb1: "3) Check spatial footprint of data" |
121 |
| - |
122 |
| - c_its_nb1: "C. Query ITS_LIVE catalog" |
123 |
| - c1_its_nb1: "1) Find ITS_LIVE granule for a point of interest" |
124 |
| - c2_its_nb1: "2) Read + visualize spatial footprint of ITS_LIVE data" |
125 |
| - |
126 |
| - |
127 |
| - #nb2 |
128 |
| - a_its_nb2: "A. Compare approaches for reading larger than memory data" |
129 |
| - a1_its_nb2: "1) `chunks = 'auto'`" |
130 |
| - a2_its_nb2: "2) `chunks = {}`" |
131 |
| - a3_its_nb2: "3) An out-of-order time dimension" |
132 |
| - a4_its_nb2: "4) Read the dataset without Dask" |
133 |
| - b_its_nb2: "B. Organize data once it's in memory" |
134 |
| - b1_its_nb2: "1) Arrange dataset in chronological order" |
135 |
| - b2_its_nb2: "2) Convert to a Dask-backed `Xarray.Dataset`" |
136 |
| - |
137 |
| - #nb3 |
138 |
| - a_its_nb3: "Read data using strategy identified in previous notebook" |
139 |
| - b_its_nb3: "Incorporate glacier outline (vector) data" |
140 |
| - b1_its_nb3: "1) Read and reproject vector data" |
141 |
| - b2_its_nb3: "2) Visualize spatial extents of glacier outlines and ITS_LIVE data cube" |
142 |
| - b3_its_nb3: "3) Crop vector data to spatial extent of raster data" |
143 |
| - c_its_nb3: "C. Combine raster and vector data" |
144 |
| - c1_its_nb3: "1) Use vector data to crop raster data" |
145 |
| - c2_its_nb3: "2) Write clipped raster data cube to disk" |
146 |
| - |
147 |
| - #nb4 |
148 |
| - a_its_nb4: "A. Data exploration" |
149 |
| - a1_its_nb4: "1) Load raster data and visualize with vector data" |
150 |
| - a2_its_nb4: "2) Examine data coverage along the time dimension" |
151 |
| - a3_its_nb4: "3) Look at data by sensor" |
152 |
| - b_its_nb4: "B. Comparing different satellites" |
153 |
| - b1_its_nb4: "1) DataTree approach" |
154 |
| - b2_its_nb4: "2) GroupBy approach" |
155 |
| - c_its_nb4: "C. Examine velocity variability" |
156 |
| - c1_its_nb4: "1) Histograms and summary statistics" |
157 |
| - c2_its_nb4: "2) Spatial velocity variablity" |
158 |
| - c3_its_nb4: "3) Temporal velocity variability" |
159 |
| - d_its_nb4: "D. Dimensional computations" |
160 |
| - d1_its_nb4: "1) Temporal resampling" |
161 |
| - d2_its_nb4: "2) Grouped analysis by season" |
162 |
| - |
163 |
| - #nb5 |
164 |
| - a_its_nb5: "A. Read and organize data" |
165 |
| - a1_its_nb5: "1) Raster data" |
166 |
| - a2_its_nb5: "2) Vector data" |
167 |
| - |
168 |
| - b_its_nb5: "B. Combine raster and vector to create a vector data cube" |
169 |
| - b1_its_nb5: "1) Make a vector data cube" |
170 |
| - b2_its_nb5: "2) Add attribute data to vector cube" |
171 |
| - b3_its_nb5: "3) Write vector cube to disk" |
172 |
| - |
173 |
| - c_its_nb5: "C. Data visualization" |
174 |
| - c1_its_nb5: "1) Read vector data cube into memory" |
175 |
| - c2_its_nb5: "2) Visualize velocity data" |
176 |
| - c3_its_nb5: "3) Visualize associations between velocity and attribute data" |
177 |
| - |
178 |
| - |
179 |
| - #sentinel nb1 |
180 |
| - a_s1_nb1: "A. Prepare to read data into memory" |
181 |
| - a1_s1_nb1: "1) Build lists of file names and paths needed for VRT objects" |
182 |
| - a2_s1_nb1: "2) Create VRT objects" |
183 |
| - b_s1_nb1: "B. Read data" |
184 |
| - b1_s1_nb1: "1) Take a look at chunking" |
185 |
| - # sentinel nb2 |
186 |
| - a_s1_nb2: "A. Read and inspect initial metadata" |
187 |
| - a1_s1_nb2: "1) Add appropriate names to variables" |
188 |
| - a2_s1_nb2: "2) What metadata currently exists?" |
189 |
| - |
190 |
| - b_s1_nb2: "B. Add metadata from file name" |
191 |
| - b1_s1_nb2: "1) Parse file name" |
192 |
| - b2_s1_nb2: "2) Extract and format acquisition dates" |
193 |
| - b3_s1_nb2: "3) Combine data cubes" |
194 |
| - |
195 |
| - c_s1_nb2: "C. Time-varying metadata" |
196 |
| - c1_s1_nb2: "1) Extract attributes as list of dictionaries" |
197 |
| - c2_s1_nb2: "2) Create tuple of metadata for each type of information" |
198 |
| - c3_s1_nb2: "3) Assign metadata tuple to Xarray dataset as a coordinate variable" |
199 |
| - |
200 |
| - d_s1_nb2: "D. Add metadata from a markdown file" |
201 |
| - d1_s1_nb2: "1) Extract granule ID" |
202 |
| - d2_s1_nb2: "2) Build coordinate `xr.DataArray`" |
203 |
| - |
204 |
| - #sentinel nb3 |
205 |
| - a_s1_nb3: "A. Read and prepare data" |
206 |
| - a1_s1_nb3: "1) Clip to spatial area of interest" |
207 |
| - |
208 |
| - b_s1_nb3: "B. Layover-shadow map" |
209 |
| - b1_s1_nb3: "1) Interactive visualization of layover-shadow maps" |
210 |
| - |
211 |
| - c_s1_nb3: "C. Orbital direction" |
212 |
| - c1_s1_nb3: "1) Is a pass ascending or descending?" |
213 |
| - c2_s1_nb3: "2) Assign orbital direction as a coordinate variable" |
214 |
| - |
215 |
| - d_s1_nb3: "D. Duplicate time steps" |
216 |
| - d1_s1_nb3: "1) Identify duplicate time steps" |
217 |
| - d2_s1_nb3: "2) Visualize duplicates" |
218 |
| - d3_s1_nb3: "3) Drop duplicates" |
219 |
| - |
220 |
| - e_s1_nb3: "E. Examine coverage over time series" |
221 |
| - |
222 |
| - f_s1_nb3: "F. Data visualization" |
223 |
| - f1_s1_nb3: "1) Mean backscatter over time" |
224 |
| - f2_s1_nb3: "2) Seasonal backscatter variability" |
225 |
| - f3_s1_nb3: "3) Backscatter time series" |
226 |
| - |
227 |
| - |
228 |
| - |
229 |
| - |
230 |
| - #s1 nb4 |
231 |
| - a_s1_nb4: "A. Connect to Microsoft Planetary Computer" |
232 |
| - a1_s1_nb4: "1) Explore STAC metadata" |
233 |
| - |
234 |
| - b_s1_nb4: "B. Read data and create Xarray data cube" |
235 |
| - b1_s1_nb4: "1) Create a Dask distributed cluster" |
236 |
| - b2_s1_nb4: "2) Use `stackstac` to pull queried data from Planetary Computer" |
237 |
| - b3_s1_nb4: "3) Inspect dataset" |
238 |
| - #b4_s1_nb4: "4) Convert a 4-d `xr.DataArray` to a 3-d `xr.Dataset`" |
239 |
| - |
240 |
| - c_s1_nb4: "C. Visualize data" |
241 |
| - c1_s1_nb4: "1) Ascending and descending pass acquisitions" |
242 |
| - c2_s1_nb4: "2) Variability over time" |
243 |
| - c3_s1_nb4: "3) Seasonal variability" |
244 |
| - |
245 |
| - #s1 nb5 |
246 |
| - a_s1_nb5: "A. Read and prepare data" |
247 |
| - a1_s1_nb5: "1) Check coordinate reference system information" |
248 |
| - |
249 |
| - b_s1_nb5: "B. Ensure direct comparison between datasets" |
250 |
| - b1_s1_nb5: "1) Subset time series to common time steps" |
251 |
| - b2_s1_nb5: "2) Handle differences in spatial resolution" |
252 |
| - b3_s1_nb5: "3) Mask missing data from one dataset" |
253 |
| - |
254 |
| - c_s1_nb5: "C. Combine objects" |
255 |
| - c1_s1_nb5: "1) `expand_dims()` to add 'source' dimension" |
256 |
| - c2_s1_nb5: "2) `combine_by_coords()`" |
257 |
| - |
258 |
| - d_s1_nb5: "D. Visualize comparison" |
259 |
| - d1_s1_nb5: "1) Mean over time" |
260 |
| - d2_s1_nb5: "2) Mean over space" |
261 |
| - d3_s1_nb5: "3) Difference" |
262 |
| - |
263 | 81 | # Not sure why but uncommenting these causes all of the md
|
264 | 82 | # substitution variables and formatting like tabs to not work
|
265 | 83 | #sphinx:
|
|
0 commit comments