├── .gitattributes ├── .gitignore ├── README.md ├── check_env.py ├── notebooks ├── 2_What_is_Geospatial.ipynb ├── 3_Points_and_Lines.ipynb ├── 4_Polygons.ipynb ├── 5_Rasters.ipynb └── 6_Rasters_and_Shapes.ipynb ├── requirements.txt ├── resources ├── assets │ ├── GC.jpg │ ├── Ports.png │ ├── africa_rivers_1.png │ ├── airroutes_mad.png │ ├── black_sea.jpg │ ├── co2_emissions.png │ ├── eez_dark.png │ ├── movie.gif │ ├── my_flight.png │ ├── namerica_rivers.jpg │ ├── network.png │ ├── opening.png │ ├── operations.png │ ├── operations1.png │ ├── operations2.png │ ├── overlay_operations.png │ ├── pakistan.png │ ├── past.png │ ├── pierce_q.png │ ├── polygon_operations.png │ ├── rainforest_vs_desert.png │ ├── raw3.png │ ├── roman_vs_mongols.png │ ├── rome_example.png │ ├── shapes.png │ ├── shapping_lanes_dark.png │ ├── sl_air.png │ ├── sts.png │ ├── timezones.png │ └── undersea_cables_dark.png ├── mongol_empire.geojson └── roman_empire.geojson └── slides ├── 1_Introduction.ipynb ├── 1_Introduction.slides.html ├── 2_geospatial_data.ipynb ├── 2_geospatial_data.slides.html ├── 3_Points_and_Lines.ipynb ├── 3_Points_and_Lines.slides.html ├── 4_Polygons.ipynb ├── 4_Polygons.slides.html ├── 5_Rasters.ipynb ├── 5_Rasters.slides.html ├── 6_Rasters_and_Shapes.ipynb ├── 6_Rasters_and_Shapes.slides.html ├── 7_conclusions.ipynb ├── 7_conclusions.slides.html ├── custom.css ├── slides_reveal.tpl └── topography_basins.png /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | resources/NaturalEarth 2 | *.ipynb_checkpoints* 3 | notebooks/outputs/* 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Creating Beautiful Geospatial Data Visualisations with Python 2 | 3 | ![alt text](https://github.com/symmy596/PythonMaps-Scipy-2022/blob/master/resources/assets/shapping_lanes_dark.png) 4 | 5 | Presented by Dr. Adam Symington (PythonMaps) 6 | 7 | This repository contains all the material needed by students registered for the "Creating Beautiful Geospatial Data Visualisations with Python" tutorial at SciPy 2022 on 12th July 2022. 8 | 9 | For a smooth experience, you will need to make sure that you install or update your Python distribution and download the tutorial material before the day of the tutorial. Furthermore, there are a number of data sources (listed below) required for the tutorial. These will need to be downloaded and placed in the resources folder ahead of time. 10 | 11 | This workshop will consist of four hands on tutorials / examples. 12 | 13 | #### Visualising Points and Lines 14 | 15 | The first part of this task will involve reading, manipulating, and plotting point data and the second will involve the creation linestrings from points. There will be a brief introduction on the task at hand and a run through of the tutorial as well as a brief discussion around the finer points of data visualisation. 16 | - Attendees will use the world port index to generate a map showing the locations of the world’s ports. 17 | - In the second half, attendees will use the locations of the world’s airports and data on the number of flights between each airport to generate a series of linestrings representing flightpaths and plot this data to show the worlds flight paths. 18 | 19 | ##### Learning Outcomes 20 | - Understand how to read and manipulate point/line data as well as generate points and lines from latitude and longitude values. 21 | - Understand how to plot point data with Matplotlib. 22 | - Understand how to generate linestrings from points using Shapely. 23 | - Understand how to plot line data with GeoPandas. 24 | - Understand how to reproject shape data using GeoPandas and Cartopy. 25 | 26 | #### Visualising Polygons 27 | 28 | Following a brief introduction, attendees will be tasked with creating visualisations using polygons and multipolygons. Attendees will use the Natural Earth dataset to generate different visualisations depending on which polygons take their fancy. An example will be provided showing how to overlay the worlds time zones onto a standard world map. 29 | 30 | ##### Learning outcomes: 31 | - Understand how to read and manipulate polygon and multipolygon data as well as generate polygons and multipolygons from latitude and longitude values. 32 | - Understand how plot polygons and multipolygons using GeoPandas. 33 | - Understand how to reproject polygons and multipolygons using GeoPandas and Cartopy. 34 | 35 | #### Visualising Rasters 36 | 37 | There will be a short introduction and then attendees will be tasked with creating visualisations using raster files. There are several open-source raster datasets available through NEO (NASA earth observations) and attendees will be encouraged to use whichever dataset takes their fancy. An example will be provided and discussed outlining how to plot the world’s population density. 38 | 39 | ##### Learning outcomes: 40 | - Understand how to read and manipulate raster data with Rasterio and rioxarray. 41 | - Understand how to plot raster data with Rasterio and Matplotlib 42 | - Understand how to reproject raster data with rioxarray. 43 | 44 | #### Combing shapes with rasters 45 | 46 | This section will outline how to overlay shape data like lines or polygons onto raster data like satellite imagery and how to use polygons to isolate specific parts of a raster. For example, use a polygon representing the borders of a country to isolate the data for that country in the raster image. 47 | 48 | ##### Learning Outcomes: 49 | - Understanding how to use geospatial reference systems to ensure that the shape data is overlaid on the raster data in the correct location. 50 | - Understanding how to use rioxarray to clip a raster according to the outline of a polygon. 51 | 52 | 53 | ## Download Tutorial Materials 54 | 55 | This GitHub repository is all that is needed in terms of tutorial content. The simplest solution is to download the material using this link: 56 | 57 | https://github.com/symmy596/PythonMaps-Scipy-2022/archive/refs/heads/master.zip 58 | 59 | If you are familiar with Git, you can also clone this repository with: 60 | 61 | ``` 62 | $ git clone https://github.com/symmy596/PythonMaps-Scipy-2022.git 63 | ``` 64 | 65 | It will create a new folder named `PythonMaps-Scipy-2022` with all the content you will need. 66 | 67 | There are a number of datasets required for these tutorials. These will need to all be downloaded prior to the tutorial and placed in the resources folder. 68 | 69 | 70 | #### Tutorial 1 Points and Lines 71 | 72 | - [World Port Index (WPI)](https://msi.nga.mil/Publications/WPI) 73 | - [Open Flights](https://openflights.org/data.html) 74 | 75 | #### Tutorial 2 Polygons 76 | 77 | - [Natural Earth](https://www.naturalearthdata.com/) 78 | 79 | #### Tutorial 3 Rasters 80 | 81 | - [Forests](https://globalmaps.github.io/ptc.html) 82 | - [Surface Temperature](https://neo.gsfc.nasa.gov/view.php?datasetId=MOD_LSTD_M&year=2021) 83 | - [NASA](https://neo.gsfc.nasa.gov/) 84 | 85 | #### Tutorial 4 Rasters and Shapes 86 | 87 | - [Topography](https://www.ngdc.noaa.gov/mgg/global/relief/ETOPO1/data/bedrock/grid_registered/georeferenced_tiff/) 88 | - [River Basins](https://www.fao.org/fishery/static/geonetwork/d47ba28e-31be-470d-81cf-ad3d5594fafd/data/) 89 | 90 | 91 | ### Install Packages 92 | 93 | To be able to run the examples, demos and exercises, you must have the following packages installed: 94 | 95 | The following libraries are required to run the workshop 96 | 97 | - geopandas==0.10.2 98 | - pandas==1.4.2 99 | - numpy==1.21.5 100 | - shapely==1.8.0 101 | - matplotlib==3.5.1 102 | - cartopy==0.20.2 103 | - rasterio==1.2.10 104 | - rioxarray==0.11.1 105 | 106 | If you are using Anaconda, you can use the Anaconda Prompt (Windows) or Terminal.app (macOS) to create an environment with the necessary packages: 107 | 108 | 1. Open the Anaconda Prompt or Terminal.app using the below instructions: 109 | - **Windows**: Click Start and search for "Anaconda Prompt". Click on the application to launch a new Anaconda Prompt window. 110 | - **macOS**: Open Spotlight Search (using Cmd+Space) and type "Terminal.app". Click on the application to launch a new Terminal.app window. 111 | 112 | 2. Create a new Anaconda virtual environment by executing the below command in the application window you opened in step 1 above. 113 | 114 | ``` 115 | conda create -n pythonmaps-tutorial jupyter geopandas==0.10.2 pandas==1.4.2 numpy==1.21.5 shapely==1.8.0 matplotlib==3.5.1 cartopy==0.20.2 rasterio==1.2.10 rioxarray==0.11.1 116 | ``` 117 | 118 | 3. To test your installation, please execute the `check_env.py` script in the environment where you have installed the requirements. If you created an Anaconda environment using the instructions above, keep the application window that you opened in step 1 active (or launch the platform specific application again -- Anaconda Prompt for Windows or Terminal.app for macOS), navigate to where you have this GitHub repository, and type: 119 | 120 | ``` 121 | $ conda activate pythonmaps-tutorial 122 | $ python check_env.py 123 | ``` 124 | 125 | You should see a window pop up with a plot that looks vaguely like a smiley face. 126 | -------------------------------------------------------------------------------- /check_env.py: -------------------------------------------------------------------------------- 1 | import rasterio 2 | import matplotlib 3 | import shapely 4 | import pandas as pd 5 | import geopandas as gpd 6 | import numpy as np 7 | import cartopy.crs as ccrs 8 | import matplotlib.pyplot as plt 9 | import rioxarray as rxr 10 | 11 | fig, ax = plt.subplots() 12 | ax.scatter(x=[-3, -2, -1, 0, 1, 2, 3], y=[0, -1, -1.5, -1.75, -1.5, -1, 0]) 13 | ax.scatter(x=[-1.5, 1.5], y=[2, 2], s=1000) 14 | ax.set_ylim((-3, 3)) 15 | plt.show() -------------------------------------------------------------------------------- /notebooks/3_Points_and_Lines.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "e64dff21", 6 | "metadata": {}, 7 | "source": [ 8 | "# Points\n", 9 | "\n", 10 | "Data Source - https://msi.nga.mil/Publications/WPI\n", 11 | "\n", 12 | "- Convert the excel file into a csv and save to the resources folder. \n", 13 | "- Alternatively, there is a ports.csv file in the resources folder with a series of lat/longs placed randomly at the coast. " 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": null, 19 | "id": "8c280ab2", 20 | "metadata": {}, 21 | "outputs": [], 22 | "source": [ 23 | "import pandas as pd\n", 24 | "ports = pd.read_csv(\"../resources/ports.csv\")" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": null, 30 | "id": "50d3e02b", 31 | "metadata": {}, 32 | "outputs": [], 33 | "source": [ 34 | "print(ports)" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": null, 40 | "id": "2ece409b", 41 | "metadata": {}, 42 | "outputs": [], 43 | "source": [ 44 | "from shapely.geometry import Point\n", 45 | "import geopandas as gpd\n", 46 | "\n", 47 | "port_geometry = [Point(xy) for xy in zip(ports['lon'], ports['lat'])]\n", 48 | "port_geodata = gpd.GeoDataFrame(ports, crs=\"EPSG:4326\", geometry=port_geometry)" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": null, 54 | "id": "e9d7fcd2", 55 | "metadata": {}, 56 | "outputs": [], 57 | "source": [ 58 | "import matplotlib.pyplot as plt\n", 59 | "\n", 60 | "fig, ax = plt.subplots()\n", 61 | "port_geodata.plot(ax=ax)\n", 62 | "plt.show()" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": null, 68 | "id": "f116cd20", 69 | "metadata": {}, 70 | "outputs": [], 71 | "source": [ 72 | "import cartopy.crs as ccrs\n", 73 | "\n", 74 | "fig, ax = plt.subplots(subplot_kw={'projection': ccrs.Robinson()})\n", 75 | "port_geodata.plot(ax=ax, transform=ccrs.PlateCarree())\n", 76 | "plt.show()" 77 | ] 78 | }, 79 | { 80 | "cell_type": "markdown", 81 | "id": "0232eb52", 82 | "metadata": {}, 83 | "source": [ 84 | "#### Exercise\n", 85 | "\n", 86 | "\n", 87 | "My attempt\n", 88 | "\n", 89 | "![alt text](../resources/assets/ports.png \"Title\")\n" 90 | ] 91 | }, 92 | { 93 | "cell_type": "markdown", 94 | "id": "2919f88c", 95 | "metadata": {}, 96 | "source": [ 97 | "## Plotting Lines\n", 98 | "\n", 99 | "Data Source - https://openflights.org/data.html\n", 100 | "\n", 101 | "- Download airports.dat and place in the resources folder\n", 102 | "- Download routes.dat and place in the resources folder" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": null, 108 | "id": "db9b67c2", 109 | "metadata": {}, 110 | "outputs": [], 111 | "source": [ 112 | "airports = pd.read_csv(\"../resources/airports\", delimiter=',', names=['id', 'name', 'city', 'country', 'iata', \n", 113 | " 'icao', 'lat', 'long', 'altitude', 'timezone',\n", 114 | " 'dst', 'tz', 'type', 'source'])" 115 | ] 116 | }, 117 | { 118 | "cell_type": "code", 119 | "execution_count": null, 120 | "id": "b966e20f", 121 | "metadata": {}, 122 | "outputs": [], 123 | "source": [ 124 | "print(airports)" 125 | ] 126 | }, 127 | { 128 | "cell_type": "markdown", 129 | "id": "ae682252", 130 | "metadata": {}, 131 | "source": [ 132 | "### Exercise\n", 133 | "\n", 134 | "- Create a list of points from the lat/long values in the airports DataFrame\n", 135 | "- Convert the airports dataframe to a GeoDataFrame using the list of points created above\n", 136 | "- Generate a map of the worlds airports" 137 | ] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "execution_count": null, 142 | "id": "fab9458b", 143 | "metadata": {}, 144 | "outputs": [], 145 | "source": [ 146 | "routes = pd.read_csv(\"../resources/routes\", delimiter=',', names=['airline', 'id', 'source_airport', 'source_airport_id',\n", 147 | " 'destination_airport', 'destination_airport_id', 'codeshare',\n", 148 | " 'stops', 'equitment'])" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": null, 154 | "id": "ada799b1", 155 | "metadata": {}, 156 | "outputs": [], 157 | "source": [ 158 | "print(routes)" 159 | ] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "execution_count": null, 164 | "id": "a8f63e45", 165 | "metadata": {}, 166 | "outputs": [], 167 | "source": [ 168 | "source_airports = airports[['name', 'iata', 'icao', 'lat', 'long']]\n", 169 | "destination_airports = source_airports.copy()\n", 170 | "source_airports.columns = [str(col) + '_source' for col in source_airports.columns]\n", 171 | "destination_airports.columns = [str(col) + '_destination' for col in destination_airports.columns]" 172 | ] 173 | }, 174 | { 175 | "cell_type": "code", 176 | "execution_count": null, 177 | "id": "40f467a5", 178 | "metadata": {}, 179 | "outputs": [], 180 | "source": [ 181 | "routes = routes[['source_airport', 'destination_airport']]\n", 182 | "routes = pd.merge(routes, source_airports, left_on='source_airport', right_on='iata_source')\n", 183 | "routes = pd.merge(routes, destination_airports, left_on='destination_airport', right_on='iata_destination')\n", 184 | "\n", 185 | "print(routes.columns)" 186 | ] 187 | }, 188 | { 189 | "cell_type": "code", 190 | "execution_count": null, 191 | "id": "c82759d2", 192 | "metadata": {}, 193 | "outputs": [], 194 | "source": [ 195 | "from shapely.geometry import LineString\n", 196 | "\n", 197 | "routes_geometry = [LineString([[routes.iloc[i]['long_source'], routes.iloc[i]['lat_source']], [routes.iloc[i]['long_destination'], routes.iloc[i]['lat_destination']]]) for i in range(routes.shape[0])]\n", 198 | "routes_geodata = gpd.GeoDataFrame(routes, geometry=routes_geometry, crs='EPSG:4326')" 199 | ] 200 | }, 201 | { 202 | "cell_type": "code", 203 | "execution_count": null, 204 | "id": "d8bd0d59", 205 | "metadata": {}, 206 | "outputs": [], 207 | "source": [ 208 | "print(routes.columns)" 209 | ] 210 | }, 211 | { 212 | "cell_type": "code", 213 | "execution_count": null, 214 | "id": "26cf0210", 215 | "metadata": {}, 216 | "outputs": [], 217 | "source": [ 218 | "fig, ax = plt.subplots(figsize=(20,20))\n", 219 | "ax.patch.set_facecolor('black')\n", 220 | "\n", 221 | "routes_geodata.plot(ax=ax, color='white', linewidth=0.1)\n", 222 | "\n", 223 | "plt.show()" 224 | ] 225 | }, 226 | { 227 | "cell_type": "code", 228 | "execution_count": null, 229 | "id": "5b282ef2", 230 | "metadata": {}, 231 | "outputs": [], 232 | "source": [ 233 | "fig, ax = plt.subplots(subplot_kw={'projection': ccrs.Robinson()}, figsize=(20,20))\n", 234 | "ax.patch.set_facecolor('black')\n", 235 | "routes_geodata.plot(ax=ax, transform=ccrs.Geodetic(), color='white', linewidth=0.1, alpha=0.1)\n", 236 | "plt.setp(ax.spines.values(), color='black')\n", 237 | "plt.setp([ax.get_xticklines(), ax.get_yticklines()], color='black')\n", 238 | "ax.set_ylim(-7000000, 8800000)\n", 239 | "plt.show()" 240 | ] 241 | }, 242 | { 243 | "cell_type": "markdown", 244 | "id": "126c2b3b", 245 | "metadata": {}, 246 | "source": [ 247 | "### Exercise\n", 248 | "\n", 249 | "- Use the routes data to add a new column to the airports DataFrame with a value showing the number of flights that landed in that airport\n", 250 | "- Create a plot combining the routes and airports into one\n", 251 | "- Scale the size of the airport points according to the number of flights that land there.\n", 252 | "- The expected output is shown below.\n", 253 | "\n", 254 | "![alt text](../resources/assets/airroutes_mad.png \"Title\")" 255 | ] 256 | }, 257 | { 258 | "cell_type": "code", 259 | "execution_count": null, 260 | "id": "25cf126a", 261 | "metadata": {}, 262 | "outputs": [], 263 | "source": [] 264 | } 265 | ], 266 | "metadata": { 267 | "kernelspec": { 268 | "display_name": "Python 3 (ipykernel)", 269 | "language": "python", 270 | "name": "python3" 271 | }, 272 | "language_info": { 273 | "codemirror_mode": { 274 | "name": "ipython", 275 | "version": 3 276 | }, 277 | "file_extension": ".py", 278 | "mimetype": "text/x-python", 279 | "name": "python", 280 | "nbconvert_exporter": "python", 281 | "pygments_lexer": "ipython3", 282 | "version": "3.9.13" 283 | } 284 | }, 285 | "nbformat": 4, 286 | "nbformat_minor": 5 287 | } 288 | -------------------------------------------------------------------------------- /notebooks/4_Polygons.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "693619ee", 6 | "metadata": {}, 7 | "source": [ 8 | "## Plotting Polygons\n", 9 | "\n", 10 | "Data Source - [Natural Earth](https://www.naturalearthdata.com/)\n", 11 | "\n", 12 | "Data Source - [OpenFlights](https://openflights.org/data.html) (You should already have this from the previous exercise) " 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": null, 18 | "id": "d277c30a", 19 | "metadata": {}, 20 | "outputs": [], 21 | "source": [ 22 | "import geopandas as gpd\n", 23 | "\n", 24 | "data = gpd.read_file(\"../resources/ne_10m_time_zones.shp\")\n", 25 | "countries = gpd.read_file(\"../resources/ne_10m_admin_0_countries.shp\")\n", 26 | "data = data.sort_values('name')\n", 27 | "print(data.columns)" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": null, 33 | "id": "a89eeb44", 34 | "metadata": {}, 35 | "outputs": [], 36 | "source": [ 37 | "import matplotlib.pyplot as plt\n", 38 | "\n", 39 | "fig, ax = plt.subplots(facecolor='#FCF6F5FF')\n", 40 | "ax.set_facecolor('#FCF6F5FF')\n", 41 | "data.plot(ax=ax, color='#FCF6F5FF', edgecolor='black', lw=1)\n", 42 | "plt.show()" 43 | ] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "id": "3fc870ef", 48 | "metadata": {}, 49 | "source": [ 50 | "### Exercise\n", 51 | "\n", 52 | "- Reproject the data map.\n", 53 | "- Find a colourmap that highlights the different timezones clearly.\n", 54 | "- Plot the worlds borders on top to show how timezones match with country outlines.\n", 55 | "\n", 56 | "" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": null, 62 | "id": "ce327013", 63 | "metadata": {}, 64 | "outputs": [], 65 | "source": [ 66 | "import cartopy.crs as ccrs\n" 67 | ] 68 | }, 69 | { 70 | "cell_type": "markdown", 71 | "id": "b38dbcc5", 72 | "metadata": {}, 73 | "source": [ 74 | "## Exercise\n", 75 | "\n", 76 | "- Read the roman_empire.geojson and mongol_empire.geojson from the resources folder\n", 77 | "- Generate a plot showing both empires\n", 78 | "- Isolate the overlap between the two using gpd.overlay\n", 79 | "\n", 80 | "" 81 | ] 82 | }, 83 | { 84 | "cell_type": "markdown", 85 | "id": "ce9dba88", 86 | "metadata": {}, 87 | "source": [ 88 | "### Combining Polygons, LineStrings and Points\n", 89 | "\n", 90 | "In this section we will generate a map of all flights that take place between this timezone (Texas) and my timezone (UK)" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": null, 96 | "id": "ee432f4a", 97 | "metadata": {}, 98 | "outputs": [], 99 | "source": [ 100 | "import pandas as pd\n", 101 | "uk = data.loc[data['name'] == '0']\n", 102 | "texas = data.loc[data['name'] == '-6']\n", 103 | "my_flight = pd.concat([uk, texas])\n", 104 | "print(my_flight)" 105 | ] 106 | }, 107 | { 108 | "cell_type": "code", 109 | "execution_count": null, 110 | "id": "cc85aeb8", 111 | "metadata": {}, 112 | "outputs": [], 113 | "source": [ 114 | "airports = pd.read_csv(\"../resources/airports\", delimiter=',', names=['id', 'name', 'city', 'country', 'iata', \n", 115 | " 'icao', 'lat', 'long', 'altitude', 'timezone',\n", 116 | " 'dst', 'tz', 'type', 'source'])" 117 | ] 118 | }, 119 | { 120 | "cell_type": "code", 121 | "execution_count": null, 122 | "id": "3e4b8f9d", 123 | "metadata": {}, 124 | "outputs": [], 125 | "source": [ 126 | "routes = pd.read_csv(\"../resources/routes\", delimiter=',', names=['airline', 'id', 'source_airport', 'source_airport_id',\n", 127 | " 'destination_airport', 'destination_airport_id', 'codeshare',\n", 128 | " 'stops', 'equitment'])" 129 | ] 130 | }, 131 | { 132 | "cell_type": "code", 133 | "execution_count": null, 134 | "id": "ed7232a6", 135 | "metadata": {}, 136 | "outputs": [], 137 | "source": [ 138 | "from shapely.geometry import Point\n", 139 | "\n", 140 | "geometry = [Point(xy) for xy in zip(airports['long'], airports['lat'])]\n", 141 | "airports = gpd.GeoDataFrame(airports, crs=\"EPSG:4326\", geometry=geometry)" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": null, 147 | "id": "22a5afed", 148 | "metadata": {}, 149 | "outputs": [], 150 | "source": [ 151 | "new_airports = gpd.sjoin(airports, my_flight, op='within')" 152 | ] 153 | }, 154 | { 155 | "cell_type": "code", 156 | "execution_count": null, 157 | "id": "744094f1", 158 | "metadata": {}, 159 | "outputs": [], 160 | "source": [ 161 | "new_airports = new_airports.rename(columns = {'name_left': 'airport_name', 'name_right': 'timezone_name'})" 162 | ] 163 | }, 164 | { 165 | "cell_type": "code", 166 | "execution_count": null, 167 | "id": "def4c284", 168 | "metadata": {}, 169 | "outputs": [], 170 | "source": [ 171 | "print(new_airports.airport_name.unique())\n", 172 | "print(new_airports.timezone_name.unique())" 173 | ] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "execution_count": null, 178 | "id": "e0c073c7", 179 | "metadata": {}, 180 | "outputs": [], 181 | "source": [ 182 | "from shapely.geometry import LineString \n", 183 | "\n", 184 | "source_airports = new_airports[['airport_name', 'iata', 'icao', \n", 185 | " 'lat', 'long', 'timezone_name']]\n", 186 | "\n", 187 | "destination_airports = source_airports.copy()\n", 188 | "source_airports.columns = [str(col) + '_source' for col in source_airports.columns]\n", 189 | "destination_airports.columns = [str(col) + '_destination' for col in destination_airports.columns]\n", 190 | "\n", 191 | "routes = routes[['source_airport', 'destination_airport']]\n", 192 | "routes = pd.merge(routes, source_airports, left_on='source_airport', right_on='iata_source')\n", 193 | "routes = pd.merge(routes, destination_airports, left_on='destination_airport', right_on='iata_destination')\n" 194 | ] 195 | }, 196 | { 197 | "cell_type": "code", 198 | "execution_count": null, 199 | "id": "683edee0", 200 | "metadata": {}, 201 | "outputs": [], 202 | "source": [ 203 | "routes = routes[routes['timezone_name_source'] != routes['timezone_name_destination']]\n", 204 | "\n", 205 | "routes_geometry = [LineString([[routes.iloc[i]['long_source'], routes.iloc[i]['lat_source']], [routes.iloc[i]['long_destination'], routes.iloc[i]['lat_destination']]]) for i in range(routes.shape[0])]\n", 206 | "routes_geodata = gpd.GeoDataFrame(routes, geometry=routes_geometry, crs='EPSG:4326')" 207 | ] 208 | }, 209 | { 210 | "cell_type": "code", 211 | "execution_count": null, 212 | "id": "16eed686", 213 | "metadata": {}, 214 | "outputs": [], 215 | "source": [ 216 | "fig, ax = plt.subplots(subplot_kw={'projection': ccrs.Mercator()}, figsize=(10,10))\n", 217 | "ax.patch.set_facecolor('#FCF6F5FF')\n", 218 | "routes_geodata.plot(ax=ax, color='black', linewidth=0.1)\n", 219 | "ax.axis('off')\n", 220 | "plt.show()" 221 | ] 222 | }, 223 | { 224 | "cell_type": "code", 225 | "execution_count": null, 226 | "id": "20d2bc40", 227 | "metadata": {}, 228 | "outputs": [], 229 | "source": [ 230 | "fig, ax = plt.subplots(facecolor='#FCF6F5FF', figsize=(10,10))\n", 231 | "\n", 232 | "countries.plot(ax=ax, color='none', edgecolor='black', lw=1)\n", 233 | "data.plot(ax=ax, column='name', cmap='jet', edgecolor='white', lw=1, alpha=0.6)\n", 234 | "routes_geodata.plot(ax=ax, color='black', linewidth=0.1)\n", 235 | "\n", 236 | "ax.axis('off')\n", 237 | "plt.show()" 238 | ] 239 | }, 240 | { 241 | "cell_type": "markdown", 242 | "id": "eca557b4", 243 | "metadata": {}, 244 | "source": [ 245 | "## Exercise\n", 246 | "\n", 247 | "- Show the airports as well as the flight routes.\n", 248 | "- Clip the image to only show the area where flights occur.\n", 249 | "- Account for the curvature of the earth in your line projection.\n", 250 | "\n", 251 | "![alt text](../resources/assets/my_flight.png \"Title\")" 252 | ] 253 | } 254 | ], 255 | "metadata": { 256 | "kernelspec": { 257 | "display_name": "Python 3 (ipykernel)", 258 | "language": "python", 259 | "name": "python3" 260 | }, 261 | "language_info": { 262 | "codemirror_mode": { 263 | "name": "ipython", 264 | "version": 3 265 | }, 266 | "file_extension": ".py", 267 | "mimetype": "text/x-python", 268 | "name": "python", 269 | "nbconvert_exporter": "python", 270 | "pygments_lexer": "ipython3", 271 | "version": "3.9.13" 272 | } 273 | }, 274 | "nbformat": 4, 275 | "nbformat_minor": 5 276 | } 277 | -------------------------------------------------------------------------------- /notebooks/5_Rasters.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "20a72cf9", 6 | "metadata": {}, 7 | "source": [ 8 | "# Rasters\n", 9 | "\n", 10 | "Data Source - [Forests](https://globalmaps.github.io/ptc.html)\n", 11 | "\n", 12 | "Data Source - [Surface_Temperature](https://neo.gsfc.nasa.gov/view.php?datasetId=MOD_LSTD_M&year=2021)" 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": null, 18 | "id": "b3321d9c", 19 | "metadata": {}, 20 | "outputs": [], 21 | "source": [ 22 | "import rasterio\n", 23 | "import numpy as np\n", 24 | "\n", 25 | "forests_file = rasterio.open('../resources/gm_ve_v1.tif')\n", 26 | "forests = forests_file.read()\n", 27 | "\n", 28 | "print(np.amin(forests))\n", 29 | "print(np.amax(forests))\n", 30 | "print(len(np.unique(forests)))" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": null, 36 | "id": "b1775c51", 37 | "metadata": {}, 38 | "outputs": [], 39 | "source": [ 40 | "import matplotlib.pyplot as plt\n", 41 | "\n", 42 | "fig = plt.figure(facecolor='#FCF6F5FF')\n", 43 | "\n", 44 | "ax = plt.axes()\n", 45 | "fig.set_size_inches(7, 3.5)\n", 46 | "ax.patch.set_facecolor('#FCF6F5FF')\n", 47 | "ax.imshow(forests[0],cmap='Greens',interpolation='nearest')\n", 48 | "ax.axis('off')\n", 49 | "plt.show()" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": null, 55 | "id": "a7215558", 56 | "metadata": {}, 57 | "outputs": [], 58 | "source": [ 59 | "from matplotlib.colors import ListedColormap, LinearSegmentedColormap, BoundaryNorm\n", 60 | "from matplotlib import cm\n", 61 | "\n", 62 | "purples = cm.get_cmap('Greens', 254)\n", 63 | "newcolors = purples(np.linspace(0, 1, 254))\n", 64 | "background_colour = np.array([0.9882352941176471, 0.9647058823529412, 0.9607843137254902, 1.0])\n", 65 | "newcolors[:1, :] = background_colour\n", 66 | "newcmp_forests = ListedColormap(newcolors)\n", 67 | "\n", 68 | "bounds = np.arange(254)\n", 69 | "norm_forests = BoundaryNorm(bounds, newcmp_forests.N)\n", 70 | "\n", 71 | "gradient = np.linspace(0, 1, 254)\n", 72 | "gradient = np.vstack((gradient, gradient))\n", 73 | "fig, ax = plt.subplots()\n", 74 | "ax.imshow(gradient, aspect='auto', cmap=newcmp_forests)\n", 75 | "ax.get_yaxis().set_visible(False)\n", 76 | "ax.axvline(100, ls=\"--\", c='black', )\n", 77 | "plt.text(105, 0.7, \"Data Ends\", rotation=90)\n", 78 | "\n", 79 | "plt.show()" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": null, 85 | "id": "8bca048b", 86 | "metadata": {}, 87 | "outputs": [], 88 | "source": [ 89 | "forests[0][forests[0] == 254] = 0.0\n", 90 | "\n", 91 | "ourcmap = cm.get_cmap('Greens', 101)\n", 92 | "newcolors = ourcmap(np.linspace(0, 1, 101))\n", 93 | "background_colour = np.array([0.9882352941176471, 0.9647058823529412, 0.9607843137254902, 1.0])\n", 94 | "newcolors[:1, :] = background_colour\n", 95 | "newcmp_forests = ListedColormap(newcolors)" 96 | ] 97 | }, 98 | { 99 | "cell_type": "markdown", 100 | "id": "c76960f4", 101 | "metadata": {}, 102 | "source": [ 103 | "### Exercise \n", 104 | "\n", 105 | "- Plot the data using the new colourmap and norm" 106 | ] 107 | }, 108 | { 109 | "cell_type": "markdown", 110 | "id": "a42d0759", 111 | "metadata": {}, 112 | "source": [ 113 | "## Projections" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": null, 119 | "id": "cb4d1e9f", 120 | "metadata": {}, 121 | "outputs": [], 122 | "source": [ 123 | "import pyproj \n", 124 | "from pyproj import CRS\n", 125 | "\n", 126 | "for x, y in pyproj.pj_list.items():\n", 127 | " print(x, y)" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": null, 133 | "id": "ea345303", 134 | "metadata": {}, 135 | "outputs": [], 136 | "source": [ 137 | "import rioxarray as rxr\n", 138 | "from rasterio.crs import CRS\n", 139 | "\n", 140 | "org_surface_timp_file = rasterio.open('../resources/MOD_LSTD_M_2021-01-01_rgb_3600x1800.TIFF')\n", 141 | "org_surface_temp = org_surface_timp_file.read()\n", 142 | "\n", 143 | "surface_temp_file = rxr.open_rasterio('../resources/MOD_LSTD_M_2021-01-01_rgb_3600x1800.TIFF', masked=True).squeeze()\n", 144 | "\n", 145 | "print(\"Original projection: \", surface_temp_file.rio.crs)\n", 146 | "crs_rob = CRS.from_string('+proj=robin')\n", 147 | "surface_temp = surface_temp_file.rio.reproject(crs_rob)\n", 148 | "print(\"New projection: \", surface_temp.rio.crs)\n", 149 | "surface_temp = surface_temp.to_numpy()" 150 | ] 151 | }, 152 | { 153 | "cell_type": "markdown", 154 | "id": "76d32927", 155 | "metadata": {}, 156 | "source": [ 157 | "### Exercise\n", 158 | "\n", 159 | "- Plot the new data and the old data to show the difference in projections\n", 160 | "- Fix the colourmap issues\n", 161 | "- Generate a new projection" 162 | ] 163 | }, 164 | { 165 | "cell_type": "markdown", 166 | "id": "7528c39b", 167 | "metadata": {}, 168 | "source": [ 169 | "### Exercise\n", 170 | "\n", 171 | "- Go to https://neo.gsfc.nasa.gov/, pick a dataset and generate a new map\n", 172 | "\n", 173 | "![alt text](../resources/assets/movie.gif \"Title\")" 174 | ] 175 | } 176 | ], 177 | "metadata": { 178 | "kernelspec": { 179 | "display_name": "Python 3 (ipykernel)", 180 | "language": "python", 181 | "name": "python3" 182 | }, 183 | "language_info": { 184 | "codemirror_mode": { 185 | "name": "ipython", 186 | "version": 3 187 | }, 188 | "file_extension": ".py", 189 | "mimetype": "text/x-python", 190 | "name": "python", 191 | "nbconvert_exporter": "python", 192 | "pygments_lexer": "ipython3", 193 | "version": "3.9.13" 194 | } 195 | }, 196 | "nbformat": 4, 197 | "nbformat_minor": 5 198 | } 199 | -------------------------------------------------------------------------------- /notebooks/6_Rasters_and_Shapes.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "23cd5da0", 6 | "metadata": {}, 7 | "source": [ 8 | "# Rasters and Shapes\n", 9 | "\n", 10 | "Data Scource - [Topography](https://www.ngdc.noaa.gov/mgg/global/relief/ETOPO1/data/bedrock/grid_registered/georeferenced_tiff/)\n", 11 | "\n", 12 | "Data Scource - [River Basins](https://www.fao.org/fishery/static/geonetwork/d47ba28e-31be-470d-81cf-ad3d5594fafd/data/)\n" 13 | ] 14 | }, 15 | { 16 | "cell_type": "markdown", 17 | "id": "77ffa6c9", 18 | "metadata": {}, 19 | "source": [ 20 | "### Exercise\n", 21 | "\n", 22 | "- Download the data and place in the resources folder\n", 23 | "- Use rasterio to open and plot the topography dataset\n", 24 | "- Use Geopandas to open and plot the river basins dataset" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": null, 30 | "id": "98af06b8", 31 | "metadata": {}, 32 | "outputs": [], 33 | "source": [ 34 | "import rasterio\n", 35 | "image = " 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": null, 41 | "id": "056ab38c", 42 | "metadata": {}, 43 | "outputs": [], 44 | "source": [ 45 | "import geopandas as gpd\n", 46 | "basins = " 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "execution_count": null, 52 | "id": "673d9b1d", 53 | "metadata": {}, 54 | "outputs": [], 55 | "source": [ 56 | "import pandas as pd\n", 57 | "\n", 58 | "colours_i_like = ['#A1CAF1', '#875692', '#008856', '#0067A5', '#BE0032',\n", 59 | " '#222222', '#848482', '#F3C300', 'blue', '#F38400',\n", 60 | " '#E68FAC', '#604E97', '#F3C300', '#B3446C', '#C2B280', \n", 61 | " '#F6A600', '#882D17', '#E25822', '#8DB600',\n", 62 | " '#F99379', '#DCD300', '#F3C300', '#E68FAC', '#C2B280',\n", 63 | " '#222222']\n", 64 | "\n", 65 | "colors_df = pd.DataFrame({'basin': basins.MAJ_NAME.unique().tolist(), 'colors': colours_i_like})" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": null, 71 | "id": "01349362", 72 | "metadata": {}, 73 | "outputs": [], 74 | "source": [ 75 | "basins = pd.merge(basins, colors_df, left_on='MAJ_NAME', right_on='basin', how='left')\n", 76 | "\n", 77 | "fig, ax = plt.subplots(facecolor='#FCF6F5FF')\n", 78 | "basins.plot(ax=ax, column='MAJ_NAME', edgecolor='face', color=basins['colors'])\n", 79 | "ax.axis('off')\n", 80 | "plt.show()" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": null, 86 | "id": "55af23a7", 87 | "metadata": {}, 88 | "outputs": [], 89 | "source": [ 90 | "from shapely.geometry import mapping\n", 91 | "from rasterio import mask as msk \n", 92 | "import numpy as np\n", 93 | "\n", 94 | "sa_array, clipped_transform = msk.mask(img, [mapping(geom) for geom in basins.geometry.tolist()], crop=True)\n", 95 | "sa_array, clipped_transform = msk.mask(img, [mapping(geom) for geom in basins.geometry.tolist()], \n", 96 | " crop=True, nodata=(np.amin(sa_array[0]) - 1))\n", 97 | "value_range = np.amax(sa_array) + abs(np.amin(sa_array))" 98 | ] 99 | }, 100 | { 101 | "cell_type": "markdown", 102 | "id": "cb760fe6", 103 | "metadata": {}, 104 | "source": [ 105 | "### Exercise\n", 106 | "\n", 107 | "- Convert the basin Polygons to LineStrings corresponding to their boundaries.\n", 108 | "- Create a new GeoDataFrame containing the MAJ_NAME and the basin boundary.\n", 109 | "- Plot the basin boundaries" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": null, 115 | "id": "2e55777f", 116 | "metadata": {}, 117 | "outputs": [], 118 | "source": [ 119 | "#e.g. gdf['boundary'] = gdf.boundary" 120 | ] 121 | }, 122 | { 123 | "cell_type": "code", 124 | "execution_count": null, 125 | "id": "d16031b9", 126 | "metadata": {}, 127 | "outputs": [], 128 | "source": [ 129 | "new_basins = " 130 | ] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": null, 135 | "id": "246e2876", 136 | "metadata": {}, 137 | "outputs": [], 138 | "source": [ 139 | "new_basins.plot()" 140 | ] 141 | }, 142 | { 143 | "cell_type": "code", 144 | "execution_count": null, 145 | "id": "213b3791", 146 | "metadata": {}, 147 | "outputs": [], 148 | "source": [ 149 | "from rasterio.plot import show\n", 150 | "\n", 151 | "fig, ax = plt.subplots(facecolor='#FCF6F5FF')\n", 152 | "fig.set_size_inches(3.5, 7)\n", 153 | "show(sa_array, ax=ax, transform=clipped_transform, cmap='jet')\n", 154 | "new_basins.plot(ax=ax, edgecolor='black', lw=1)\n", 155 | "ax.axis('off')\n", 156 | "plt.show()" 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": null, 162 | "id": "4fcb2fc1", 163 | "metadata": {}, 164 | "outputs": [], 165 | "source": [ 166 | "from matplotlib.colors import LinearSegmentedColormap, ListedColormap, BoundaryNorm\n", 167 | "from matplotlib import cm\n", 168 | "\n", 169 | "our_cmap = cm.get_cmap('jet', int((value_range - 5300) / 10))\n", 170 | "newcolors = our_cmap(np.linspace(0, 1, int((value_range - 5300) / 10)))\n", 171 | "background_colour = np.array([0.9882352941176471, 0.9647058823529412, 0.9607843137254902, 1.0])\n", 172 | "newcolors[:1, :] = background_colour\n", 173 | "our_cmap = ListedColormap(newcolors)\n", 174 | "\n", 175 | "bounds = np.arange(np.amin(sa_array), np.amax(sa_array)-5300, 10)\n", 176 | "norm = BoundaryNorm(bounds, our_cmap.N)\n", 177 | "\n", 178 | "gradient = np.linspace(0, 1, 256)\n", 179 | "gradient = np.vstack((gradient, gradient))\n", 180 | "plt.imshow(gradient, aspect='auto', cmap=our_cmap)\n", 181 | "plt.axis('off')\n", 182 | "plt.show()" 183 | ] 184 | }, 185 | { 186 | "cell_type": "code", 187 | "execution_count": null, 188 | "id": "afc9630b", 189 | "metadata": {}, 190 | "outputs": [], 191 | "source": [ 192 | "# Plot the data using the new cmap and norm" 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "id": "cda1a384", 198 | "metadata": {}, 199 | "source": [ 200 | "### Exercise\n", 201 | "\n", 202 | "Use another dataset to generate a map for a different continent or country!\n", 203 | "\n", 204 | "https://data.apps.fao.org/map/catalog/srv/eng/catalog.search;jsessionid=AAC7809A66394973A2D96B618A2C7A1C?node=srv#/search?resultType=details&sortBy=relevance&fast=index&_content_type=json&from=1&to=50&any=Hydrological%20basin" 205 | ] 206 | }, 207 | { 208 | "cell_type": "code", 209 | "execution_count": null, 210 | "id": "38440c25", 211 | "metadata": {}, 212 | "outputs": [], 213 | "source": [] 214 | } 215 | ], 216 | "metadata": { 217 | "kernelspec": { 218 | "display_name": "Python 3 (ipykernel)", 219 | "language": "python", 220 | "name": "python3" 221 | }, 222 | "language_info": { 223 | "codemirror_mode": { 224 | "name": "ipython", 225 | "version": 3 226 | }, 227 | "file_extension": ".py", 228 | "mimetype": "text/x-python", 229 | "name": "python", 230 | "nbconvert_exporter": "python", 231 | "pygments_lexer": "ipython3", 232 | "version": "3.8.13" 233 | } 234 | }, 235 | "nbformat": 4, 236 | "nbformat_minor": 5 237 | } 238 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | geopandas==0.10.2 2 | pandas==1.4.2 3 | numpy==1.21.5 4 | shapely==1.8.0 5 | matplotlib==3.5.1 6 | cartopy==0.20.2 7 | rasterio==1.2.10 8 | rioxarray==0.11.1 9 | -------------------------------------------------------------------------------- /resources/assets/GC.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/GC.jpg -------------------------------------------------------------------------------- /resources/assets/Ports.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/Ports.png -------------------------------------------------------------------------------- /resources/assets/africa_rivers_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/africa_rivers_1.png -------------------------------------------------------------------------------- /resources/assets/airroutes_mad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/airroutes_mad.png -------------------------------------------------------------------------------- /resources/assets/black_sea.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/black_sea.jpg -------------------------------------------------------------------------------- /resources/assets/co2_emissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/co2_emissions.png -------------------------------------------------------------------------------- /resources/assets/eez_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/eez_dark.png -------------------------------------------------------------------------------- /resources/assets/movie.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/movie.gif -------------------------------------------------------------------------------- /resources/assets/my_flight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/my_flight.png -------------------------------------------------------------------------------- /resources/assets/namerica_rivers.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/namerica_rivers.jpg -------------------------------------------------------------------------------- /resources/assets/network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/network.png -------------------------------------------------------------------------------- /resources/assets/opening.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/opening.png -------------------------------------------------------------------------------- /resources/assets/operations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/operations.png -------------------------------------------------------------------------------- /resources/assets/operations1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/operations1.png -------------------------------------------------------------------------------- /resources/assets/operations2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/operations2.png -------------------------------------------------------------------------------- /resources/assets/overlay_operations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/overlay_operations.png -------------------------------------------------------------------------------- /resources/assets/pakistan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/pakistan.png -------------------------------------------------------------------------------- /resources/assets/past.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/past.png -------------------------------------------------------------------------------- /resources/assets/pierce_q.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/pierce_q.png -------------------------------------------------------------------------------- /resources/assets/polygon_operations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/polygon_operations.png -------------------------------------------------------------------------------- /resources/assets/rainforest_vs_desert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/rainforest_vs_desert.png -------------------------------------------------------------------------------- /resources/assets/raw3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/raw3.png -------------------------------------------------------------------------------- /resources/assets/roman_vs_mongols.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/roman_vs_mongols.png -------------------------------------------------------------------------------- /resources/assets/rome_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/rome_example.png -------------------------------------------------------------------------------- /resources/assets/shapes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/shapes.png -------------------------------------------------------------------------------- /resources/assets/shapping_lanes_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/shapping_lanes_dark.png -------------------------------------------------------------------------------- /resources/assets/sl_air.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/sl_air.png -------------------------------------------------------------------------------- /resources/assets/sts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/sts.png -------------------------------------------------------------------------------- /resources/assets/timezones.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/timezones.png -------------------------------------------------------------------------------- /resources/assets/undersea_cables_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/resources/assets/undersea_cables_dark.png -------------------------------------------------------------------------------- /resources/mongol_empire.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | { "type": "Feature", "properties": { "ID": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 69.492207812895728, 29.078670271369617 ], [ 69.37135820354132, 30.641155932484427 ], [ 69.415303516034569, 30.999677714558175 ], [ 69.635030078504428, 31.637885537649311 ], [ 69.788838672233041, 31.95536121879789 ], [ 70.404073047147548, 32.494410354327329 ], [ 70.404073047147548, 32.661049899174948 ], [ 70.733662890850965, 33.085495731179421 ], [ 71.063252734555292, 33.26940227104798 ], [ 71.810323046951339, 33.690918837821123 ], [ 72.40358476561876, 34.019366928754579 ], [ 72.667256640581869, 34.563964216128873 ], [ 72.227803515643046, 35.856495430610181 ], [ 71.832295703198412, 36.140919528865226 ], [ 71.195088672036832, 36.087668171826451 ], [ 70.843526172086328, 35.998835701595816 ], [ 70.228291797171849, 35.874301974556566 ], [ 68.909932422355439, 35.892104517259035 ], [ 67.503682422550739, 36.176400368130693 ], [ 66.888448047636246, 36.51266647678839 ], [ 66.16335039148727, 36.689064675226945 ], [ 65.372334766597959, 36.952904780476558 ], [ 65.042744922893661, 37.285794423569349 ], [ 63.153096485656889, 38.327378187614237 ], [ 62.977315235681196, 38.636981536112017 ], [ 62.581807423236548, 39.286212089102158 ], [ 62.208272267038076, 39.794551760257001 ], [ 61.922627735827888, 40.097766236498231 ], [ 61.307393360913387, 40.366161047990261 ], [ 61.307393360913387, 40.533367344463244 ], [ 61.307393360913387, 41.330157538392285 ], [ 61.505147267136181, 42.328849835156269 ], [ 61.87868242333375, 42.701356717316578 ], [ 62.449971485754098, 43.151844635704244 ], [ 63.26295976689137, 43.567203458248677 ], [ 64.559346485460694, 43.884774730495757 ], [ 65.811787891536781, 44.232158098880333 ], [ 66.778584766401764, 44.655706174831593 ], [ 67.569600391291971, 45.585928396812697 ], [ 68.09694414121816, 45.892632345502228 ], [ 70.27223710966598, 46.742444346078912 ], [ 71.546651171988231, 47.281786787557564 ], [ 73.304463671743434, 47.682721285374576 ], [ 75.018330859005388, 47.653127349701755 ], [ 77.171651171205241, 47.44549985484381 ], [ 77.984639452342506, 47.549416417197222 ], [ 78.511983202268709, 47.623516633434377 ], [ 79.237080858417684, 47.786167936580448 ], [ 79.87428788957925, 47.992444898960883 ], [ 82.357198045483415, 48.823814866205318 ], [ 83.499776170324125, 48.881646599848011 ], [ 86.026631638722449, 48.765916320924035 ], [ 86.553975388649548, 48.924976565909773 ], [ 87.037373826081591, 48.968268968473005 ], [ 87.806416794724726, 49.112305786715687 ], [ 88.553487107120759, 49.384827198061728 ], [ 90.025655075665782, 49.981912213880072 ], [ 90.487080856856167, 50.403918442743581 ], [ 91.695576950436291, 50.69710606040703 ], [ 92.46461991907492, 50.501850254698354 ], [ 93.035908981491673, 50.137080946256731 ], [ 94.442158981302654, 49.769509213953228 ], [ 95.365010543674416, 49.054741114662534 ], [ 95.848408981104654, 48.620877539339375 ], [ 96.331807418534922, 47.859932598789605 ], [ 96.639424605992161, 46.967832325338826 ], [ 96.156026168561922, 46.121554855535045 ], [ 95.584737106136188, 45.601303607839945 ], [ 95.452901168660901, 44.983009214480816 ], [ 95.408955856163161, 44.137619310216863 ], [ 96.068135543575394, 42.927012487810032 ], [ 96.595479293494421, 41.790508127085722 ], [ 96.156026168561922, 41.032487502575307 ], [ 95.145283981203676, 40.366161047990261 ], [ 93.123799606478173, 39.557789931733332 ], [ 91.278096481734664, 39.047714180651461 ], [ 90.3991902318607, 38.60264685923957 ], [ 89.65211991946552, 38.292895765242974 ], [ 88.597432419612218, 37.947170711627585 ], [ 87.366963669783232, 37.773694955342783 ], [ 86.488057419905616, 37.773694955342783 ], [ 85.389424607559079, 37.634620569567737 ], [ 84.466573045187332, 37.355689789675715 ], [ 84.202901170224237, 36.794709859102802 ], [ 84.774190232644571, 35.909903057898369 ], [ 85.125752732595075, 34.545867911686251 ], [ 84.993916795113535, 33.085495731179421 ], [ 85.037862107607666, 32.383145457959785 ], [ 84.949971482620285, 31.787421700221099 ], [ 85.037862107607666, 31.187834558791959 ], [ 85.213643357583379, 30.281300286193385 ], [ 85.081807420101825, 29.82485367050813 ], [ 84.598408982668872, 29.672238458876276 ], [ 84.115010545235918, 29.366312889234035 ], [ 82.664815232937968, 28.520282232811724 ], [ 82.40114335797486, 28.172198847423662 ], [ 81.522237108097272, 27.784107290955092 ], [ 80.335713670762431, 27.472632625729219 ], [ 79.281026170909129, 27.160275041005171 ], [ 77.830830858611193, 27.042914704398687 ], [ 75.809346483892, 27.238446840753074 ], [ 74.095479296630927, 27.316563775774743 ], [ 72.996846484283495, 27.66740818554603 ], [ 72.161885546900038, 28.094692353569297 ], [ 71.54665117198553, 28.365719371675699 ], [ 70.491963672132243, 28.520282232811724 ], [ 69.788838672230341, 28.713167557481132 ], [ 69.492207812895728, 29.078670271369617 ] ] ] } }, 5 | { "type": "Feature", "properties": { "ID": 2 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 39.859334281866936, 43.533362575755113 ], [ 39.606648735026482, 43.660664655288471 ], [ 39.496785453791105, 43.755964457018742 ], [ 39.331990531939837, 43.890713110719751 ], [ 39.222127250704467, 43.961927493112917 ], [ 39.057332328852297, 44.119876408820446 ], [ 38.8815510788775, 44.175059043186671 ], [ 38.705769828901801, 44.300997047476237 ], [ 38.453084282061333, 44.348154303548974 ], [ 38.189412407098239, 44.426665487406531 ], [ 38.101521782110844, 44.536404224553849 ], [ 37.969685844629289, 44.559892813032413 ], [ 37.826863579024199, 44.614662658098638 ], [ 37.585164360307274, 44.692815771135834 ], [ 37.32149248534418, 44.786460478875647 ], [ 37.255574516603851, 44.92664315640139 ], [ 37.123738579121408, 45.019908681748021 ], [ 37.068806938504615, 45.082001434621851 ], [ 37.189656547862626, 45.144026776532442 ], [ 37.068806938504615, 45.175014168544678 ], [ 36.947957329146597, 45.151775204463277 ], [ 36.882039360405379, 45.120775173008248 ], [ 36.728230766676752, 45.120775173008248 ], [ 36.596394829195205, 45.159522579107886 ], [ 36.574422172948132, 45.198243653093712 ], [ 36.66231279793643, 45.229201553309132 ], [ 36.783162407294441, 45.244674183804349 ], [ 36.914998344775988, 45.283337327991525 ], [ 36.904012016652459, 45.329698343819395 ], [ 36.761189751047361, 45.321974140944512 ], [ 36.761189751047361, 45.383738273658807 ], [ 36.783162407294441, 45.468553896519815 ], [ 36.890279106498028, 45.451215613626204 ], [ 37.005635551794278, 45.401097291116074 ], [ 37.148457817399361, 45.354794729301616 ], [ 37.274800590819147, 45.343213164514708 ], [ 37.456075004856608, 45.366373924343037 ], [ 37.538472465783144, 45.40495412647612 ], [ 37.56593828609109, 45.455069026140563 ], [ 37.571431450152858, 45.562857682153592 ], [ 37.604390434523467, 45.655083675081315 ], [ 37.675801567326467, 45.697303244340098 ], [ 37.802144340746239, 45.731822835977781 ], [ 37.851582817302159, 45.823770839417513 ], [ 37.890034965733648, 45.942312620822555 ], [ 37.944966606351329, 46.018656964221172 ], [ 38.027364067276963, 46.064413043153664 ], [ 38.120747856327036, 46.075846142071008 ], [ 38.181172661005583, 46.098705235172524 ], [ 38.230611137561503, 46.178637465154196 ], [ 38.258076957870351, 46.250857122577216 ], [ 38.258076957870351, 46.292625095280592 ], [ 38.164693168820278, 46.353321690339016 ], [ 38.076802543832883, 46.398799946987403 ], [ 38.005391411029883, 46.406375974190276 ], [ 38.032857231338731, 46.376065553050609 ], [ 37.999898246968115, 46.368485317583982 ], [ 37.917500786042488, 46.410163593278853 ], [ 37.846089653240391, 46.459378708485183 ], [ 37.780171684499173, 46.580334267509528 ], [ 37.725240043881485, 46.689717684595003 ], [ 37.994405082907249, 46.667104772247136 ], [ 38.236104301623278, 46.757499644073633 ], [ 38.367940239104826, 46.757499644073633 ], [ 38.345967582857746, 46.817678784637771 ], [ 38.499776176586373, 46.877790649606325 ], [ 38.76344805155037, 46.952835888427565 ], [ 39.005147270266392, 47.027776041829163 ], [ 39.202901176489178, 47.057722683533925 ], [ 39.246846488982428, 47.192274573916386 ], [ 39.180928520242091, 47.296690789360476 ], [ 38.983174614019326, 47.296690789360476 ], [ 38.917256645278101, 47.207203777385352 ], [ 38.631612114067927, 47.147461757600098 ], [ 38.367940239104826, 47.132515749637001 ], [ 38.236104301623278, 47.11756554013752 ], [ 38.082295707894652, 47.087652515878716 ], [ 37.840596489178623, 47.087652515878716 ], [ 37.532979301721383, 47.087652515878716 ], [ 37.445088676733079, 46.997812589509941 ], [ 37.291280083004459, 46.937835248096711 ], [ 37.005635551794278, 46.892808105098908 ], [ 36.873799614312723, 46.817678784637771 ], [ 36.610127739349622, 46.802640306933505 ], [ 36.302510551892375, 46.697253219083017 ], [ 36.148701958163748, 46.636939501124409 ], [ 35.907002739447726, 46.652024239786364 ], [ 35.797139458213252, 46.636939501124409 ], [ 35.643330864484625, 46.516110153573585 ], [ 35.511494927002182, 46.440455077904645 ], [ 35.357686333274444, 46.410163593278234 ], [ 35.159932427051679, 46.334361238062122 ], [ 34.984151177075979, 46.273643599125521 ], [ 34.852315239594425, 46.197651846335596 ], [ 34.830342583347353, 46.045352615403907 ], [ 34.940205864581834, 45.862037759955726 ], [ 34.984151177075979, 45.662762329676198 ], [ 35.072041802063382, 45.524385429026765 ], [ 35.072041802063382, 45.416523052764603 ], [ 35.115987114557534, 45.339352116306287 ], [ 35.401631645767701, 45.32390529040385 ], [ 35.643330864484625, 45.370233129414842 ], [ 35.885030083200647, 45.493588670316598 ], [ 36.016866020682201, 45.416523052764603 ], [ 36.21461992690498, 45.50898915594118 ], [ 36.456319145621002, 45.50898915594118 ], [ 36.610127739349622, 45.493588670316598 ], [ 36.588155083102549, 45.370233129414842 ], [ 36.434346489373922, 45.32390529040385 ], [ 36.41237383312685, 45.153712146869317 ], [ 36.41237383312685, 45.076183102694948 ], [ 36.126729301916676, 45.029615117991874 ], [ 35.863057426953581, 45.029615117991874 ], [ 35.665303520730802, 45.107207359877947 ], [ 35.467549614508926, 45.122713168703164 ], [ 35.401631645767701, 45.014084030025785 ], [ 35.203877739545824, 44.905248444621208 ], [ 34.940205864581834, 44.796206413595691 ], [ 34.74245195835995, 44.796206413595691 ], [ 34.522725395890099, 44.702577504735807 ], [ 34.346944145914399, 44.593152087845581 ], [ 34.14919023969253, 44.452158948104731 ], [ 33.841573052235276, 44.373681989015047 ], [ 33.665791802259584, 44.389385805422258 ], [ 33.555928521025109, 44.53053059641811 ], [ 33.402119927296482, 44.593152087845581 ], [ 33.511983208530957, 44.71819285544894 ], [ 33.533955864778029, 44.889683651082201 ], [ 33.533955864778029, 45.014084030025785 ], [ 33.511983208530957, 45.122713168703164 ], [ 33.402119927296482, 45.184694272463432 ], [ 33.248311333567855, 45.184694272463432 ], [ 33.138448052333381, 45.231135862522237 ], [ 33.028584771098011, 45.27753953498749 ], [ 32.764912896134909, 45.339352116306287 ], [ 32.677022271147507, 45.370233129414842 ], [ 32.52321367741888, 45.370233129414842 ], [ 32.479268364924728, 45.447361937818613 ], [ 32.677022271147507, 45.585928396813344 ], [ 32.874776177369384, 45.693466417932761 ], [ 33.160420708579558, 45.754824051259654 ], [ 33.446065239789732, 45.846734150271921 ], [ 33.643819146012504, 45.923210086415565 ], [ 33.643819146012504, 46.014842247140606 ], [ 33.35817461480233, 46.060601483895312 ], [ 33.270283989814928, 46.121554855535656 ], [ 33.028584771098011, 46.121554855535656 ], [ 32.808858208629054, 46.121554855535656 ], [ 32.545186333665953, 46.121554855535656 ], [ 32.303487114949029, 46.121554855535656 ], [ 32.105733208727152, 46.197651846335596 ], [ 31.644307427541285, 46.364694805313583 ], [ 31.907979302504376, 46.364694805313583 ], [ 31.710225396281601, 46.455594508343445 ], [ 31.644307427541285, 46.576558481942371 ], [ 31.402608208824358, 46.591660046668039 ], [ 31.094991021367107, 46.576558481942371 ], [ 30.875264458898158, 46.516110153573585 ], [ 30.743428521416607, 46.379855276250161 ], [ 30.633565240181237, 46.212858615559426 ], [ 30.501729302699683, 46.060601483895312 ], [ 30.34792070897106, 45.938492640311388 ], [ 30.018330865266737, 45.800798052773963 ], [ 29.732686334056556, 45.708812144080177 ], [ 29.710713677809483, 45.585928396813962 ], [ 29.600850396575012, 45.570548973463943 ], [ 29.051533990401737, 45.678116479816943 ], [ 28.502217584228461, 45.693466417933379 ], [ 27.821065240572739, 45.647403967460797 ], [ 27.491475396868417, 45.662762329676823 ], [ 27.030049615683431, 45.785477597243528 ], [ 26.48073320950926, 45.969045115347065 ], [ 26.063252740817539, 46.167225679227506 ], [ 25.733662897113216, 46.485860746034739 ], [ 25.030537897211314, 47.177341169575023 ], [ 24.305440241062339, 47.579069091921909 ], [ 23.64626055365369, 47.859932598790813 ], [ 23.206807428714889, 48.109948669246087 ], [ 22.855244928764389, 48.271078690613386 ], [ 22.393819147578515, 48.577284415127203 ], [ 22.02028399138004, 49.212883434551522 ], [ 21.954366022639718, 49.726916468117174 ], [ 22.283955866344041, 50.038395277314365 ], [ 22.767354303776091, 50.333843002242581 ], [ 23.052998834986266, 50.585630508819982 ], [ 23.250752741209038, 50.946959911965735 ], [ 23.184834772468712, 51.38784794622547 ], [ 23.009053522493016, 51.797358986372814 ], [ 22.855244928764389, 52.230108735217563 ], [ 22.965108209998867, 52.605337282476945 ], [ 23.316670709950262, 53.267467911851909 ], [ 23.470479303678893, 53.411779215843787 ], [ 23.624287897407516, 53.633846219117217 ], [ 23.844014459876465, 53.750940200115636 ], [ 23.95387774111094, 53.750940200115636 ], [ 24.305440241062339, 53.659895252301446 ], [ 24.591084772272517, 53.555602542011265 ], [ 24.876729303482691, 53.464135028351684 ], [ 25.382100397162716, 53.398680181909477 ], [ 25.909444147088916, 53.424874216897344 ], [ 26.678487115732036, 53.490288748492567 ], [ 27.64528399059704, 53.685928196809698 ], [ 28.414326959240164, 53.893613110651074 ], [ 29.359151177858987, 54.164641358924868 ], [ 30.062276177760886, 54.446684081136624 ], [ 30.611592583934161, 54.612438416216683 ], [ 31.182881646355408, 54.752166902306534 ], [ 32.391377739936431, 54.941931480836445 ], [ 33.336201958555257, 55.193564582212858 ], [ 33.731709771000709, 55.218640923521598 ], [ 34.127217583445422, 55.268746235248457 ], [ 34.786397270853705, 55.243701472815275 ], [ 35.269795708286551, 55.443617974946214 ], [ 35.665303520731634, 55.692096843331122 ], [ 35.797139458213458, 55.840430581684863 ], [ 36.368428520633799, 55.963611315758975 ], [ 36.676045708091017, 56.208800938192731 ], [ 36.895772270560251, 56.525219185618852 ], [ 37.115498833029186, 57.197850454929785 ], [ 37.554951957968527, 57.623894316951798 ], [ 38.741475395303041, 58.369133682554093 ], [ 40.675069145034165, 59.279034132419412 ], [ 43.267842582173479, 59.189116471947791 ], [ 44.586201956989534, 58.804314838196404 ], [ 45.860616019312346, 58.323009802967974 ], [ 47.92604570652513, 58.207436395970284 ], [ 49.376241018822576, 58.323009802968002 ], [ 50.738545706133486, 58.346079271190696 ], [ 51.485616018529242, 58.184276458878045 ], [ 52.188741018431379, 57.975156828369812 ], [ 52.803975393345652, 57.69442055096107 ], [ 53.77077226821131, 57.78824240526292 ], [ 54.913350393052347, 58.207436395970511 ], [ 56.143819142880474, 58.392173043154784 ], [ 57.37428789270912, 58.621740202653783 ], [ 58.516866017550683, 58.940618420380623 ], [ 59.835225392366574, 59.391098201871735 ], [ 61.944600392073681, 60.274384121791257 ], [ 63.219014454396195, 61.240345473976305 ], [ 65.460225391584132, 61.971715025079092 ], [ 67.130147266351599, 61.9303866003007 ], [ 68.624287891143155, 61.639517213457566 ], [ 70.206319140923256, 61.219194671022052 ], [ 70.733662890850127, 60.44824144313214 ], [ 71.436787890752299, 59.747225654351446 ], [ 72.22780351564225, 58.985933709171263 ], [ 73.546162890458433, 58.253710996259045 ], [ 74.952412890262238, 58.114706027151151 ], [ 76.094991015103659, 58.114706027151151 ], [ 76.79811601500586, 57.928519263983581 ], [ 78.11647538982227, 57.928519263983581 ], [ 79.830342577083456, 58.598851013086488 ], [ 81.456319139356893, 58.713147189396828 ], [ 82.423116014222686, 57.975156828369855 ], [ 83.214131639112949, 57.364123214415542 ], [ 84.356709763953759, 56.887061438965659 ], [ 86.466084763659438, 56.742742021300309 ], [ 88.136006638427247, 56.694511955169986 ], [ 91.739522262925036, 50.669261961562803 ], [ 90.509053513096063, 50.389911633122345 ], [ 89.981709763168041, 49.939506346175314 ], [ 89.102803513293154, 49.541915562914852 ], [ 88.223897263415537, 49.198527704794969 ], [ 87.696553513488453, 49.025933753397773 ], [ 86.729756638623456, 48.910537417999279 ], [ 86.026631638720644, 48.736941988287818 ], [ 83.389912889087853, 48.852739083348389 ], [ 82.423116014222856, 48.794873946151775 ], [ 81.10475663940646, 48.387946024263847 ], [ 79.962178514564854, 47.977738073988299 ], [ 78.380147264785364, 47.564244852728883 ], [ 77.061787889968969, 47.386026613268406 ], [ 74.864522265274957, 47.623516633436196 ], [ 73.282491015495452, 47.682721285376395 ], [ 71.524678515739353, 47.266878585910362 ], [ 70.294209765911262, 46.667104772248379 ], [ 68.360616016180373, 45.938492640312013 ], [ 67.56960039129018, 45.570548973464582 ], [ 66.778584766400044, 44.577503034073452 ], [ 65.811787891535261, 44.200662015406401 ], [ 64.317647266743364, 43.82139517148989 ], [ 63.175069141901758, 43.439703611876809 ], [ 62.120381642048628, 42.927012487812071 ], [ 61.505147267134895, 42.280098324055082 ], [ 61.329366017159053, 41.429080110068952 ], [ 61.285420704664517, 40.332669877640903 ], [ 60.747090626614792, 40.399635585513934 ], [ 60.340596486046607, 40.315918056148853 ], [ 59.802266407995958, 40.148171272400141 ], [ 59.483662892415175, 40.013674815621016 ], [ 59.066182423723454, 39.904200887418341 ], [ 58.835469533130969, 39.811432255379358 ], [ 58.088399220734914, 39.277708236159775 ], [ 57.517110158314573, 38.945253354337709 ], [ 57.077657033375765, 38.851200649844522 ], [ 56.418477345967119, 38.88541604582062 ], [ 55.572530080460133, 39.013577056686572 ], [ 55.209981252385198, 38.996502312118032 ], [ 54.89137773680531, 39.039181445470533 ], [ 54.539815236853912, 38.979423446521153 ], [ 54.133321096285719, 38.928162128801745 ], [ 53.913594533815868, 38.928162128801745 ], [ 53.847676565075538, 39.064776559013445 ], [ 53.627950002605701, 39.252190483424982 ], [ 53.452168752629994, 39.328715866285087 ], [ 53.221455862037509, 39.379686318185179 ], [ 53.111592580803027, 39.456072257999161 ], [ 53.34230547139552, 39.633980446398176 ], [ 53.408223440135849, 39.887343191397058 ], [ 53.605977346358621, 40.038913136866597 ], [ 53.144551565172748, 40.005259967029694 ], [ 52.924825002703791, 39.954749093377345 ], [ 52.749043752728092, 40.156568478213046 ], [ 52.683125783986874, 40.441455362687286 ], [ 52.858907033962566, 40.641828269082083 ], [ 52.880879690209646, 40.974450153907682 ], [ 52.63918047149361, 41.437316865274809 ], [ 52.485371877764997, 41.749538759335728 ], [ 52.397481252776693, 42.060249482137479 ], [ 52.661153127740697, 42.531574683415151 ], [ 52.683125783986874, 42.693282355905659 ], [ 52.287617971542218, 42.854570074201412 ], [ 51.892110159097577, 42.918967532635534 ], [ 51.56252031539325, 43.12779488603087 ], [ 51.298848440430149, 43.239946111873557 ], [ 51.298848440430149, 43.51145540933139 ], [ 51.035176565467047, 43.955996217651219 ], [ 50.727559378009801, 44.240029487464057 ], [ 50.375996878058402, 44.318685460876061 ], [ 50.222188284329768, 44.522698170725604 ], [ 50.375996878058402, 44.725998950934091 ], [ 50.79347734675013, 44.663520696232588 ], [ 51.057149221713232, 44.569676927405425 ], [ 51.342793752923399, 44.554021554526543 ], [ 51.10109453420737, 44.757212800312075 ], [ 50.859395315491348, 44.85075323462695 ], [ 51.167012502948594, 45.099452875526389 ], [ 51.320821096677228, 45.33162922997186 ], [ 51.694356252874798, 45.408810698538481 ], [ 52.155782034060671, 45.48588684779164 ], [ 52.441426565270852, 45.48588684779164 ], [ 52.814961721469317, 45.685791975376027 ], [ 52.946797658950878, 45.869687985559324 ], [ 52.814961721469317, 45.991948418258637 ], [ 52.814961721469317, 46.15961650641308 ], [ 52.990742971444121, 46.402588092094945 ], [ 52.990742971444121, 46.629395554429635 ], [ 52.792989065222244, 46.659565031785363 ], [ 52.661153127740697, 46.840228617377861 ], [ 52.463399221517918, 46.840228617377861 ], [ 52.309590627789298, 46.795119491267229 ], [ 51.826192190355449, 46.960334632302093 ], [ 51.364766409169576, 46.975328967560948 ], [ 50.991231252972007, 46.975328967560948 ], [ 50.507832815539054, 46.825196446709441 ], [ 50.134297659341478, 46.71985351389732 ], [ 50.04640703435318, 46.463162645643905 ], [ 49.606953909414372, 46.296420605333473 ], [ 49.321309378204198, 46.372275566829515 ], [ 48.947774222006629, 46.159616506412462 ], [ 48.859883597018325, 45.900278359894195 ], [ 48.59621172205523, 45.701139807499565 ], [ 48.354512503339208, 45.716483427682164 ], [ 47.695332815930549, 45.62435852637968 ], [ 47.409688284720382, 45.300727152289468 ], [ 47.058125784769878, 44.944141995787312 ], [ 46.860371878547106, 44.694768249511725 ], [ 46.684590628571407, 44.491357936447827 ], [ 46.926289847287435, 44.350118366550277 ], [ 47.211934378498505, 44.240029487463417 ], [ 47.409688284720382, 44.019232629591258 ], [ 47.45363359721452, 43.908524699142674 ], [ 47.673360159683476, 43.97181163645439 ], [ 47.519551565954856, 43.734138302357557 ], [ 47.629414847190219, 43.351891280486981 ], [ 47.607442190943154, 43.047560738318495 ], [ 47.827168753412096, 42.741712775229047 ], [ 47.9150593784004, 42.499182771590768 ], [ 47.189961722251425, 42.596308134553865 ], [ 46.970235159781573, 42.725573501990503 ], [ 46.574727347336932, 42.725573501990503 ], [ 46.025410941163656, 42.741712775229047 ], [ 45.783711722446725, 42.741712775229047 ], [ 45.476094534989478, 42.838460205665839 ], [ 45.036641410050677, 42.935056392443862 ], [ 44.531270316371561, 42.967221505102231 ], [ 44.091817191432753, 43.063615975343176 ], [ 43.564473441505662, 43.271951474168112 ], [ 43.234883597801335, 43.367866623596974 ], [ 42.773457816615455, 43.383837760338828 ], [ 41.828633597997538, 43.44768024098321 ], [ 41.213399223083037, 43.479576239699249 ], [ 40.971700004367001, 43.559242607094959 ], [ 40.510274223181142, 43.68648997948489 ], [ 39.859334281866936, 43.533362575755113 ] ] ] } }, 6 | { "type": "Feature", "properties": { "ID": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 29.058400445484782, 36.696772884206688 ], [ 34.112111382281427, 42.042914133031047 ], [ 34.584523491589941, 41.953102584435783 ], [ 34.815236382183329, 41.97760921310627 ], [ 34.969044975911949, 42.132598910677672 ], [ 35.122853569640576, 42.083695658922757 ], [ 35.133839897764112, 42.026594188595318 ], [ 35.155812554010289, 41.87134574937226 ], [ 35.331593803985996, 41.715719334766924 ], [ 35.628224663319699, 41.682907737437596 ], [ 35.891896538282801, 41.756710287470099 ], [ 36.056691460134964, 41.723919618218687 ], [ 36.133595756999725, 41.592589536078947 ], [ 36.144582085123261, 41.444523168718362 ], [ 36.276418022604808, 41.362117734099932 ], [ 36.375294975715754, 41.254834474412753 ], [ 36.562062553814989, 41.304371760831891 ], [ 36.638966850678848, 41.386850336830946 ], [ 36.858693413148707, 41.320875833664218 ], [ 36.990529350630254, 41.230051732445169 ], [ 37.243214897469812, 41.139101283877054 ], [ 37.550832084927059, 41.072876175062284 ], [ 37.660695366162443, 41.122551268350897 ], [ 37.858449272384313, 41.056309462831202 ], [ 37.946339897372617, 40.998293107127061 ], [ 38.220998100459248, 40.956821560964634 ], [ 38.440724662928204, 40.948524123076162 ], [ 38.682423881645121, 40.981707617488674 ], [ 38.935109428484679, 41.014874424599071 ], [ 39.187794975324245, 41.08115796606814 ], [ 39.308644584682263, 41.064593340635852 ], [ 39.46245317841089, 41.122551268350897 ], [ 39.583302787768901, 41.064593340635852 ], [ 39.7590840377446, 40.973413308213374 ], [ 40.066701225201847, 40.956821560964634 ], [ 40.209523490806937, 40.931926118986418 ], [ 40.352345756412021, 41.023163518666728 ], [ 40.605031303251586, 41.072876175062284 ], [ 40.791798881350829, 41.155647124403949 ], [ 41.077443412560989, 41.263093299828711 ], [ 41.18730669379547, 41.312624319541676 ], [ 41.396046928141786, 41.386850336830946 ], [ 41.494923881252717, 41.485686693417051 ], [ 41.604787162488087, 41.600805511665413 ], [ 41.70366411559904, 41.715719334766924 ], [ 41.769582084339362, 41.805864893927634 ], [ 41.725636771846112, 41.944931613471311 ], [ 41.659718803104887, 42.091848820678557 ], [ 41.615773490610735, 42.327834563735323 ], [ 41.52788286562334, 42.506269936937883 ], [ 41.429005912512395, 42.724564657961892 ], [ 41.264210990660224, 42.805220333718921 ], [ 41.121388725055148, 42.829396558367314 ], [ 41.066457084437467, 42.917961839373355 ], [ 40.956593803202985, 42.982293114958253 ], [ 40.835744193844967, 43.06261264618032 ], [ 40.539113334511264, 43.086688014046032 ], [ 40.429250053275887, 43.158857364092491 ], [ 40.308400443917883, 43.174883435534895 ], [ 40.143605522065712, 43.262951666262076 ], [ 40.033742240831238, 43.382839687529405 ], [ 39.857960990855531, 43.5343581670341 ], [ 40.473195365770039, 43.661658142491014 ], [ 41.483937553129188, 43.470607191005428 ], [ 42.362843803006783, 43.406788899779549 ], [ 43.022023490415428, 43.406788899779549 ], [ 43.637257865329936, 43.214930218443584 ], [ 44.252492240243534, 43.022466015473945 ], [ 44.340382865231831, 42.990329796523369 ], [ 45.351125052590973, 42.893820276855386 ], [ 45.83452349002394, 42.732634950833685 ], [ 46.449757864938427, 42.732634950833685 ], [ 47.021046927358775, 42.732634950833685 ], [ 47.240773489827731, 42.57102962446087 ], [ 47.63628130227238, 42.538658176024612 ], [ 47.899953177236384, 42.538658176024612 ], [ 48.119679739705319, 42.311587992465071 ], [ 48.251515677186887, 42.116302018555544 ], [ 48.361378958421355, 41.977609213105602 ], [ 48.537160208397047, 41.854981817007655 ], [ 48.734914114619826, 41.691112206229022 ], [ 49.053517630200624, 41.411573535150104 ], [ 49.130421927064475, 41.238313690681316 ], [ 49.21831255205278, 41.056309462831202 ], [ 49.306203177040182, 40.940225642402403 ], [ 49.449025442645258, 40.848873543542709 ], [ 49.514943411386497, 40.78235643821349 ], [ 49.536916067632667, 40.649122204749446 ], [ 49.657765676991573, 40.607431836170875 ], [ 49.866505911336994, 40.557369043256003 ], [ 50.02031450506562, 40.590748401806266 ], [ 50.218068411288385, 40.523973034131522 ], [ 50.338918020646403, 40.398589758015333 ], [ 50.360890676893469, 40.314870929275976 ], [ 50.174123098794233, 40.373485024448577 ], [ 50.02031450506562, 40.356743337345279 ], [ 49.756642630102519, 40.281354296084139 ], [ 49.580861380126812, 40.214271158778075 ], [ 49.438039114521722, 40.138723174854356 ], [ 49.481984427015881, 40.004208038017488 ], [ 49.427052786398193, 39.903147402899563 ], [ 49.416066458274656, 39.785054660701647 ], [ 49.416066458274656, 39.683670704609682 ], [ 49.306203177040182, 39.573669866192077 ], [ 49.33916216141079, 39.446528593323379 ], [ 49.416066458274656, 39.353143847847342 ], [ 49.416066458274656, 39.259634120978937 ], [ 49.240285208298964, 39.370132190999797 ], [ 49.251271536422486, 39.268140167610589 ], [ 49.229298880176316, 39.14896160495654 ], [ 49.10844927081741, 39.123397034703906 ], [ 49.031544973953544, 39.225599612813433 ], [ 48.987599661459399, 39.123397034703906 ], [ 48.954640677088783, 38.969814773821525 ], [ 48.888722708348453, 38.875794630251434 ], [ 48.866750052101374, 38.738815748025097 ], [ 48.866750052101374, 38.541447510222433 ], [ 48.921681692719062, 38.080252429072253 ], [ 48.938161184904359, 37.872409366540523 ], [ 49.015065481768225, 37.724831362108034 ], [ 49.179860403620395, 37.581312114678298 ], [ 49.328175833287247, 37.524698100056895 ], [ 49.481984427015881, 37.468041089936087 ], [ 49.641286184806276, 37.459320812121796 ], [ 49.806081106658425, 37.450599517285703 ], [ 49.921437551954675, 37.454960291825991 ], [ 49.954396536325291, 37.476760350644483 ], [ 49.998341848819443, 37.41570416938449 ], [ 50.102711965992142, 37.41570416938449 ], [ 50.212575247226617, 37.380792555820051 ], [ 50.229054739411929, 37.319658109045875 ], [ 50.28398638002961, 37.184111911000322 ], [ 50.34990434876994, 37.096533402192769 ], [ 50.509206106560335, 37.013239944844088 ], [ 50.674001028412491, 36.925463891224396 ], [ 50.805836965894045, 36.833190148211813 ], [ 50.987111379931513, 36.767212097346736 ], [ 51.245290090832846, 36.705581319607766 ], [ 51.470509817364466, 36.66152904984672 ], [ 51.706715872018727, 36.604223389639344 ], [ 51.898976614179716, 36.582171405303008 ], [ 52.080251028216296, 36.595403352115632 ], [ 52.777882864057332, 36.806805748545983 ], [ 53.371144582724746, 36.85956545076467 ], [ 53.634816457687847, 36.771612402182512 ], [ 53.986378957639253, 36.824396358991621 ], [ 53.964406301392174, 37.052706137184366 ], [ 53.854543020157699, 37.402614220140812 ], [ 53.766652395169402, 37.629182681857763 ], [ 53.700734426429072, 37.837711658409987 ], [ 53.788625051416474, 38.097546108096388 ], [ 53.810597707663547, 38.287506405813438 ], [ 53.854543020157699, 38.356459976998167 ], [ 53.876515676404772, 38.562926902625968 ], [ 53.876515676404772, 38.803057391303902 ], [ 53.986378957639253, 38.939912788852745 ], [ 54.27202348884942, 38.939912788852745 ], [ 54.733449270035294, 39.025313552788248 ], [ 55.28276567620857, 39.025313552788248 ], [ 55.766164113641523, 38.974085455973089 ], [ 56.557179738530827, 38.871518027384745 ], [ 57.260304738433625, 38.905723644578174 ], [ 57.567921925890879, 39.008241641729391 ], [ 57.985402394582593, 39.212832415133562 ], [ 58.468800832015553, 39.569435572584183 ], [ 58.842335988213122, 39.839908693160993 ], [ 59.677296925596558, 40.092513562920161 ], [ 60.226613331770743, 40.327435380003628 ], [ 60.885793019178486, 40.377669796492128 ], [ 61.457082081598841, 40.344184343318695 ], [ 62.094289112760407, 39.99158362565602 ], [ 62.48979692520507, 39.450770383569342 ], [ 62.599660206440447, 39.161740409185398 ], [ 63.127003956366636, 38.390912162411631 ], [ 64.005910206244238, 37.907090740776603 ], [ 65.01665239360338, 37.315289458111849 ], [ 65.412160206048938, 36.894718365538566 ], [ 66.29106645592654, 36.683558338567835 ], [ 66.818410205852729, 36.542461956029328 ], [ 67.565480518248791, 36.117626503368633 ], [ 68.971730518053491, 35.904341443908962 ], [ 70.246144580375727, 35.904341443908962 ], [ 71.081105517759184, 36.117626503368633 ], [ 71.740285205167837, 36.117626503368633 ], [ 72.223683642600776, 35.833118270858662 ], [ 72.53130083005712, 35.189236637030497 ], [ 72.707082080032833, 34.54021200936409 ], [ 72.39946489257558, 33.959018235975392 ], [ 71.740285205167837, 33.63033780551438 ], [ 70.993214892771775, 33.263661036246639 ], [ 70.465871142844676, 32.710750231043811 ], [ 70.377980517857281, 32.525678851678684 ], [ 69.718800830449524, 31.856267259594759 ], [ 69.455128955485534, 30.956113437702552 ], [ 69.41118364299227, 30.085428725338371 ], [ 69.499074267979694, 29.053463155151405 ], [ 68.927785205559331, 28.049858354503883 ], [ 67.960988330693439, 27.427541617327897 ], [ 67.082082080815837, 26.95848606532434 ], [ 66.33501176841979, 26.251232878453688 ], [ 65.807668018493587, 25.380937952218904 ], [ 65.47807817478926, 25.380937952218087 ], [ 64.972707081109235, 25.301504624641584 ], [ 64.577199268664586, 25.281638148555 ], [ 63.961964893750086, 25.400788130667639 ], [ 63.632375050045759, 25.361084510542803 ], [ 63.522511768811285, 25.202139723095765 ], [ 63.061085987625411, 25.182256995751573 ], [ 62.555714893946295, 25.222019203909991 ], [ 62.248097706489041, 25.122589353193842 ], [ 61.918507862784708, 25.082794726405737 ], [ 61.523000050340059, 25.202139723095765 ], [ 61.303273487870207, 25.142481808933297 ], [ 60.710011769202779, 25.222019203909991 ], [ 60.270558644263993, 25.321367844903641 ], [ 59.589406300609156, 25.361084510542803 ], [ 59.215871144410691, 25.380937952218087 ], [ 58.842335988213122, 25.480156175311905 ], [ 58.336964894533089, 25.579292587574169 ], [ 58.051320363322915, 25.579292587574169 ], [ 57.699757863371524, 25.717945686580205 ], [ 57.436085988408415, 25.777319064414431 ], [ 57.260304738432723, 25.816884820387955 ], [ 57.128468800951168, 26.093474325267465 ], [ 57.040578175963766, 26.330031987603093 ], [ 56.952687550975462, 26.644691351271742 ], [ 56.864796925988074, 26.880118833195052 ], [ 56.667043019765295, 27.173714719008586 ], [ 56.315480519814791, 27.154165561685318 ], [ 55.898000051123063, 27.036798818109837 ], [ 55.502492238677526, 26.919309252388217 ], [ 55.26079301996149, 26.742845413605011 ], [ 54.953175832504243, 26.644691351271742 ], [ 54.711476613788214, 26.526795035558372 ], [ 54.403859426330968, 26.62505039917529 ], [ 54.184132863861116, 26.723221366633915 ], [ 53.854543020156804, 26.703593935194053 ], [ 53.612843801440775, 26.762466074389238 ], [ 53.481007863959221, 26.919309252388217 ], [ 53.261281301489369, 27.036798818109052 ], [ 52.73393755156318, 27.193260452822734 ], [ 52.030812551660375, 27.661326686161797 ], [ 51.459523489240027, 27.894612825815337 ], [ 51.020070364301233, 28.35967717935776 ], [ 50.844289114325527, 28.899686655134268 ], [ 50.360890676893469, 29.589873051220007 ], [ 50.185109426917791, 30.047396463977559 ], [ 49.701710989484823, 30.123446366668716 ], [ 49.04253130207708, 30.123446366668716 ], [ 48.690968802125681, 30.237411459532563 ], [ 47.724171927259789, 30.691949098817844 ], [ 47.064992239852039, 31.25712325809209 ], [ 46.186085989974423, 31.482252990657631 ], [ 45.702687552541477, 31.706842322271541 ], [ 43.988820365280425, 32.414452588462858 ], [ 42.97807817792129, 32.784671565702098 ], [ 42.231007865525228, 32.895438466418099 ], [ 41.879445365573829, 33.190139910336931 ], [ 41.483937553129188, 33.63033780551288 ], [ 41.132375053177789, 33.922560546240632 ], [ 40.956593803202082, 34.576403141882096 ], [ 40.341359428287596, 34.865364588207662 ], [ 39.374562553422585, 35.440248438124669 ], [ 38.407765678556693, 35.511822891326965 ], [ 37.616750053667388, 35.547586215989604 ], [ 36.298390678850986, 35.547586215989604 ], [ 35.771046928923901, 35.440248438124669 ], [ 35.814992241418039, 35.583333596911856 ], [ 35.760060600800351, 35.761831108354826 ], [ 35.847951225787753, 35.886541652535549 ], [ 35.93584185077605, 36.002168727678175 ], [ 35.749074272676822, 36.232914759336026 ], [ 35.847951225787753, 36.348033278388968 ], [ 35.968800835146666, 36.515977652330037 ], [ 36.144582085121471, 36.586582306292293 ], [ 36.166554741368543, 36.674747379918408 ], [ 36.166554741368543, 36.859565450762517 ], [ 36.012746147639916, 36.903504065896229 ], [ 35.847951225787753, 36.868355196276212 ], [ 35.760060600800351, 36.736402893399237 ], [ 35.617238335195267, 36.613042418769709 ], [ 35.441457085219568, 36.59540335211274 ], [ 35.298634819614485, 36.577760252268966 ], [ 35.045949272774919, 36.674747379918408 ], [ 34.738332085317673, 36.74520678550001 ], [ 34.584523491589046, 36.815601559070743 ], [ 34.452687554107492, 36.709985158763438 ], [ 34.210988335390574, 36.56011311999022 ], [ 34.134084038526709, 36.427631170275426 ], [ 34.046193413539307, 36.312630287017633 ], [ 33.903371147933321, 36.2772112117906 ], [ 33.78526812060619, 36.217405068337044 ], [ 33.717976860849973, 36.176400368131432 ], [ 33.45309799183017, 36.178786259362226 ], [ 33.232164435304249, 36.145693398682553 ], [ 33.000244550654848, 36.103710649487802 ], [ 32.790297322252385, 36.043941115405097 ], [ 32.433906846075239, 36.124525009614494 ], [ 32.248469643647496, 36.37395299601291 ], [ 31.943513207532824, 36.571005185768641 ], [ 31.597272210266798, 36.664558451016561 ], [ 31.168462090697989, 36.851324146092836 ], [ 30.751625352169668, 36.893311186748271 ], [ 30.609446816728106, 36.724227097764512 ], [ 30.566788964561294, 36.526324162749887 ], [ 30.415555291486815, 36.253128131109037 ], [ 30.079420857787312, 36.253249257133248 ], [ 29.743286424087813, 36.146984286355639 ], [ 29.33468943165207, 36.253612634079197 ], [ 29.099770837324535, 36.448760659394843 ], [ 29.058400445484782, 36.696772884206688 ] ] ] } }, 7 | { "type": "Feature", "properties": { "ID": 4 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 88.125020310306397, 56.691495522155925 ], [ 95.051900192157191, 56.646220016920559 ], [ 98.040181441743186, 56.233234124523371 ], [ 101.072408003817927, 56.110912345809773 ], [ 104.588033003331915, 55.889749819437817 ], [ 106.257954878093443, 56.037332109141602 ], [ 109.202290815190651, 56.330811187408379 ], [ 114.299947064479653, 56.597866161532316 ], [ 117.420064251540907, 56.742742021298824 ], [ 120.452290813624657, 56.694511955168508 ], [ 124.055806438116164, 56.525219185617594 ], [ 130.076314249776885, 55.568053897266005 ], [ 131.834126749533937, 54.714106825360219 ], [ 133.899556436748156, 53.711945057207828 ], [ 135.086079874079388, 52.924424411298432 ], [ 136.756001748849911, 51.933043016974764 ], [ 137.151509561293665, 51.140367068225125 ], [ 137.942525186190124, 49.712710574665103 ], [ 138.469868936109151, 48.620877539339375 ], [ 139.216939248507884, 47.741858821432423 ], [ 138.381978311131633, 46.9378352480961 ], [ 138.162251748660907, 46.395011538868452 ], [ 137.722798623719399, 45.846734150270656 ], [ 137.019673623818363, 45.385667316675914 ], [ 136.536275186388167, 44.951917546124847 ], [ 135.74525956149165, 44.295099725060574 ], [ 135.173970499074898, 43.884774730495757 ], [ 135.086079874088369, 43.471603817706594 ], [ 134.339009561689664, 43.119776200672291 ], [ 133.37221268682913, 42.830403695929604 ], [ 132.625142374430396, 42.733643663611787 ], [ 132.273579874475388, 43.087690949110304 ], [ 131.878072062031663, 43.247949029460507 ], [ 131.438618937099136, 43.087690949110304 ], [ 131.350728312103627, 42.701356717316578 ], [ 130.999165812157628, 42.604395093028479 ], [ 130.427876749731894, 42.345091949349069 ], [ 129.812642374817415, 41.986796768501989 ], [ 129.812642374817415, 41.494944884956453 ], [ 129.812642374817415, 41.065628751996712 ], [ 129.812642374817415, 40.833289581007421 ], [ 129.329243937387162, 40.60013334595066 ], [ 128.626118937486154, 40.332669877638843 ], [ 127.966939250073892, 39.996844081102367 ], [ 127.615376750127894, 39.794551760257001 ], [ 127.615376750127894, 39.456072257997093 ], [ 127.791158000100907, 39.047714180651461 ], [ 128.230611125042401, 38.808408249898186 ], [ 128.450337687513155, 38.533928206913323 ], [ 129.197407999902907, 37.564985562690545 ], [ 129.285298624898388, 37.005563581477503 ], [ 129.285298624898388, 36.441994325015571 ], [ 129.461079874871388, 35.945488129718683 ], [ 129.548970499857887, 35.41003385935602 ], [ 129.021626749929908, 35.122992403243657 ], [ 128.450337687513155, 35.122992403243657 ], [ 128.098775187558147, 34.834935848420677 ], [ 127.52748612514138, 34.545867911686251 ], [ 127.0880330001999, 34.509663496420487 ], [ 126.560689250271892, 34.400955868259103 ], [ 125.945454875357399, 34.47344334566133 ], [ 126.121236125339394, 34.834935848420677 ], [ 125.989400187855139, 35.051073286828576 ], [ 126.253072062814638, 35.445842486613842 ], [ 126.472798625285407, 35.767402721013539 ], [ 126.648579875258406, 36.229591513040731 ], [ 126.472798625285407, 36.618553799862021 ], [ 126.253072062814638, 36.759510956246267 ], [ 126.121236125339394, 37.040649198915844 ], [ 126.253072062814638, 37.110771808527147 ], [ 126.560689250271892, 37.075718609814707 ], [ 126.736470500253887, 37.075718609814707 ], [ 126.560689250271892, 37.530143623998619 ], [ 126.253072062814638, 37.773694955342783 ], [ 126.033345500343913, 37.843134251795448 ], [ 125.6817830003979, 37.808422765860449 ], [ 125.5060017504249, 37.808422765860449 ], [ 125.242329875456392, 37.981816848887398 ], [ 124.978658000496907, 38.051060069611651 ], [ 124.714986125528398, 38.189350158781657 ], [ 124.846822063012652, 38.671299774168247 ], [ 125.154439250469906, 39.081834814265058 ], [ 125.330220500442891, 39.489994692565936 ], [ 125.066548625483406, 39.693181784629004 ], [ 124.495259563057672, 39.760778338938451 ], [ 124.011861125627419, 39.828308606207216 ], [ 123.264790813228672, 39.760778338938451 ], [ 122.517720500838891, 39.456072257997093 ], [ 122.210103313381637, 39.218152362997863 ], [ 121.770650188440172, 39.047714180651461 ], [ 121.506978313480644, 38.911066784337912 ], [ 121.199361126023405, 38.911066784337912 ], [ 121.155415813525664, 39.115938953397801 ], [ 121.506978313480644, 39.252190483422886 ], [ 121.463033000982904, 39.489994692565936 ], [ 121.287251751009876, 39.659358658915494 ], [ 121.463033000982904, 39.89577255771863 ], [ 121.682759563453672, 40.097766236497542 ], [ 121.946431438413157, 40.299162077642649 ], [ 122.122212688395138, 40.56675867091986 ], [ 121.946431438413157, 40.766756845029455 ], [ 121.419087688485163, 40.899755617519602 ], [ 120.93568925105491, 40.883145362702649 ], [ 120.913716594806033, 40.550065088930154 ], [ 120.606099407348793, 40.366161047989578 ], [ 120.232564251153903, 40.148171272397384 ], [ 119.705220501225909, 39.980009197470494 ], [ 119.397603313768656, 39.845180812299716 ], [ 119.309712688782156, 39.591662728753263 ], [ 119.199849407546765, 39.303216697667636 ], [ 118.892232220089525, 39.150026593944801 ], [ 118.6725056576188, 39.167064225973853 ], [ 118.430806438899154, 39.167064225973853 ], [ 118.101216595193051, 39.269203350854205 ], [ 117.837544720233538, 39.150026593944801 ], [ 117.749654095247038, 38.911066784337216 ], [ 117.639790814011675, 38.722746298774496 ], [ 117.771626751495916, 38.499544240460054 ], [ 117.947408001468943, 38.241141396204682 ], [ 118.386861126410395, 38.120237852545571 ], [ 118.848286907591785, 38.051060069611651 ], [ 119.068013470062553, 37.981816848886687 ], [ 119.133931438800175, 37.808422765860449 ], [ 119.002095501324888, 37.652019136112891 ], [ 118.936177532578299, 37.44296755008893 ], [ 118.958150188827148, 37.320750232100721 ], [ 119.265767376284415, 37.250822369537239 ], [ 119.485493938755141, 37.128292326556995 ], [ 119.727193157474787, 37.128292326556995 ], [ 119.815083782461286, 37.320750232100721 ], [ 119.9908650324343, 37.47785018671042 ], [ 120.144673626158422, 37.547566629067951 ], [ 120.254536907393813, 37.686804042441473 ], [ 120.693990032335279, 37.87782940808593 ], [ 120.979634563543669, 37.843134251794737 ], [ 121.199361126014395, 37.669413627287113 ], [ 121.3092244072498, 37.512716548140247 ], [ 121.528950969720526, 37.460410902465497 ], [ 121.792622844680054, 37.460410902465497 ], [ 122.078267375897397, 37.512716548140247 ], [ 122.42982987584341, 37.460410902465497 ], [ 122.583638469576528, 37.44296755008893 ], [ 122.583638469576528, 37.233330252173126 ], [ 122.451802532092287, 37.093247236045627 ], [ 122.539693157078801, 36.970461763172828 ], [ 122.385884563354665, 36.90020954679175 ], [ 122.210103313372656, 36.882636376094773 ], [ 121.968404094662034, 36.935343749701893 ], [ 121.748677532191266, 36.90020954679175 ], [ 121.660786907204766, 36.741905444301011 ], [ 121.3971150322363, 36.706682303053142 ], [ 121.155415813525664, 36.618553799862021 ], [ 120.957661907294792, 36.477338457163306 ], [ 120.715962688584156, 36.37125774760387 ], [ 120.715962688584156, 36.158661955569713 ], [ 120.518208782362279, 36.069909696494356 ], [ 120.188618938656163, 35.927697595656355 ], [ 120.100728313669677, 35.749572186903208 ], [ 119.902974407447772, 35.588917684506733 ], [ 119.595357219990547, 35.445842486613842 ], [ 119.287740032533279, 35.122992403243657 ], [ 119.375630657519778, 34.834935848420677 ], [ 119.529439251243915, 34.636310057174178 ], [ 119.881001751198923, 34.437207467051294 ], [ 120.188618938656163, 34.346549011579434 ], [ 120.320454876140403, 34.16493783109167 ], [ 120.540181438611157, 33.782281071832301 ], [ 120.584126751099902, 33.581155826269175 ], [ 120.781880657321807, 33.306137234818408 ], [ 120.869771282308292, 32.938092956060935 ], [ 120.913716594806033, 32.698038825907041 ], [ 121.111470501027938, 32.549991273610281 ], [ 121.353169719747541, 32.438795072048045 ], [ 121.463033000982904, 32.197399195841719 ], [ 121.682759563444691, 32.048528570729133 ], [ 121.902486125915416, 31.768742872502326 ], [ 121.968404094662034, 31.469369505803407 ], [ 121.792622844680054, 31.413129915211467 ], [ 121.792622844680054, 31.150233012191716 ], [ 121.990376750901916, 30.905459710996393 ], [ 121.836568157177794, 30.792275576096905 ], [ 121.441060344734041, 30.792275576096905 ], [ 121.17738846976556, 30.603339045233941 ], [ 121.02357987604141, 30.432980439232558 ], [ 120.89174393855717, 30.224359648576449 ], [ 121.243306438512136, 30.319242367308942 ], [ 121.506978313471663, 30.319242367308942 ], [ 121.726704875942431, 30.148387493086904 ], [ 121.968404094662034, 30.148387493086904 ], [ 122.210103313372656, 30.053339968086036 ], [ 122.319966594608033, 29.862971143884277 ], [ 122.100240032137279, 29.882024423344244 ], [ 121.880513469666553, 29.691328060728299 ], [ 122.012349407150779, 29.404604125155796 ], [ 122.012349407150779, 29.11706925817726 ], [ 121.990376750901916, 29.021044951510216 ], [ 121.70473221969354, 29.078670271368825 ], [ 121.748677532191266, 28.847976123500619 ], [ 121.660786907204766, 28.636055947473551 ], [ 121.660786907204766, 28.423706907599911 ], [ 121.485005657222786, 28.230291899831951 ], [ 121.17738846976556, 28.055918096270812 ], [ 120.913716594806033, 27.920098108258752 ], [ 120.693990032335279, 27.686866709220126 ], [ 120.562154094851039, 27.414132628680729 ], [ 120.496236126113416, 27.121168600303534 ], [ 120.122700969918526, 26.945020571412339 ], [ 120.100728313669677, 26.729354244957143 ], [ 119.749165813714669, 26.355876272590386 ], [ 119.661275188728155, 26.15882211951017 ], [ 119.639302532479306, 25.644925295199332 ], [ 119.793111126212409, 25.565666190458458 ], [ 119.463521282506292, 25.148697536793676 ], [ 119.089986126311402, 25.188470696680319 ], [ 118.936177532578299, 24.929713791059356 ], [ 118.738423626356422, 24.730299405283468 ], [ 118.606587688872182, 24.410571200459319 ], [ 118.320943157663791, 24.43057807854586 ], [ 118.298970501414914, 24.590518711605544 ], [ 118.079243938953141, 24.43057807854586 ], [ 118.101216595193051, 24.210328329462371 ], [ 117.837544720233538, 23.989697234893129 ], [ 117.595845501513935, 23.829000227448663 ], [ 117.310200970305544, 23.647977914193568 ], [ 116.958638470359517, 23.486858608798251 ], [ 116.782857220377551, 23.204426127005657 ], [ 116.607075970404537, 22.98209502739072 ], [ 116.167622845463058, 22.840420607124553 ], [ 115.640279095535064, 22.759397433633509 ], [ 115.288716595589065, 22.759397433633509 ], [ 114.981099408131797, 22.617491228151867 ], [ 114.673482220674543, 22.597206930790591 ], [ 114.475728314452681, 22.434825114846344 ], [ 113.97035722077355, 22.27225306593575 ], [ 113.882466595787037, 22.373882831180246 ], [ 113.706685345805056, 22.739134119950073 ], [ 113.530904095832057, 22.820169330108282 ], [ 113.574849408329797, 22.617491228151867 ], [ 113.574849408329797, 22.373882831180246 ], [ 113.55287675208092, 22.190896043681395 ], [ 113.245259564623666, 22.048407882874208 ], [ 112.937642377166412, 21.966921528699835 ], [ 112.608052533460295, 21.844604343644356 ], [ 112.608052533460295, 21.722182389606687 ], [ 112.212544721016542, 21.722182389606687 ], [ 111.839009564821666, 21.620084401465771 ], [ 111.443501752368931, 21.456577647581838 ], [ 110.938130658689815, 21.436126370995815 ], [ 110.586568158743788, 21.25193615329869 ], [ 110.586568158743788, 20.964960332136723 ], [ 110.454732221259547, 20.954700953494829 ], [ 110.267964643166593, 21.005990805519097 ], [ 110.191060346300048, 20.92391859734834 ], [ 110.333882611904244, 20.841801415476937 ], [ 110.399800580641866, 20.749366007713906 ], [ 110.487691205628366, 20.615748447924613 ], [ 110.498677533757302, 20.440840860404279 ], [ 110.432759565010684, 20.317256645429296 ], [ 110.333882611904244, 20.265734041489878 ], [ 110.344868940024185, 20.100746889914028 ], [ 110.586568158743788, 20.069792386625355 ], [ 110.652486127481438, 20.16263753185725 ], [ 110.773335736845738, 20.069792386625355 ], [ 110.905171674320982, 20.028510210752088 ], [ 111.026021283685296, 19.780590049560214 ], [ 111.026021283685296, 19.646138365503358 ], [ 110.850240033703301, 19.532283482107793 ], [ 110.751363080596846, 19.418348280755765 ], [ 110.641499799361483, 19.273224302442834 ], [ 110.586568158743788, 19.096829456184111 ], [ 110.575581830623861, 18.961812202714007 ], [ 110.509663861877243, 18.74347658552524 ], [ 110.410786908770788, 18.61858627427052 ], [ 110.256978315037685, 18.64981747711586 ], [ 110.158101361931216, 18.556106667850262 ], [ 110.015279096327049, 18.399807698983597 ], [ 109.872456830713872, 18.410232058310623 ], [ 109.685689252620918, 18.32681953438949 ], [ 109.608784955754359, 18.212061637087999 ], [ 109.411031049532468, 18.295529454338343 ], [ 109.213277143310606, 18.347676444291785 ], [ 108.960591596471033, 18.378957087797012 ], [ 108.773824018369112, 18.4519231800173 ], [ 108.663960737133735, 18.545691173948711 ], [ 108.609029096516053, 18.733072577948949 ], [ 108.609029096516053, 18.868274590260967 ], [ 108.598042768396112, 19.086447412871561 ], [ 108.598042768396112, 19.20061401953167 ], [ 108.663960737133735, 19.335436093516947 ], [ 108.762837690249171, 19.407986566080936 ], [ 108.828755658986793, 19.490861772087186 ], [ 108.960591596471033, 19.573694571558136 ], [ 109.092427533955288, 19.635791250818272 ], [ 109.180318158941802, 19.697863927579721 ], [ 109.147359174572983, 19.811601284354193 ], [ 109.268208783928287, 19.925257362178545 ], [ 109.422017377652438, 19.894268332997424 ], [ 109.509908002638937, 19.883937308082132 ], [ 109.542866987016737, 19.976892241434435 ], [ 109.641743940123177, 20.007865054545171 ], [ 109.75160722135854, 20.007865054545171 ], [ 109.806538861976222, 19.987217189257041 ], [ 109.927388471331554, 19.997541460390899 ], [ 110.015279096327049, 19.997541460390899 ], [ 110.136128705682353, 20.028510210752088 ], [ 110.158101361931216, 20.028510210752088 ], [ 110.224019330668852, 20.043992298674244 ], [ 110.284444135355486, 20.064632708395511 ], [ 110.311909955664333, 20.085270402647698 ], [ 110.300923627535411, 20.255427466038302 ], [ 110.229512494737818, 20.265734041489878 ], [ 110.185567182240078, 20.250273921713497 ], [ 110.125142377562412, 20.250273921713497 ], [ 110.075703901004701, 20.276039932437385 ], [ 110.02077226038702, 20.281192621132117 ], [ 109.954854291649383, 20.255427466038302 ], [ 109.93288163540052, 20.250273921713497 ], [ 109.927388471340549, 20.322407963245116 ], [ 109.888936322902779, 20.363612327975886 ], [ 109.88344315884278, 20.399657127782586 ], [ 109.905415815091672, 20.435693496662331 ], [ 109.905415815091672, 20.46657509320649 ], [ 109.855977338533961, 20.492305012885222 ], [ 109.817525190105187, 20.528319645889862 ], [ 109.817525190105187, 20.564325804184978 ], [ 109.806538861976222, 20.615748447924613 ], [ 109.74611405729857, 20.620889758312906 ], [ 109.751607221367536, 20.682571932493875 ], [ 109.779073041667417, 20.708265446074417 ], [ 109.735127729178629, 20.759639404028231 ], [ 109.696675580749854, 20.836667601630065 ], [ 109.652730268252114, 20.91878758957705 ], [ 109.696675580749854, 21.021374326042647 ], [ 109.674702924500977, 21.103392941366927 ], [ 109.691182416680888, 21.154631587499058 ], [ 109.768086713547447, 21.221215323000568 ], [ 109.762593549487477, 21.344060185019362 ], [ 109.894429486971717, 21.359408571858232 ], [ 109.899922651031687, 21.451465097291358 ], [ 109.779073041667417, 21.466802210240022 ], [ 109.680196088560947, 21.477026055442671 ], [ 109.636250776063207, 21.517914256187591 ], [ 109.652730268252114, 21.589440921930013 ], [ 109.5648396432656, 21.548572859981959 ], [ 109.575825971385541, 21.487249182913747 ], [ 109.086934369895317, 22.160374997162315 ], [ 108.735371869949319, 22.789786767184189 ], [ 108.273946088758947, 22.992208958072368 ], [ 107.834492963826435, 22.992208958072368 ], [ 107.263203901400672, 22.891035607223586 ], [ 106.88966874520581, 22.424669923772942 ], [ 105.79103593286105, 21.73238820925803 ], [ 105.263692182933056, 20.831533612702746 ], [ 103.330098433203062, 20.3378608874192 ], [ 101.396504683473069, 20.007865054545171 ], [ 99.638692183716074, 19.842606473598256 ], [ 98.496114058882554, 19.842606473598256 ], [ 97.441426559026567, 20.3378608874192 ], [ 96.826192184112045, 20.913656406162229 ], [ 95.947285934229086, 22.384041733779341 ], [ 96.38673905917058, 23.758632554721416 ], [ 97.529317184013067, 25.277912821971643 ], [ 98.496114058882554, 26.385405527402845 ], [ 98.847676558828567, 27.793826574272394 ], [ 98.320332808900574, 28.568536765818568 ], [ 97.001973434085073, 28.645698002038685 ], [ 95.771504684256072, 28.181883215851133 ], [ 94.892598434382066, 27.793826574272394 ], [ 94.101582809485578, 27.482379608611822 ], [ 93.222676559611571, 27.404379614471654 ], [ 92.519551559710564, 27.560324406508233 ], [ 91.640645309836557, 28.104383730468619 ], [ 90.498067184994056, 28.876840989058827 ], [ 89.355489060150688, 28.876840989058827 ], [ 88.300801560297373, 28.799850211252743 ], [ 87.246114060444086, 28.799850211252743 ], [ 86.103535935603375, 29.107470854294689 ], [ 85.400410935701473, 29.490706677186431 ], [ 85.092793748246919, 29.948682226925936 ], [ 85.268574998221723, 30.290787182869586 ], [ 85.048848435752788, 30.707299914661036 ], [ 85.048848435752788, 31.197232612763361 ], [ 84.785176560789665, 31.722029304391953 ], [ 85.048848435751879, 32.364587962717849 ], [ 84.949971482640038, 33.067083861941875 ], [ 85.125752732615737, 34.49155538750064 ], [ 84.785176560788784, 35.901004287887737 ], [ 84.202901170244886, 36.838685753184599 ], [ 84.433614060837385, 37.329486645234937 ], [ 85.367451951332669, 37.660716891162721 ], [ 86.564961716791046, 37.80842276586116 ], [ 87.432881638545112, 37.78237843812434 ], [ 88.619405075879953, 37.96449582365085 ], [ 89.750996872597113, 38.327378187614237 ], [ 90.190449997536817, 38.516738276573811 ], [ 90.629903122478325, 38.705601568972043 ], [ 91.289082809881563, 39.047714180651461 ], [ 93.189717575242767, 39.591662728753967 ], [ 95.101338668723884, 40.366161047990261 ], [ 96.134053512331008, 41.015910618401989 ], [ 96.595479293521379, 41.815077187633726 ], [ 95.386983199941241, 44.184907656289354 ], [ 95.584737106163104, 45.632041393114704 ], [ 96.210957809197566, 46.174833799615669 ], [ 96.683369918507879, 46.982824558982522 ], [ 96.320821090432958, 47.911505501379736 ], [ 95.848408981122645, 48.613614631080281 ], [ 94.475117965689435, 49.769509213953228 ], [ 93.013936325269754, 50.137080946256731 ], [ 92.420674606604123, 50.536776782912987 ], [ 91.706563278574194, 50.711021914378222 ], [ 88.179951950941145, 56.57971749358061 ], [ 88.125020310306397, 56.691495522155925 ] ] ] } } 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /slides/1_Introduction.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "f1655b27", 6 | "metadata": { 7 | "slideshow": { 8 | "slide_type": "slide" 9 | } 10 | }, 11 | "source": [ 12 | "## Creating Beautiful Geospatial Data Visualisations with Python\n", 13 | "\n", 14 | "### By Dr. Adam Symington (PythonMaps)" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "id": "902c8ef5", 20 | "metadata": { 21 | "slideshow": { 22 | "slide_type": "-" 23 | } 24 | }, 25 | "source": [ 26 | "![alt text](../resources/assets/shapping_lanes_dark.png \"Title\")" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "id": "8676dab9", 32 | "metadata": { 33 | "slideshow": { 34 | "slide_type": "slide" 35 | } 36 | }, 37 | "source": [ 38 | "![alt text](../resources/assets/past.png \"Title\")" 39 | ] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "id": "cb60a0be", 44 | "metadata": { 45 | "slideshow": { 46 | "slide_type": "slide" 47 | } 48 | }, 49 | "source": [ 50 | "![alt text](../resources/assets/sts.png \"Title\")" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "id": "ed48ff2a", 56 | "metadata": { 57 | "slideshow": { 58 | "slide_type": "slide" 59 | } 60 | }, 61 | "source": [ 62 | "![alt text](../resources/assets/network.png \"Title\")" 63 | ] 64 | }, 65 | { 66 | "cell_type": "markdown", 67 | "id": "bb096105", 68 | "metadata": { 69 | "slideshow": { 70 | "slide_type": "slide" 71 | } 72 | }, 73 | "source": [ 74 | "![alt text](../resources/assets/black_sea.jpg \"Title\")" 75 | ] 76 | }, 77 | { 78 | "cell_type": "markdown", 79 | "id": "9a8f9b0b", 80 | "metadata": { 81 | "slideshow": { 82 | "slide_type": "slide" 83 | } 84 | }, 85 | "source": [ 86 | "## Download Tutorial Materials\n", 87 | "\n", 88 | "This GitHub repository is all that is needed in terms of tutorial content. The simplest solution is to download the material using this link:\n", 89 | "\n", 90 | "https://github.com/symmy596/PythonMaps-Scipy-2022/archive/refs/heads/master.zip\n", 91 | "\n", 92 | "If you are familiar with Git, you can also clone this repository with:\n", 93 | "\n", 94 | "```\n", 95 | "$ git clone https://github.com/symmy596/PythonMaps-Scipy-2022.git\n", 96 | "```\n", 97 | "\n", 98 | "It will create a new folder named `PythonMaps-Scipy-2022` with all the content you will need.\n", 99 | "\n", 100 | "There are a number of datasets required for these tutorials. These will need to all be downloaded prior to the tutorial and placed in the resources folder." 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "id": "779c0133", 106 | "metadata": { 107 | "slideshow": { 108 | "slide_type": "slide" 109 | } 110 | }, 111 | "source": [ 112 | "## Required Data Sources\n", 113 | "\n", 114 | "#### Tutorial 1 Points and Lines\n", 115 | "\n", 116 | "- [World Port Index (WPI)](https://msi.nga.mil/Publications/WPI)\n", 117 | "- [Open Flights](https://openflights.org/data.html)\n", 118 | "\n", 119 | "#### Tutorial 2 Polygons\n", 120 | "\n", 121 | "- [Natural Earth](https://www.naturalearthdata.com/)\n", 122 | "\n", 123 | "#### Tutorial 3 Rasters\n", 124 | "\n", 125 | "- [Forests](https://globalmaps.github.io/ptc.html)\n", 126 | "- [Surface Temperature](https://neo.gsfc.nasa.gov/view.php?datasetId=MOD_LSTD_M&year=2021)\n", 127 | "- [NASA](https://neo.gsfc.nasa.gov/)\n", 128 | "\n", 129 | "#### Tutorial 4 Rasters and Shapes\n", 130 | "\n", 131 | "- [Topography](https://www.ngdc.noaa.gov/mgg/global/relief/ETOPO1/data/bedrock/grid_registered/georeferenced_tiff/)\n", 132 | "- [River Basins](https://www.fao.org/fishery/static/geonetwork/d47ba28e-31be-470d-81cf-ad3d5594fafd/data/)\n" 133 | ] 134 | }, 135 | { 136 | "cell_type": "markdown", 137 | "id": "c051c38e", 138 | "metadata": { 139 | "slideshow": { 140 | "slide_type": "slide" 141 | } 142 | }, 143 | "source": [ 144 | "### Libraries\n", 145 | "\n", 146 | "The following libraries are required to run the workshop\n", 147 | "\n", 148 | "- geopandas==0.10.2\n", 149 | "- pandas==1.4.2\n", 150 | "- numpy==1.21.5\n", 151 | "- shapely==1.8.0\n", 152 | "- matplotlib==3.5.1\n", 153 | "- cartopy==0.20.2\n", 154 | "- rasterio==1.2.10\n", 155 | "- rioxarray==0.11.1" 156 | ] 157 | }, 158 | { 159 | "cell_type": "markdown", 160 | "id": "13d43ccd", 161 | "metadata": { 162 | "slideshow": { 163 | "slide_type": "slide" 164 | } 165 | }, 166 | "source": [ 167 | "#### Visualising Points and Lines\n", 168 | "\n", 169 | "The first part of this task will involve reading, manipulating, and plotting point data and the second will involve the creation linestrings from points. There will be a brief introduction on the task at hand and a run through of the tutorial as well as a brief discussion around the finer points of data visualisation. \n", 170 | "\n", 171 | "- Attendees will use the world port index to generate a map showing the locations of the world’s ports. \n", 172 | "- In the second half, attendees will use the locations of the world’s airports and data on the number of flights between each airport to generate a series of linestrings representing flightpaths and plot this data to show the worlds flight paths.\n", 173 | "\n", 174 | "##### Learning Outcomes\n", 175 | "- Understand how to read and manipulate point/line data as well as generate points and lines from latitude and longitude values. \n", 176 | "- Understand how to plot point data with Matplotlib.\n", 177 | "- Understand how to generate linestrings from points using Shapely.\n", 178 | "- Understand how to plot line data with GeoPandas.\n", 179 | "- Understand how to reproject shape data using GeoPandas and Cartopy." 180 | ] 181 | }, 182 | { 183 | "cell_type": "markdown", 184 | "id": "cbebc2e5", 185 | "metadata": { 186 | "slideshow": { 187 | "slide_type": "slide" 188 | } 189 | }, 190 | "source": [ 191 | "#### Visualising Polygons\n", 192 | "\n", 193 | "Following a brief introduction, attendees will be tasked with creating visualisations using polygons and multipolygons. Attendees will use the Natural Earth dataset to generate different visualisations depending on which polygons take their fancy. An example will be provided showing how to overlay the worlds time zones onto a standard world map. \n", 194 | "\n", 195 | "##### Learning outcomes:\n", 196 | "- Understand how to read and manipulate polygon and multipolygon data as well as generate polygons and multipolygons from latitude and longitude values.\n", 197 | "- Understand how plot polygons and multipolygons using GeoPandas.\n", 198 | "- Understand how to reproject polygons and multipolygons using GeoPandas and Cartopy." 199 | ] 200 | }, 201 | { 202 | "cell_type": "markdown", 203 | "id": "9f5e83f4", 204 | "metadata": { 205 | "slideshow": { 206 | "slide_type": "slide" 207 | } 208 | }, 209 | "source": [ 210 | "#### Visualising Rasters\n", 211 | "\n", 212 | "There will be a short introduction and then attendees will be tasked with creating visualisations using raster files. There are several open-source raster datasets available through NEO (NASA earth observations) and attendees will be encouraged to use whichever dataset takes their fancy. An example will be provided and discussed outlining how to plot the world’s population density. \n", 213 | "\n", 214 | "##### Learning outcomes:\n", 215 | "- Understand how to read and manipulate raster data with Rasterio and rioxarray. \n", 216 | "- Understand how to plot raster data with Rasterio and Matplotlib\n", 217 | "- Understand how to reproject raster data with rioxarray. " 218 | ] 219 | }, 220 | { 221 | "cell_type": "markdown", 222 | "id": "dd12396e", 223 | "metadata": { 224 | "slideshow": { 225 | "slide_type": "slide" 226 | } 227 | }, 228 | "source": [ 229 | "#### Combing shapes with rasters\n", 230 | "\n", 231 | "This section will outline how to overlay shape data like lines or polygons onto raster data like satellite imagery and how to use polygons to isolate specific parts of a raster. For example, use a polygon representing the borders of a country to isolate the data for that country in the raster image.\n", 232 | "\n", 233 | "##### Learning Outcomes:\n", 234 | "- Understanding how to use geospatial reference systems to ensure that the shape data is overlaid on the raster data in the correct location.\n", 235 | "- Understanding how to use rioxarray to clip a raster according to the outline of a polygon." 236 | ] 237 | } 238 | ], 239 | "metadata": { 240 | "celltoolbar": "Slideshow", 241 | "kernelspec": { 242 | "display_name": "Python 3 (ipykernel)", 243 | "language": "python", 244 | "name": "python3" 245 | }, 246 | "language_info": { 247 | "codemirror_mode": { 248 | "name": "ipython", 249 | "version": 3 250 | }, 251 | "file_extension": ".py", 252 | "mimetype": "text/x-python", 253 | "name": "python", 254 | "nbconvert_exporter": "python", 255 | "pygments_lexer": "ipython3", 256 | "version": "3.9.13" 257 | } 258 | }, 259 | "nbformat": 4, 260 | "nbformat_minor": 5 261 | } 262 | -------------------------------------------------------------------------------- /slides/7_conclusions.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "deedf3cd", 6 | "metadata": { 7 | "slideshow": { 8 | "slide_type": "slide" 9 | } 10 | }, 11 | "source": [ 12 | "### Points\n", 13 | "\n", 14 | "- Read Point data\n", 15 | "- Generate Point data\n", 16 | "- Plot Point data\n", 17 | "- Reproject Point data\n", 18 | "- Customise Point plots\n", 19 | "\n", 20 | "![alt text](../resources/assets/co2_emissions.png \"Title\")" 21 | ] 22 | }, 23 | { 24 | "cell_type": "markdown", 25 | "id": "27239b99", 26 | "metadata": { 27 | "slideshow": { 28 | "slide_type": "slide" 29 | } 30 | }, 31 | "source": [ 32 | "### Lines\n", 33 | "\n", 34 | "- Generate LineStrings from Points\n", 35 | "- Plot LineStrings data\n", 36 | "- Reproject LineStrings\n", 37 | "- Customise LineStrings\n", 38 | "\n", 39 | "![alt text](../resources/assets/undersea_cables_dark.png \"Title\")" 40 | ] 41 | }, 42 | { 43 | "cell_type": "markdown", 44 | "id": "699e56bb", 45 | "metadata": { 46 | "slideshow": { 47 | "slide_type": "slide" 48 | } 49 | }, 50 | "source": [ 51 | "### Polygons\n", 52 | "\n", 53 | "- Plot Polygons and MultiPolygons\n", 54 | "- Manipulate Polygons\n", 55 | "- Reproject Polygons\n", 56 | "- Customise Polygons\n", 57 | "\n", 58 | "![alt text](../resources/assets/eez_dark.png \"Title\")" 59 | ] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "id": "b2d71761", 64 | "metadata": { 65 | "slideshow": { 66 | "slide_type": "slide" 67 | } 68 | }, 69 | "source": [ 70 | "### Rasters\n", 71 | "\n", 72 | "- Read raster data\n", 73 | "- Plot raster data\n", 74 | "- Manipulate colourmaps\n", 75 | "- Reproject raster data\n", 76 | "- Clip raster data\n", 77 | "\n", 78 | "![alt text](../resources/assets/pakistan.png \"Title\")" 79 | ] 80 | }, 81 | { 82 | "cell_type": "markdown", 83 | "id": "8a094ff5", 84 | "metadata": { 85 | "slideshow": { 86 | "slide_type": "slide" 87 | } 88 | }, 89 | "source": [ 90 | "### Combinations\n", 91 | "\n", 92 | "- Combine raster data and shape data\n", 93 | "\n", 94 | "![alt text](../resources/assets/sl_air.png \"Title\")" 95 | ] 96 | } 97 | ], 98 | "metadata": { 99 | "celltoolbar": "Slideshow", 100 | "kernelspec": { 101 | "display_name": "Python 3 (ipykernel)", 102 | "language": "python", 103 | "name": "python3" 104 | }, 105 | "language_info": { 106 | "codemirror_mode": { 107 | "name": "ipython", 108 | "version": 3 109 | }, 110 | "file_extension": ".py", 111 | "mimetype": "text/x-python", 112 | "name": "python", 113 | "nbconvert_exporter": "python", 114 | "pygments_lexer": "ipython3", 115 | "version": "3.8.13" 116 | } 117 | }, 118 | "nbformat": 4, 119 | "nbformat_minor": 5 120 | } 121 | -------------------------------------------------------------------------------- /slides/custom.css: -------------------------------------------------------------------------------- 1 | /*Some css fixes to use night theme with IPython slides*/ 2 | body { 3 | background-color: #111111; 4 | } 5 | .reveal p { 6 | color: #FCF6F5FF; 7 | } 8 | .reveal ul, ol { 9 | color: #FCF6F5FF; 10 | } 11 | div.output_area pre { 12 | color: #FCF6F5FF; 13 | } 14 | div.output_stderr { 15 | background: #FCF6F5FF; 16 | } 17 | .reveal table th, .reveal table td { 18 | color: #FCF6F5FF; 19 | } -------------------------------------------------------------------------------- /slides/slides_reveal.tpl: -------------------------------------------------------------------------------- 1 | {%- extends 'basic.tpl' -%} 2 | {% from 'mathjax.tpl' import mathjax %} 3 | 4 | {%- block any_cell scoped -%} 5 | {%- if cell.metadata.get('slide_start', False) -%} 6 |
7 | {%- endif -%} 8 | {%- if cell.metadata.get('subslide_start', False) -%} 9 |
10 | {%- endif -%} 11 | {%- if cell.metadata.get('fragment_start', False) -%} 12 |
13 | {%- endif -%} 14 | 15 | {%- if cell.metadata.slide_type == 'notes' -%} 16 | 19 | {%- elif cell.metadata.slide_type == 'skip' -%} 20 | {%- else -%} 21 | {{ super() }} 22 | {%- endif -%} 23 | 24 | {%- if cell.metadata.get('fragment_end', False) -%} 25 |
26 | {%- endif -%} 27 | {%- if cell.metadata.get('subslide_end', False) -%} 28 |
29 | {%- endif -%} 30 | {%- if cell.metadata.get('slide_end', False) -%} 31 |
32 | {%- endif -%} 33 | 34 | {%- endblock any_cell -%} 35 | 36 | {% block header %} 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | {% set nb_title = nb.metadata.get('title', '') or resources['metadata']['name'] %} 48 | {{nb_title}} slides 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 68 | 69 | 72 | 73 | 74 | {{ mathjax() }} 75 | 76 | 77 | 78 | 79 | {% for css in resources.inlining.css -%} 80 | 83 | {% endfor %} 84 | 85 | 201 | 202 | 203 | 204 | 205 | 206 | {% endblock header%} 207 | 208 | 209 | {% block body %} 210 | {% block pre_slides %} 211 | 212 | {% endblock pre_slides %} 213 | 214 |
215 |
216 | {{ super() }} 217 |
218 |
219 | {% block post_slides %} 220 | 285 | 286 | 287 | {% endblock post_slides %} 288 | {% endblock body %} 289 | 290 | {% block footer %} 291 | 292 | {% endblock footer %} 293 | -------------------------------------------------------------------------------- /slides/topography_basins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/symmy596/PythonMaps-Scipy-2022/be5337119ac9be3025a05e7f0ac4c52659522c29/slides/topography_basins.png --------------------------------------------------------------------------------