├── LICENSE
└── README.md
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Peter Dannemann
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # GIS Programming Roadmap
2 |
3 |
4 |
5 |
6 |
7 | Under development
8 |
9 |
10 | ## Table of Contents
11 | - [Intro](#intro)
12 | - [GIS Fundamentals](#gis-fundamentals)
13 | - [Intro to CS](#intro-to-cs)
14 | - [Data Analysis with Python](#data-analysis-with-python)
15 | - [GIS Programming with Python](#gis-programming-with-python)
16 | - [Databases](#databases)
17 | - [Spatial SQL](#spatial-sql)
18 | - [Version Control](#version-control)
19 | - [ETL](#etl)
20 | - [Web Development Fundamentals](#web-development-fundamentals)
21 | - [Web GIS](#web-gis)
22 | - [Front End Libraries](#front-end-libraries)
23 | - [Backend Web Development](#backend-web-development)
24 |
25 | ## Intro
26 | This repository lays out a path to take someone with no GIS experience to a proficient GIS Developer. The sections are organized by skill level and meant to be progressed through sequentially. This was highly inspired by [Open Source Society University](https://github.com/ossu/computer-science#introduction-to-computer-science).
27 |
28 | Resources mostly come from highly effective and free courses as well as blog posts and tutorials. There is a mixture of proprietary (ESRI) and open-source materials.
29 |
30 | Please feel free to contribute and correct any errors that I inevitably will make.
31 |
32 | ## GIS Fundamentals
33 |
34 | If you've taken an intro to GIS course or used GIS in the workplace for more than a few months, skip this section. Otherwise, let's review some materials to make sure we have a basic understanding of what GIS is, what common GIS tasks are, and what GIS tools exist out there.
35 |
36 | Choose one of desktop softwares below and run through the associated course to get up to speed. This will take about 40 hours and will give you a great foundation in GIS.
37 |
38 | ##### ArcMap / ArcPro
39 | ArcMap and ArcPro are proprietary desktop software for performing GIS analysis distributed by ESRI. These are the most widely used in the industry and learning them is the safest bet at dipping your feet into the industry. Getting to Know ArcPro comes with a free one-year ArcPro license and is well worth the money if you are serious about entering the field. If you take an intro to GIS course through a college, chances are you'll run through this book as a majority of your course work.
40 |
41 | ##### QGIS
42 | The most commonly used open source desktop software. It is free to download and has a wide array of plugins that let you do just about anything with GIS.
43 |
44 |
45 |
46 | | Courses (Choose one) | Difficulty | GIS Software |
47 | |--------------------------------------------------------------------------------------------------------------------------|------------|--------------|
48 | | [Coursera GIS Specialization](https://www.coursera.org/specializations/gis) | Easy | ArcPro|
49 | | [Getting to Know ArcPro](https://esripress.esri.com/display/index.cfm?fuseaction=display&websiteID=229&moduleID=0) ($40) | Easy | ArcPro |
50 | | [Official QGIS Tutorial](https://docs.qgis.org/3.4/en/docs/training_manual/foreword/index.html) | Easy | QGIS |
51 |
52 |
53 |
54 | ##### Reading (Optional)
55 | - [GIS Fundamentals: GIS Fundamentals: A First Text on Geographic Information Systems](https://www.amazon.com/GIS-Fundamentals-Geographic-Information-Systems/dp/0971764735)
56 |
57 | ## Intro to CS
58 | Learn basics of programming. How much you enjoy one of these courses may be a good indicator of your success in programming.
59 |
60 |
61 |
62 | | Courses (Choose One) | Difficulty | Languages |
63 | |-------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|----------------------------------------|
64 | | [Introduction to Computer Science and Programming using Python](https://www.edx.org/course/introduction-to-computer-science-and-programming-using-python-0) | Medium | Python |
65 | | [CS50: Introduction to Computer Science](https://online-learning.harvard.edu/course/cs50-introduction-computer-science) | Hard | C, PHP, JavaScript, SQL, CSS, and HTML |
66 | | [CS50P: Introduction to Programming with Python](https://cs50.harvard.edu/python/2022/) | Medium | Python |
67 |
68 |
69 |
70 | ## Data Analysis with Python
71 | Learn how to use popular data analysis libraries in Python such as Numpy and Pandas. I'm listing quite a few paid options here because they are of very high quality and are interactive.
72 |
73 |
74 |
75 | | Resource (Choose one) | Difficulty |
76 | |---------------------------------------------------------------------------------------------------------------|------------|
77 | | [Geo Python](https://geo-python.github.io/site/) | Medium |
78 | | [Python Data Science Handbook](https://jakevdp.github.io/PythonDataScienceHandbook/) | Medium |
79 | | [Python for Data Analysis](https://www.amazon.com/Python-Data-Analysis-Wrangling-IPython/dp/1449319793) ($28) | Medium |
80 | | [Dataquest](https://www.dataquest.io/) ($23 - $50 / month) | Medium |
81 | | [Data Camp](https://www.datacamp.com/) ($25 - $30 / month) | Medium |
82 | | [Brandon Rhoades Pandas Tutorial](https://www.youtube.com/watch?v=5JnMutdy6Fw&feature=youtu.be) | Medium |
83 |
84 |
85 |
86 | ## GIS Programming with Python
87 | Learn how to write scripts to perform GIS analyses and automate repetetive tasks with Python.
88 |
89 |
90 |
91 | | Courses (Choose One) | Difficulty | GIS Software |
92 | |-------------------------------------------------------------------------------------------------------|-------------------------------------|------------|
93 | | [GEOG 485: GIS Programming and Software Development](https://www.e-education.psu.edu/geog485/node/91) | Medium | ArcGIS / ArcPy |
94 | | [Automating GIS Processes](https://autogis-site.readthedocs.io/en/latest/) | Medium | GDAL, OGR, GeoPandas, Shapely, QGIS |
95 |
96 |
97 |
98 | ##### Recommended Additional Courses
99 | - [GEOG 489: Advanced Python Programming for GIS](https://www.e-education.psu.edu/geog489/node/1776)
100 | - [Geographic Data Science](http://darribas.org/gds18/)
101 | - [Python for GIS Progression Path](https://github.com/AlexArcPy/python-for-gis-progression-path)
102 | - [Coursera: Spatial Data Science and Applications](https://www.coursera.org/learn/spatial-data-science)
103 | - [Datacamp: Visualizing Geospatial Data in Python](https://www.datacamp.com/courses/visualizing-geospatial-data-in-python)
104 |
105 | ##### Readings (Optional)
106 | - [Python Scripting for ArcGIS](https://esripress.esri.com/display/index.cfm?fuseaction=display&websiteID=276&moduleID=0) (ESRI)
107 | - [Geoprocessing with Python](https://www.manning.com/books/geoprocessing-with-python) (Open Source)
108 | - [GeoPySpark](https://github.com/locationtech-labs/geopyspark)
109 | - [Introduction to Geospatial Data in Python](https://www.datacamp.com/community/tutorials/geospatial-data-python)
110 |
111 | ## Databases
112 | Learn how to query data, make tables and views, and perform data analysis with databases.
113 |
114 |
115 |
116 | | Courses (Choose one) | Difficulty | Database Engine |
117 | |-------------------------------------------------------------------------------------------------------|--------------------------------------------------|------------|
118 | | [SQL Zoo](https://sqlzoo.net/) | Medium | SQL Server, Oracle, MySQL, DB2, and PostgreSQL |
119 | | [Stanford - Introduction to Databases](https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about) | Hard | Unknown |
120 | | [CS145: Data Management and Data Systems](https://cs145-fa18.github.io/course_info.html) | Hard | Google BigQuery |
121 |
122 |
123 |
124 | ##### Additional Tutorial
125 | - [SqlAlchemy Tutorial](https://docs.sqlalchemy.org/en/latest/orm/tutorial.html)
126 |
127 | ## Spatial SQL
128 | Learn how to store GIS data and manipulate it in a database.
129 |
130 |
131 |
132 | | Courses (Choose one) | Difficulty | Database Engine |
133 | |-----------------------------------------------------------------------------------------------------------------------------------------|----------------------|------------|
134 | | [GEOG 868 - Spatial Database Management](https://www.e-education.psu.edu/spatialdb/node/1776) | Medium | PostgreSQL / PostGIS |
135 | | [Official - Intro to PostGIS](https://postgis.net/workshops/postgis-intro/) | Medium | PostgreSQL / PostGIS |
136 | | [CS145: Data Management and Data Systems](https://cs145-fa18.github.io/course_info.html) | Hard | Google BigQuery |
137 |
138 |
139 |
140 | ##### Reading (Optional)
141 | - [GeoAlchemy Documentation](https://geoalchemy-2.readthedocs.io/en/latest/)
142 |
143 | ## Version Control
144 | Learn how to manage projects using version control.
145 |
146 |
147 |
148 | | Resource (Choose one) | Difficulty | Software |
149 | |------------------------------------------------------------|------------|------------|
150 | | [Git Documentation](https://git-scm.com/doc) | Medium | Git |
151 | | [Git Offical Resources](https://try.github.io/) | Medium | Git |
152 | | [Git Tutorial by Atlassian](https://www.atlassian.com/git) | Medium | Git |
153 |
154 |
155 |
156 | ## ETL
157 | Learn how to extract, transform, and load data.
158 |
159 |
160 |
161 | | Courses | Difficulty | Skill Taught |
162 | |----------------------------------------------------------------------------------------------------|-------------------------------------------|------------|
163 | | [Dataquest Data Engineer Path](https://www.dataquest.io/path/data-engineer) ($24.50 - $50 / month) | Hard | Database Optimizing, ETL, Task Management |
164 | | [FME Workbench Tutorials](https://knowledge.safe.com/page/tutorials) | Medium | FME, Spatial ETL |
165 |
166 |
167 |
168 | ##### Additional Resources
169 | - [Petl Documentation](https://petl.readthedocs.io/en/stable/)
170 | - [Geopetl](https://github.com/rbrtmrtn/geopetl)
171 | - [Using Python Script for Data ETL](https://codeburst.io/using-python-script-for-data-etl-53138c567906)
172 | - [A Beginner's Guide to Data Engineering](https://medium.com/@rchang/a-beginners-guide-to-data-engineering-part-i-4227c5c457d7)
173 |
174 | ##### Reading (optional)
175 | - [Airflow Documentation](https://airflow.apache.org/)
176 | - [Luigi Documentation](https://luigi.readthedocs.io/en/stable/)
177 |
178 | ## Web Development Fundamentals
179 | Learn the basics of web development. It's very important to do this before trying to jump into web GIS.
180 |
181 |
182 |
183 | | Courses (Choose one) | Difficulty | Languages |
184 | |---------------------------------------------------------------------------------------------------------------------------------|---------------------------------------|------------|
185 | | [CS50: Web Programming with Python and JavaScript](https://www.edx.org/course/cs50s-web-programming-with-python-and-javascript) | Medium | Python, HTML, CSS, Javascript, SQL |
186 | | [Colt Steele's Web Developer Bootcamp](https://www.udemy.com/the-web-developer-bootcamp/) ($10, search for coupon) | Medium | Node.js, HTML, CSS, Javascript, NoSQL |
187 | | [The Odin Project](https://www.theodinproject.com/) | Medium | Ruby, HTML, CSS, Javascript |
188 |
189 |
190 |
191 | ##### Recommended Additional Course
192 | - [Colt Steele's Advanced Web Developer Bootcamp](https://www.udemy.com/the-advanced-web-developer-bootcamp/) ($10, search for coupon)
193 |
194 | ## Web GIS
195 | Learn how to add maps to your web applications.
196 |
197 |
198 |
199 | | Courses (Do both) | Difficulty | Languages / Frameworks |
200 | |--------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|--------------------------------------------------|
201 | | [GEOG 863 - Web Application Development for Geospatial Professionals](https://www.e-education.psu.edu/geog863/node/1776) | Easy | HTML, CSS, Javascript, ArcGIS Javascript API |
202 | | [GEOG 585: Open Web Mapping](https://www.e-education.psu.edu/geog585/node/508) | Medium | QGIS, GDAL, OGR, GeoServer, TileMill, Leaflet |
203 |
204 |
205 |
206 | ##### Recommended Additional Course
207 | - [GEOG 865: Cloud and Server GIS](https://www.e-education.psu.edu/geog865/node/25) - Requires an ArcGIS Enterprise Account and an active credit card to register for AWS free tier.
208 |
209 | ##### Additional Tutorials
210 | - [Offical Leaflet Tutorial](https://leafletjs.com/examples.html)
211 | - [MapTime Boston Leaflet Tutorial](https://maptimeboston.github.io/leaflet-intro/)
212 | - [MIT Leaflet Workshop](http://duspviz.mit.edu/web-map-workshop/leaflet-js/)
213 | - [MIT Leaflet with PostGIS, NodeJS, and Express Workshop](http://duspviz.mit.edu/web-map-workshop/leaflet_nodejs_postgis/)
214 |
215 | ##### Reading (Required)
216 | - [ArcGIS REST API Documentation](https://developers.arcgis.com/documentation/core-concepts/rest-api/)
217 | - [ArcGIS: Publishing a map service](http://enterprise.arcgis.com/en/server/latest/get-started/windows/tutorial-publishing-a-map-service.htm)
218 | - [Python - Update Hosted Feature Service](https://github.com/arcpy/update-hosted-feature-service)
219 |
220 | ## Front End Libraries
221 | Learn how to make modern web applications using front end libraries.
222 |
223 |
224 |
225 | | Courses (Choose one) | Difficulty | Framework / Library |
226 | |-----------------------------------------------------------------------------------------------------------------------------------------|---------------------|------------|
227 | | [Tyler Mcginnis: Free Online React BootCamp](https://tylermcginnis.com/free-react-bootcamp/) | Medium | React |
228 | | [Maximilian Schwarzmüller: Angular 7 (formerly Angular 2) - The Complete Guide](https://www.udemy.com/the-complete-guide-to-angular-2/) ($10, search for coupon) | Hard | Angular |
229 | | [Maximilian Schwarzmüller: Vue JS 2 - The Complete Guide](https://www.udemy.com/vuejs-2-the-complete-guide/) ($10, search for coupon) | Easy | Vue |
230 |
231 |
232 |
233 | Front end development is such a broad topic that I'm just going to link to the brilliant frontend section of the [2018 Web Developer Roadmap](https://codeburst.io/the-2018-web-developer-roadmap-826b1b806e8d). You will have picked up most of these skills already by now but getting comfortable with package managers, build tools, state management, CSS preprocessors, and front end testing will put you at a great place for front end development.
234 |
235 | ## Backend Web Development
236 | Learn how to serve data to a client with a backend server. Almost all of the backend GIS development job postings I've seen require .Net Core (C#). I've seen a few GIS projects using Flask, Django (Python) and Java, but C# definitely seems to be the dominant force here.
237 |
238 | Backend development is such a broad topic that I'm just going to link to the brilliant backend section of the [2018 Web Developer Roadmap](https://codeburst.io/the-2018-web-developer-roadmap-826b1b806e8d).
239 |
240 | ##### Additional Tutorials
241 | - [GeoDjango Tutorial](https://docs.djangoproject.com/en/2.1/ref/contrib/gis/tutorial/) (Python)
242 | - [Make a Location-Based Web App With Django and GeoDjango](https://realpython.com/location-based-app-with-geodjango-tutorial/) (Python)
243 | - [GeoTools](https://www.geotools.org/) (Java)
244 | - [Hibernate ORM](https://hibernate.org/orm/) (Java)
245 | - [LocationTech Proj4J Tutorial](https://projects.eclipse.org/projects/locationtech.proj4j) (Java)
246 | - [LocationTech JTS Topology Suite](https://projects.eclipse.org/projects/locationtech.jts) (Java)
247 |
--------------------------------------------------------------------------------