1+
2+ <!doctype html>
3+ < html lang ="en " class ="no-js ">
4+ < head >
5+
6+ < meta charset ="utf-8 ">
7+ < meta name ="viewport " content ="width=device-width,initial-scale=1 ">
8+
9+ < meta name ="description " content ="Doing Geospatial in Python is a workshop on performing common GIS/geospatial tasks using Python geospatial tools. ">
10+
11+
12+ < meta name ="author " content ="the Doing Geospatial in Python Team ">
13+
14+
15+
16+
17+
18+ < link rel ="icon " href ="/geopython-workshop/assets/images/favicon.png ">
19+ < meta name ="generator " content ="mkdocs-1.6.1, mkdocs-material-9.6.15 ">
20+
21+
22+
23+ < title > Doing Geospatial in Python</ title >
24+
25+
26+
27+ < link rel ="stylesheet " href ="/geopython-workshop/assets/stylesheets/main.342714a4.min.css ">
28+
29+
30+ < link rel ="stylesheet " href ="/geopython-workshop/assets/stylesheets/palette.06af60db.min.css ">
31+
32+
33+
34+
35+
36+
37+
38+
39+
40+
41+
42+
43+ < link rel ="preconnect " href ="https://fonts.gstatic.com " crossorigin >
44+ < link rel ="stylesheet " href ="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback ">
45+ < style > : root {--md-text-font : "Roboto" ;--md-code-font : "Roboto Mono" }</ style >
46+
47+
48+
49+ < link rel ="stylesheet " href ="/geopython-workshop/assets/stylesheets/termynal.css ">
50+
51+ < link rel ="stylesheet " href ="/geopython-workshop/assets/stylesheets/custom.css ">
52+
53+ < script > __md_scope = new URL ( "/geopython-workshop/" , location ) , __md_hash = e => [ ...e ] . reduce ( ( ( e , _ ) => ( e << 5 ) - e + _ . charCodeAt ( 0 ) ) , 0 ) , __md_get = ( e , _ = localStorage , t = __md_scope ) => JSON . parse ( _ . getItem ( t . pathname + "." + e ) ) , __md_set = ( e , _ , t = localStorage , a = __md_scope ) => { try { t . setItem ( a . pathname + "." + e , JSON . stringify ( _ ) ) } catch ( e ) { } } </ script >
54+
55+
56+
57+
58+
59+
60+ </ head >
61+
62+
63+
64+
65+
66+
67+
68+
69+
70+ < body dir ="ltr " data-md-color-scheme ="default " data-md-color-primary ="indigo " data-md-color-accent ="indigo ">
71+
72+
73+ < input class ="md-toggle " data-md-toggle ="drawer " type ="checkbox " id ="__drawer " autocomplete ="off ">
74+ < input class ="md-toggle " data-md-toggle ="search " type ="checkbox " id ="__search " autocomplete ="off ">
75+ < label class ="md-overlay " for ="__drawer "> </ label >
76+ < div data-md-component ="skip ">
77+
78+ </ div >
79+ < div data-md-component ="announce ">
80+
81+ </ div >
82+
83+
84+
85+
86+
87+
88+ < header class ="md-header md-header--shadow " data-md-component ="header ">
89+ < nav class ="md-header__inner md-grid " aria-label ="Header ">
90+ < a href ="/geopython-workshop/. " title ="Doing Geospatial in Python " class ="md-header__button md-logo " aria-label ="Doing Geospatial in Python " data-md-component ="logo ">
91+
92+
93+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 "> < path d ="M19.14 7.5A2.86 2.86 0 0 1 22 10.36v3.78A2.86 2.86 0 0 1 19.14 17H12c0 .39.32.96.71.96H17v1.68a2.86 2.86 0 0 1-2.86 2.86H9.86A2.86 2.86 0 0 1 7 19.64v-3.75a2.85 2.85 0 0 1 2.86-2.85h5.25a2.85 2.85 0 0 0 2.85-2.86V7.5zm-4.28 11.79c-.4 0-.72.3-.72.89s.32.71.72.71a.71.71 0 0 0 .71-.71c0-.59-.32-.89-.71-.89m-10-1.79A2.86 2.86 0 0 1 2 14.64v-3.78A2.86 2.86 0 0 1 4.86 8H12c0-.39-.32-.96-.71-.96H7V5.36A2.86 2.86 0 0 1 9.86 2.5h4.28A2.86 2.86 0 0 1 17 5.36v3.75a2.85 2.85 0 0 1-2.86 2.85H8.89a2.85 2.85 0 0 0-2.85 2.86v2.68zM9.14 5.71c.4 0 .72-.3.72-.89s-.32-.71-.72-.71c-.39 0-.71.12-.71.71s.32.89.71.89 "/> </ svg >
94+
95+ </ a >
96+ < label class ="md-header__button md-icon " for ="__drawer ">
97+
98+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 "> < path d ="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z "/> </ svg >
99+ </ label >
100+ < div class ="md-header__title " data-md-component ="header-title ">
101+ < div class ="md-header__ellipsis ">
102+ < div class ="md-header__topic ">
103+ < span class ="md-ellipsis ">
104+ Doing Geospatial in Python
105+ </ span >
106+ </ div >
107+ < div class ="md-header__topic " data-md-component ="header-topic ">
108+ < span class ="md-ellipsis ">
109+
110+
111+
112+ </ span >
113+ </ div >
114+ </ div >
115+ </ div >
116+
117+
118+ < form class ="md-header__option " data-md-component ="palette ">
119+
120+
121+
122+
123+ < input class ="md-option " data-md-color-media ="(prefers-color-scheme: light) " data-md-color-scheme ="default " data-md-color-primary ="indigo " data-md-color-accent ="indigo " aria-label ="Switch to dark mode " type ="radio " name ="__palette " id ="__palette_0 ">
124+
125+ < label class ="md-header__button md-icon " title ="Switch to dark mode " for ="__palette_1 " hidden >
126+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 "> < path d ="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z "/> </ svg >
127+ </ label >
128+
129+
130+
131+
132+
133+ < input class ="md-option " data-md-color-media ="(prefers-color-scheme: dark) " data-md-color-scheme ="slate " data-md-color-primary ="indigo " data-md-color-accent ="indigo " aria-label ="Switch to light mode " type ="radio " name ="__palette " id ="__palette_1 ">
134+
135+ < label class ="md-header__button md-icon " title ="Switch to light mode " for ="__palette_0 " hidden >
136+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 "> < path d ="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z "/> </ svg >
137+ </ label >
138+
139+
140+ </ form >
141+
142+
143+
144+ < script > var palette = __md_get ( "__palette" ) ; if ( palette && palette . color ) { if ( "(prefers-color-scheme)" === palette . color . media ) { var media = matchMedia ( "(prefers-color-scheme: light)" ) , input = document . querySelector ( media . matches ?"[data-md-color-media='(prefers-color-scheme: light)']" :"[data-md-color-media='(prefers-color-scheme: dark)']" ) ; palette . color . media = input . getAttribute ( "data-md-color-media" ) , palette . color . scheme = input . getAttribute ( "data-md-color-scheme" ) , palette . color . primary = input . getAttribute ( "data-md-color-primary" ) , palette . color . accent = input . getAttribute ( "data-md-color-accent" ) } for ( var [ key , value ] of Object . entries ( palette . color ) ) document . body . setAttribute ( "data-md-color-" + key , value ) } </ script >
145+
146+
147+
148+
149+
150+ < label class ="md-header__button md-icon " for ="__search ">
151+
152+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 "> < path d ="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5 "/> </ svg >
153+ </ label >
154+ < div class ="md-search " data-md-component ="search " role ="dialog ">
155+ < label class ="md-search__overlay " for ="__search "> </ label >
156+ < div class ="md-search__inner " role ="search ">
157+ < form class ="md-search__form " name ="search ">
158+ < input type ="text " class ="md-search__input " name ="query " aria-label ="Search " placeholder ="Search " autocapitalize ="off " autocorrect ="off " autocomplete ="off " spellcheck ="false " data-md-component ="search-query " required >
159+ < label class ="md-search__icon md-icon " for ="__search ">
160+
161+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 "> < path d ="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5 "/> </ svg >
162+
163+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 "> < path d ="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z "/> </ svg >
164+ </ label >
165+ < nav class ="md-search__options " aria-label ="Search ">
166+
167+ < button type ="reset " class ="md-search__icon md-icon " title ="Clear " aria-label ="Clear " tabindex ="-1 ">
168+
169+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 "> < path d ="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z "/> </ svg >
170+ </ button >
171+ </ nav >
172+
173+ </ form >
174+ < div class ="md-search__output ">
175+ < div class ="md-search__scrollwrap " tabindex ="0 " data-md-scrollfix >
176+ < div class ="md-search-result " data-md-component ="search-result ">
177+ < div class ="md-search-result__meta ">
178+ Initializing search
179+ </ div >
180+ < ol class ="md-search-result__list " role ="presentation "> </ ol >
181+ </ div >
182+ </ div >
183+ </ div >
184+ </ div >
185+ </ div >
186+
187+
188+
189+ < div class ="md-header__source ">
190+ < a href ="https://github.com/geopython/geopython-workshop " title ="Go to repository " class ="md-source " data-md-component ="source ">
191+ < div class ="md-source__icon md-icon ">
192+
193+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 448 512 "> <!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--> < path d ="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81 "/> </ svg >
194+ </ div >
195+ < div class ="md-source__repository ">
196+ GitHub
197+ </ div >
198+ </ a >
199+ </ div >
200+
201+ </ nav >
202+
203+ </ header >
204+
205+ < div class ="md-container " data-md-component ="container ">
206+
207+
208+
209+
210+
211+
212+ < main class ="md-main " data-md-component ="main ">
213+ < div class ="md-main__inner md-grid ">
214+
215+
216+
217+ < div class ="md-sidebar md-sidebar--primary " data-md-component ="sidebar " data-md-type ="navigation " >
218+ < div class ="md-sidebar__scrollwrap ">
219+ < div class ="md-sidebar__inner ">
220+
221+
222+
223+
224+ < nav class ="md-nav md-nav--primary " aria-label ="Navigation " data-md-level ="0 ">
225+ < label class ="md-nav__title " for ="__drawer ">
226+ < a href ="/geopython-workshop/. " title ="Doing Geospatial in Python " class ="md-nav__button md-logo " aria-label ="Doing Geospatial in Python " data-md-component ="logo ">
227+
228+
229+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 "> < path d ="M19.14 7.5A2.86 2.86 0 0 1 22 10.36v3.78A2.86 2.86 0 0 1 19.14 17H12c0 .39.32.96.71.96H17v1.68a2.86 2.86 0 0 1-2.86 2.86H9.86A2.86 2.86 0 0 1 7 19.64v-3.75a2.85 2.85 0 0 1 2.86-2.85h5.25a2.85 2.85 0 0 0 2.85-2.86V7.5zm-4.28 11.79c-.4 0-.72.3-.72.89s.32.71.72.71a.71.71 0 0 0 .71-.71c0-.59-.32-.89-.71-.89m-10-1.79A2.86 2.86 0 0 1 2 14.64v-3.78A2.86 2.86 0 0 1 4.86 8H12c0-.39-.32-.96-.71-.96H7V5.36A2.86 2.86 0 0 1 9.86 2.5h4.28A2.86 2.86 0 0 1 17 5.36v3.75a2.85 2.85 0 0 1-2.86 2.85H8.89a2.85 2.85 0 0 0-2.85 2.86v2.68zM9.14 5.71c.4 0 .72-.3.72-.89s-.32-.71-.72-.71c-.39 0-.71.12-.71.71s.32.89.71.89 "/> </ svg >
230+
231+ </ a >
232+ Doing Geospatial in Python
233+ </ label >
234+
235+ < div class ="md-nav__source ">
236+ < a href ="https://github.com/geopython/geopython-workshop " title ="Go to repository " class ="md-source " data-md-component ="source ">
237+ < div class ="md-source__icon md-icon ">
238+
239+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 448 512 "> <!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--> < path d ="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81 "/> </ svg >
240+ </ div >
241+ < div class ="md-source__repository ">
242+ GitHub
243+ </ div >
244+ </ a >
245+ </ div >
246+
247+ < ul class ="md-nav__list " data-md-scrollfix >
248+
249+
250+
251+
252+
253+
254+
255+ < li class ="md-nav__item ">
256+ < a href ="/geopython-workshop/. " class ="md-nav__link ">
257+
258+
259+
260+ < span class ="md-ellipsis ">
261+ Home
262+
263+ </ span >
264+
265+
266+ </ a >
267+ </ li >
268+
269+
270+
271+
272+
273+
274+
275+
276+
277+ < li class ="md-nav__item ">
278+ < a href ="/geopython-workshop/docker/ " class ="md-nav__link ">
279+
280+
281+
282+ < span class ="md-ellipsis ">
283+ Docker installation
284+
285+ </ span >
286+
287+
288+ </ a >
289+ </ li >
290+
291+
292+
293+ </ ul >
294+ </ nav >
295+ </ div >
296+ </ div >
297+ </ div >
298+
299+
300+
301+ < div class ="md-sidebar md-sidebar--secondary " data-md-component ="sidebar " data-md-type ="toc " >
302+ < div class ="md-sidebar__scrollwrap ">
303+ < div class ="md-sidebar__inner ">
304+
305+
306+ < nav class ="md-nav md-nav--secondary " aria-label ="Table of contents ">
307+
308+
309+
310+
311+ </ nav >
312+ </ div >
313+ </ div >
314+ </ div >
315+
316+
317+
318+ < div class ="md-content " data-md-component ="content ">
319+ < article class ="md-content__inner md-typeset ">
320+
321+ < h1 > 404 - Not found</ h1 >
322+
323+ </ article >
324+ </ div >
325+
326+
327+ < script > var target = document . getElementById ( location . hash . slice ( 1 ) ) ; target && target . name && ( target . checked = target . name . startsWith ( "__tabbed_" ) ) </ script >
328+ </ div >
329+
330+ </ main >
331+
332+ < footer class ="md-footer ">
333+
334+ < div class ="md-footer-meta md-typeset ">
335+ < div class ="md-footer-meta__inner md-grid ">
336+ < div class ="md-copyright ">
337+
338+ < div class ="md-copyright__highlight ">
339+ Copyright (c) 2019-2025 the Doing Geospatial in Python Team< br /> This website is released under the < a href ="https://creativecommons.org/licenses/by/4.0 "> Creative Commons Attribution 4.0 International (CC BY 4.0) license</ a >
340+ </ div >
341+
342+
343+ Made with
344+ < a href ="https://squidfunk.github.io/mkdocs-material/ " target ="_blank " rel ="noopener ">
345+ Material for MkDocs
346+ </ a >
347+
348+ </ div >
349+
350+ </ div >
351+ </ div >
352+ </ footer >
353+
354+ </ div >
355+ < div class ="md-dialog " data-md-component ="dialog ">
356+ < div class ="md-dialog__inner md-typeset "> </ div >
357+ </ div >
358+
359+
360+
361+
362+ < script id ="__config " type ="application/json "> { "base" : "/geopython-workshop/" , "features" : [ ] , "search" : "/geopython-workshop/assets/javascripts/workers/search.d50fe291.min.js" , "tags" : null , "translations" : { "clipboard.copied" : "Copied to clipboard" , "clipboard.copy" : "Copy to clipboard" , "search.result.more.one" : "1 more on this page" , "search.result.more.other" : "# more on this page" , "search.result.none" : "No matching documents" , "search.result.one" : "1 matching document" , "search.result.other" : "# matching documents" , "search.result.placeholder" : "Type to start searching" , "search.result.term.missing" : "Missing" , "select.version" : "Select version" } , "version" : null } </ script >
363+
364+
365+ < script src ="/geopython-workshop/assets/javascripts/bundle.56ea9cef.min.js "> </ script >
366+
367+ < script src ="/geopython-workshop/assets/javascripts/termynal.js "> </ script >
368+
369+ < script src ="/geopython-workshop/assets/javascripts/custom.js "> </ script >
370+
371+
372+ </ body >
373+ </ html >
0 commit comments