{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Python Tools for Geospatial Imagery Data and Machine Learning\n",
    "\n",
    "This guide is designed to provide an overview to the tools in Python for gathering, plotting, and performing computation on Earth observation data, especially satellite imagery data.\n",
    "\n",
    "```{margin} Timeline\n",
    "This guide is a work in progress; additions to this guide will be made as learning objectives require it\n",
    "```\n",
    "\n",
    "This is a guide that is first and foremost for students in graduate and undergraduate level machine learning and computer vision courses and projects, but who are new to working with satellite imagery data.\n",
    "\n",
    ":::{note}\n",
    "This guide assumes knowledge of Python programming and tools including `matplotlib`, `numpy`, and `pandas`. This guide also assumes a basic knowledge of geospatial data representations (raster and vector data, coordinate systems and projections)\n",
    ":::\n",
    "\n",
    "The learning objectives for this guide are:\n",
    "- Setup for the packages needed for analysis including [`geopandas`](https://geopandas.org/en/stable/), [`rasterio`](https://rasterio.readthedocs.io/en/latest/), [`xarray`](https://docs.xarray.dev/en/stable/), and [Google Earth Engine](https://developers.google.com/earth-engine/tutorials/community/intro-to-python-api) among others\n",
    "- Create basic plots of georeferenced raster data and vector geospatial data.\n",
    "- Access data from public datasets such as Landsat, Sentinel, and NAIP imagery using Google Earth Engine\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "There are a number of other relevant resources recommended on this subject that go deeper including:\n",
    "- [Automating GIS processes](https://autogis-site.readthedocs.io/en/latest/)\n",
    "- [Introduction to Python for Geographic Data Analysis](https://python-gis-book.readthedocs.io/en/latest/)\n",
    "- [Introduction to Geospatial Raster and Vector Data with Python](https://carpentries-incubator.github.io/geospatial-python/)\n",
    "- [Earth Data Science](https://www.earthdatascience.org/)\n",
    "    - [Earth Lab: Intermediate Earth Data Science Textbook](https://www.earthdatascience.org/courses/intro-to-earth-data-science/)\n",
    "    - [Earth Lab: Python Open Source Plotting Guide for Scientists](https://www.earthdatascience.org/courses/scientists-guide-to-plotting-data-in-python/)\n",
    "- [Python for Geospatial Analysis](https://www.tomasbeuzen.com/python-for-geospatial-analysis/README.html)\n",
    "- [CVPR Tutorial - Machine Learning for Remote Sensing\n",
    "Agriculture and Food Security](https://nasaharvest.github.io/cvpr2022.html)\n",
    "- [Spatial Thoughts](https://courses.spatialthoughts.com/)\n",
    "- [Mapping and Data Visualization with Python](https://courses.spatialthoughts.com/python-dataviz.html#visualizing-rasters)\n",
    "- [Python Foundation for Spatial Analysis](https://courses.spatialthoughts.com/python-foundation.html#working-with-rasterio)\n",
    "- [End-to-End Google Earth Engine](https://courses.spatialthoughts.com/end-to-end-gee.html)\n",
    "- [Bootcamp on Machine Learning for Earth Observations](https://github.com/radiantearth/ml4eo-bootcamp-2021)\n",
    "- [An Introduction to Earth and Environmental Data Science](https://earth-env-data-science.github.io/intro.html)\n",
    "\n",
    "\n",
    "Possible packages of interest:\n",
    "- [eo-learn](https://github.com/sentinel-hub/eo-learn)\n",
    "- [raster-vision](https://github.com/azavea/raster-vision)\n",
    "- [rasterstats](https://github.com/perrygeo/python-rasterstats)\n",
    "- [folium](https://github.com/python-visualization/folium)\n",
    "- [geemap](https://geemap.org/)\n",
    "\n",
    "Misc Packages:\n",
    "- [geocube](https://github.com/corteva/geocube): tool to convert geopandas vector dat in to rasterized xarray data\n",
    "- [GDAL](https://gdal.org/index.html)\n",
    "- [rasterframes](https://rasterframes.io/)\n",
    "- [rsgislib](https://github.com/remotesensinginfo/rsgislib)\n",
    "- [geomesa](https://www.geomesa.org/documentation/stable/index.html)\n",
    "- [geopy](https://github.com/geopy/geopy/blob/ade9c1b68c83a1fc76d90bc0ff603f6b34dfbbbf/docs/index.rst). Locate the coordinates of addresses, cities, countries, and landmarks across the globe using third-party geocoders and other data sources\n",
    "- [kepler](https://docs.kepler.gl/)\n",
    "- [cartoframes](https://carto.com/developers/cartoframes/)\n",
    "- [leafmap](https://leafmap.org/)\n",
    "- [OSMnx](https://github.com/gboeing/osmnx/tree/7ad3ba43cbb94b4a3866f6cb1de9c34b40262660)\n",
    "\n",
    "\n",
    "Other possible resources:\n",
    "- [Awesome Geospatial](https://github.com/sacridini/Awesome-Geospatial)\n",
    "- [Awesome GIS](https://github.com/sshuair/awesome-gis#python)\n",
    "- [Essentail Geospatial Python Libraries](https://mapscaping.com/essential-geospatial-python-libraries/)\n",
    "- [PySAL](https://pysal.org/)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.8.2 64-bit",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.8.2"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
