diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..362c7b8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +# directories +env/* +*.egg-info/ +.ipynb_checkpoints +*/.ipynb_checkpoints/* +__pycache__/ +analysis/regions/* + +# file types to ignore +#*.ipynb +*.aux.xml + +# Remove things in testing results dir +testing/results/*.tif +testing/results/*.shp +testing/results/*.dbf +testing/results/*.shx +testing/results/*.prj +testing/results/*.cpg +testing/results/*.csv +testing/results/eligibility_plots diff --git a/Examples/00_basic_workflow.ipynb b/Examples/00_basic_workflow.ipynb new file mode 100644 index 0000000..a0d2224 --- /dev/null +++ b/Examples/00_basic_workflow.ipynb @@ -0,0 +1,299 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Objective:\n", + "\n", + "1. Determine land eligibility for photovoltaic (PV) modules in the Aachen administration region considering that...\n", + " 1. PV modules should not cover agricultural areas (because people need to eat)\n", + " 2. PV modules should not be within 200 meters of a major road way (because they may get dirty)\n", + " 3. PV modules should not be within 1000 meters of a settlement area (because they are too shiny)\n", + "\n", + "2. Save the resulting available lands to a raster (.tif) file\n", + "\n", + "\n", + "## Given that:\n", + "\n", + "1. **aachenRegion** is a path to a vector file describing the study region\n", + "2. **clcRaster** is a path to a local copy of the Corine Land Cover dataset\n", + "3. **roadways** is a path to a vector file which describes the path of all roadways in the study area\n", + " - Each feature in the roadways vector also has attribute named 'type' distinguishing the class of the that specific route (for example: motorway, primary, secondary, residential, service, ect...)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Import GLAES\n", + "from glaes import ExclusionCalculator" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1. An *ExclusionCalculator* object is initialized\n", + "\n", + "The Aachen region will be the study area\n", + "\n", + "The [EPSG:3035](http://spatialreference.org/ref/epsg/etrs89-etrs-laea/) spatial reference system is used, since it describes relational distances in meters over the entire study area\n", + "\n", + "An inherent resolution of 100 x 100 meters is chosen as this is small enough to capture small details, but not so large as to require too many resources\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Initialize ExclusionCalculator object\n", + "ec = ExclusionCalculator(aachenRegion, srs=3035, pixelSize=100)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Visualize availability \n", + "\n", + "The current availability is visualized using the 'draw' command:\n", + "\n", + "* Since the ExclusionCalculator was just initialized, all areas are currently available (shown as blue)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Visualize avilability\n", + "ec.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2. Exclusion A\n", + "\n", + "All agricultural areas are excluded\n", + "\n", + "* Integer values 12-22 found in the CLC dataset indicate that the associated pixel is primarily used for agricultural purposes\n", + "* Excluded areas are shown in red" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nrkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Apply exclusion\n", + "ec.excludeRasterType(clcRaster, value=(12,22))\n", + "\n", + "# Visualize\n", + "ec.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3. Exclusion B\n", + "\n", + "1 km around settlement areas are now excluded on top of the agricultural exclusions\n", + "\n", + "* Integer values 1 and 2 found in the CLC dataset indicate that the associated pixel is primarily composed of \"urban fabric\"" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nJYal/wAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Apply exclusion\n", + "ec.excludeRasterType(clcRaster, value=(1,2), buffer=1000)\n", + "\n", + "# Visualize\n", + "ec.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3. Exclusion C\n", + "\n", + "200 meters from all major roadways are finally excluded on top of the previous exclusions\n", + "\n", + "* Only major road ways are desired, not the smaller and less common roads\n", + "* This is interpreted as roadways which are designated as 'motorway', 'primary', or 'trunk'\n", + " - An SQL-like where-statement is used to select only these features" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Apply Exclusion\n", + "whereStatement = \"type='motorway' OR type='primary' OR type='trunk'\"\n", + "ec.excludeVectorType(roadways, where=whereStatement, buffer=200)\n", + "\n", + "# Visualize\n", + "ec.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4. Save result to file" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ec.save(\"aachens_best_pv_spots.tif\", overwrite=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "# Alternative meathod: Using Prior datasets\n", + "\n", + "Since Aachen is in Europe, an *almost* equivalent analysis to the one above could be evaluated using the Prior datasets.\n", + "This has the advantage that the evaluator (you!) does not need to have a copy of the various datasets used (except, of course, the Prior datasets)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nIAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ec_p = ExclusionCalculator(aachenRegion, srs=3035, pixelSize=100)\n", + "\n", + "ec_p.excludePrior(\"agriculture_proximity\", value=0)\n", + "ec_p.excludePrior(\"settlement_proximity\", value=(None,1000))\n", + "ec_p.excludePrior(\"roads_main_proximity\", value=(None,200))\n", + " \n", + "ec_p.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.4.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..a95828c --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 David Severin Ryberg (FZJ IEK-3), Jochen Linßen (FZJ IEK-3), Martin Robinius (FZJ IEK-3), Detlef Stolten (FZJ IEK-3) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 4c395fe..a3eab1d 100644 --- a/README.md +++ b/README.md @@ -1 +1,128 @@ -glaes-public +Forschungszentrum Juelich Logo + +# Geospatial Land Availability for Energy Systems (GLAES) + +GLAES is a framework for conducting land eligibility analyses and is designed to easily incorporate disparate geospatial information from a variety of sources into a unified solution. +Currently, the main purpose of GLAES is performing land eligibility (LE) analyses which, in short, are used to determine which areas within a region are deemed 'eligible' for some purpose (such as placing a wind turbine). +Although initially intended to operate in the context of distributed renewable energy systems, such as onshore wind and open-field solar parks, the work flow of GLAES is applicable to any context where a constrained indication of land is desired. +Except in the context of Europe, GLAES only provides a framework for conducting these types of analyses, and so the underlying data sources which are used will need to be provided. +Fortunately, GLAES is built on top of the Geospatial Data Abstraction Library (GDAL) and so is capable of incorporating information from any geospatial dataset which GDAL can interpret; including common GIS formats such as .shp and .tif files. +In this way, GLAES affords a high degree of flexibility such that very specific considerations, while still maintaining a consistent application method between studies. + + +## Features +* Standardized approach to land eligibility analyses +* Applicable in any geographic region and at any resolution +* Can flexibly incorporate most geospatial datasets: including the common .shp and .tif formats +* Simple visualization and storage of results as common image or raster dataset +* Simple integration of results into other analysis (via numpy array) + + +## European Priors + +A number of precomputed (Prior) datasets which constitute the most commonly considered criteria used for LE analyses have been constructed for the European context. +These datasets are formatted to be used directly with the GLAES framework and, in doing so, drastically reduce the time requirements, data management, and overall complexity of conducting these analyses. +The Priors also have the added benefit of providing a common data source to all LE researchers, which further promotes consistency between independent LE evaluations. +Most important, usage of these datasets is just as easy as applying exclusions from other geospatial datasources. +Although the Prior datasets are not included when cloning this repository, they can be downloaded and installed using the process detailed in the "Installation" section. + +--- +## Example + +### A simple LE work flow using GLAES would go as follows: +Objective: + +* Determine land eligibility for photovoltaic (PV) modules in the Aachen administration region considering that... + 1. PV modules should not cover agricultural areas (because people need to eat) + 2. PV modules should not be within 200 meters of a major road way (because they may get dirty) + 3. PV modules should not be within 1000 meters of a settlement area (because they are too shiny) + + +```python + ec = ExclusionCalculator(aachenRegion, srs=3035, pixelSize=100) + + ec.excludePrior("agriculture_proximity", value=0) + ec.excludePrior("settlement_proximity", value=(None,1000)) + ec.excludePrior("roads_main_proximity", value=(None,200)) + + ec.draw() +``` + +Final eligibility result + +### More Examples +[Basic Workflow](Examples/00_basic_workflow.ipynb) + +--- +## Installation + +Be sure the GeoKit package is installed + +Clone a local copy of the repository to your computer + + $ git clone https://github.com/FZJ-IEK3-VSA/glaes.git + +Then install GLAES via pip as follow + + $ cd /glaes + $ pip install -e . + +If you would like to install the Prior datasets: + * For now, contact the main author of this package for a download link (s.ryberg@fz-juelich.de) + * Download the zipped file + * Unzip the files directly into the glaes->data->priors directory + * For instance... + + $ cp /glaes/data/priors + $ unzip priors.zip + +--- + +## Associated papers + +If you would like to see a **much** more detailed discussion on land eligibility analysis and see why a framework such as GLAES is not only helpful, but a requirement, please see: + +The Background Paper + +Examples of Land Eligibility evaluation and applications: + +* [Determining the Land Eligibility of Renewable Energy Technologies with Application to European Wind Energy](link-will-go-here) + +* [Spatio-Temporal Optimization of a Future Energy System for Power-to-Hydrogen Applications in Germany](link-will-go-here) + +* [Linking the Power and Transport Sectors—Part 2: Modelling a Sector Coupling Scenario for Germany](http://www.mdpi.com/1996-1073/10/7/957/htm) + +--- +## Citation + +If you decide to use GLAES anywhere in a published work, please kindly cite us using the following + +```bibtex +@article{ryberg_land_eligibility_2017, + title={Determining the Land Eligibility of Renewable Energy Technologies with Application to European Wind Energy}, + author={David Severin Ryberg, Zena Tulemat, Martin Robinius, Detlef Stolten}, + year={2017}, +} +``` + +--- +## License + +MIT License + +Copyright (c) 2017 David Severin Ryberg (FZJ IEK-3), Jochen Linßen (FZJ IEK-3), Martin Robinius (FZJ IEK-3), Detlef Stolten (FZJ IEK-3) + +You should have received a copy of the MIT License along with this program. +If not, see + +## About Us +Abteilung VSA + +We are the [Process and Systems Analysis](http://www.fz-juelich.de/iek/iek-3/EN/Forschung/_Process-and-System-Analysis/_node.html) department at the [Institute of Energy and Climate Research: Electrochemical Process Engineering (IEK-3)](http://www.fz-juelich.de/iek/iek-3/EN/Home/home_node.html) belonging to the Forschungszentrum Jülich. Our interdisciplinary department's research is focusing on energy-related process and systems analyses. Data searches and system simulations are used to determine energy and mass balances, as well as to evaluate performance, emissions and costs of energy systems. The results are used for performing comparative assessment studies between the various systems. Our current priorities include the development of energy strategies, in accordance with the German Federal Government’s greenhouse gas reduction targets, by designing new infrastructures for sustainable and secure energy supply chains and by conducting cost analysis studies for integrating new technologies into future energy market frameworks. + + +## Acknowledgment + +This work was supported by the Helmholtz Association under the Joint Initiative ["Energy System 2050 – A Contribution of the Research Field Energy"](https://www.helmholtz.de/en/research/energy/energy_system_2050/). + +Helmholtz Logo diff --git a/contributors.txt b/contributors.txt new file mode 100644 index 0000000..828920c --- /dev/null +++ b/contributors.txt @@ -0,0 +1,2 @@ +David Severin Ryberg +Zena Tulemat diff --git a/create_prior.py b/create_prior.py new file mode 100644 index 0000000..16a4c75 --- /dev/null +++ b/create_prior.py @@ -0,0 +1,1338 @@ +import geokit as gk +import numpy as np +from os.path import join, isdir, isfile, basename, splitext +from os import mkdir +import sys +from multiprocessing import Pool +import time +from datetime import datetime as dt +from glob import glob +from collections import namedtuple, OrderedDict +from json import dumps + +################################################################# +## DEFINE SOURCES +clcSource="/home/s.ryberg/data/zena_data/CLC/g100_clc12_V18_5_SRS_FIX.tif" +waterbodySource="/home/s.ryberg/data/COPERNICUS/20/l6_pwb_eur_20m_full01_100_fin06.tif" +urbanClustersSource="/home/s.ryberg/data/EUROSTAT/Urban_Clusters/URB_CLST_2011.tif" +airportsSource = "/home/s.ryberg/data/EUROSTAT/Airports/AIRP_PT_2013.shp" +osmRailwaysSource = "/home/s.ryberg/data/OSM/geofabrik/railways/","*gis.osm_railways*.shp" +osmRoadsSource = "/home/s.ryberg/data/OSM/geofabrik/roads/","*gis.osm_roads*.shp" +osmPowerlinesSource = "/home/s.ryberg/data/OSM/osm2shp/power_ln/power_ln_europe_clip.shp" +riverSegmentsSource = "/home/s.ryberg/data/EUROSTAT/rivers_and_catchments/data/","*Riversegments.shp" +hydroLakesSource = "/home/s.ryberg/data/WWF/HydroLAKES_polys_v10.shp" +wdpaSource = "/home/s.ryberg/data/protected/WDPA/WDPA_Apr2017-shapefile/clipped","*.shp" +demSource = "/home/s.ryberg/data/zena_data/DEM/eudem_dem_4258_europe.tif" +gwaSource = "/home/s.ryberg/data/global_wind_atlas/WS_%03dm_global_wgs84_mean_trimmed.tif" +dniSource = "/home/s.ryberg/data/global_solar_atlas/World_DNI_GISdata_LTAy_DailySum_GlobalSolarAtlas_GEOTIFF/DNI.tif" +ghiSource = "/home/s.ryberg/data/global_solar_atlas/World_GHI_GISdata_LTAy_DailySum_GlobalSolarAtlas_GEOTIFF/GHI.tif" + +################################################################## +## DEFINE EDGES +EVALUATION_VALUES = { + "woodland_mixed_proximity": + # Indicates distances too close to mixed-tree forests (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "woodland_coniferous_proximity": + # Indicates distances too close to coniferous forests (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "woodland_deciduous_proximity": + # Indicates distances too close to deciduous forests(m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "waterbody_proximity": + # Indicates distances too close to lakes (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "lake_proximity": + # Indicates distances too close to lakes (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "river_proximity": + # Indicates distances too close to rivers (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "ocean_proximity": + # Indicates distances too close to oceans (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000, 10000, 15000, 20000], + + "wetland_proximity": + # Indicates distances too close to wetlands (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "elevation_threshold": + # Indicates elevations above X (m) + np.linspace(-1000, 3000, 41), + + "slope_threshold": + # Indicates slopes above X (degree) + np.linspace(0, 30, 61), + + "slope_north_facing_threshold": + # Indicates north-facing slopes above X (degree) + np.linspace(-20, 20, 81), + + "power_line_proximity": + # Indicates distances too close to power-lines (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000, + 6000, 7000, 8000, 9000, 10000, 12000, 14000, 16000, 18000, 20000, 25000, 30000, 35000, 40000, 45000, 50000], + + "roads_main_proximity": + # Indicates distances too close to main roads (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2250, 2500, 2750, 3000, + 3500, 4000, 4500, 5000, 6000, 7000, 8000, 10000, 12000, 14000, 16000, 18000, 20000], + + "roads_secondary_proximity": + # Indicates distances too close to secondary roads (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2250, 2500, 2750, 3000, + 3500, 4000, 4500, 5000, 6000, 7000, 8000, 10000, 12000, 14000, 16000, 18000, 20000], + + "roads_proximity": + # Indicates distances too close to all accissible roads (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2250, 2500, 2750, 3000, + 3500, 4000, 4500, 5000, 6000, 7000, 8000, 10000, 12000, 14000, 16000, 18000, 20000], + + "railway_proximity": + # Indicates distances too close to railways (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000, + 6000, 7000, 8000, 9000, 10000, 12000, 14000, 16000, 18000, 20000], + + "settlement_urban_proximity": + # Indicates distances too close to dense settlements (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, + 2200, 2400, 2600, 2800, 3000, 3500, 4000, 4500, 5000, 5500, 6000, 7000, 8000, 9000, 10000, 15000, 20000], + + "settlement_proximity": + # Indicates distances too close to light settlements (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, + 2200, 2400, 2600, 2800, 3000, 3500, 4000, 4500, 5000, 5500, 6000, 7000, 8000, 9000, 10000, 15000, 20000], + + "industrial_proximity": + # Indicates distances too close to industrial areas (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "mining_proximity": + # Indicates distances too close to mines (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "agriculture_proximity": + # Indicates distances too close to aggriculture areas (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "airport_proximity": + # Indicates distances too close to airports (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1250, 1500, 1750, 2000, 2250, 2500, 3000, 3500, 4000, + 4500, 5000, 5500, 6000, 7000, 8000, 9000, 10000, 15000], + + "airfield_proximity": + # Indicates distances too close to airfields (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1250, 1500, 1750, 2000, 2250, 2500, 3000, 3500, 4000, + 4500, 5000, 5500, 6000, 7000, 8000, 9000, 10000, 15000], + + "protected_park_proximity": + # Indicates distances too close to protected parks (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "protected_landscape_proximity": + # Indicates distances too close to protected landscapes (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "protected_natural_monument_proximity": + # Indicates distances too close to protected natural-monuments (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "protected_reserve_proximity": + # Indicates distances too close to protected reserves (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "protected_wilderness_proximity": + # Indicates distances too close to protected wilderness (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "protected_biosphere_proximity": + # Indicates distances too close to protected biospheres (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "protected_habitat_proximity": + # Indicates distances too close to protected habitats (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "protected_bird_proximity": + # Indicates distances too close to protected bird areas (m) + [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 4000, 5000], + + "windspeed_50m_threshold": + # Indicates areas with average wind speed below X (m/s) + np.linspace(0, 20, 81), + + "windspeed_100m_threshold": + # Indicates areas with average wind speed below X (m/s) + np.linspace(0, 20, 81), + + "ghi_threshold": + # Indicates areas with average total daily irradiance below X (kWh/m2/day) + np.linspace(0, 20, 81), + + "dni_threshold": + # Indicates areas with average total daily irradiance below X (kWh/m2/day) + np.linspace(0, 20, 81), + + #"connection_distance": # Indicates distances too far from power grid (m) + # [50000, 45000, 40000, 35000, 30000, 25000, 20000, 18000, 16000, + # 14000, 12000, 11000, 10000, 9000, 8000, 7000, 6000, 5000, + # 4000, 3500, 3000, 2500, 2000, 1500, 1250, 1000, 750, + # 500, 250, 0], + + #"access_distance": # Indicates distances too far from roads (m) + # [20000, 19000, 18000, 17000, 16000, 15000, 14000, 13000, 12000, + # 11000, 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3500, + # 3000, 2500, 2000, 1500, 1250, 1000, 750, 500, 250, 0], + + } + +####################################################### +## EVALUATION FUNCTIONS +def evaluate_OCEAN(regSource, ftrID, tail): + name = "ocean_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from an ocean" + source = "CLC12" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Indicate values and create a geomoetry from the result + matrix = reg.indicateValues(clcSource, value=44, applyMask=False) > 0.5 + geom = gk.geom.convertMask(matrix, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_WETLAND(regSource, ftrID, tail): + name = "wetland_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a wetland area" + source = "CLC12" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Indicate values and create a geomoetry from the result + matrix = reg.indicateValues(clcSource, value=(35,39), applyMask=False) > 0.5 + geom = gk.geom.convertMask(matrix, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_INDUSTRIAL(regSource, ftrID, tail): + name = "industrial_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from an industrial area" + source = "CLC12" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Indicate values and create a geomoetry from the result + matrix = reg.indicateValues(clcSource, value=3, applyMask=False) > 0.5 + geom = gk.geom.convertMask(matrix, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_MINING(regSource, ftrID, tail): + name = "mining_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a mining area" + source = "CLC12" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Indicate values and create a geomoetry from the result + matrix = reg.indicateValues(clcSource, value=7, applyMask=False) > 0.5 + geom = gk.geom.convertMask(matrix, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_AGRICULTURE(regSource, ftrID, tail): + name = "agriculture_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from an agriculture area" + source = "CLC12" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Indicate values and create a geomoetry from the result + matrix = reg.indicateValues(clcSource, value=(12,22), applyMask=False) > 0.5 + geom = gk.geom.convertMask(matrix, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_AG_ARABLE(regSource, ftrID, tail): + name = "agriculture_arable_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from an arable agriculture area" + source = "CLC12" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES["agriculture_proximity"] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Indicate values and create a geomoetry from the result + matrix = reg.indicateValues(clcSource, value=(12,14), applyMask=False) > 0.5 + geom = gk.geom.convertMask(matrix, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_AG_PERMANENT(regSource, ftrID, tail): + name = "agriculture_permanent_crop_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a permanent-crop agriculture area" + source = "CLC12" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES["agriculture_proximity"] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Indicate values and create a geomoetry from the result + matrix = reg.indicateValues(clcSource, value=(15,17), applyMask=False) > 0.5 + geom = gk.geom.convertMask(matrix, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_AG_PASTURE(regSource, ftrID, tail): + name = "agriculture_pasture_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a pastural agriculture area" + source = "CLC12" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES["agriculture_proximity"] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Indicate values and create a geomoetry from the result + matrix = reg.indicateValues(clcSource, value=18, applyMask=False) > 0.5 + geom = gk.geom.convertMask(matrix, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_AG_HETEROGENEOUS(regSource, ftrID, tail): + name = "agriculture_heterogeneous_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a heterogeneous agriculture area" + source = "CLC12" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES["agriculture_proximity"] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Indicate values and create a geomoetry from the result + matrix = reg.indicateValues(clcSource, value=(19,22), applyMask=False) > 0.5 + geom = gk.geom.convertMask(matrix, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_WOODLANDS_MIXED(regSource, ftrID, tail): + name = "woodland_mixed_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a mixed-tree woodland area" + source = "CLC12" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Indicate values and create a geomoetry from the result + matrix = reg.indicateValues(clcSource, value=23, applyMask=False) > 0.5 + geom = gk.geom.convertMask(matrix, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_WOODLANDS_CONIFEROUS(regSource, ftrID, tail): + name = "woodland_coniferous_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a predominantly coniferous (needle leaved) woodland area" + source = "CLC12" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Indicate values and create a geomoetry from the result + matrix = reg.indicateValues(clcSource, value=24, applyMask=False) > 0.5 + geom = gk.geom.convertMask(matrix, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_WOODLANDS_DECIDUOUS(regSource, ftrID, tail): + name = "woodland_deciduous_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a predominantly deciduous (broad leaved) woodland area" + source = "CLC12" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Indicate values and create a geomoetry from the result + matrix = reg.indicateValues(clcSource, value=25, applyMask=False) > 0.5 + geom = gk.geom.convertMask(matrix, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_ROADS(regSource, ftrID, tail): + name = "roads_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from all accessible roadways" + source = "OSM" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm filesi + whereStmt = r"fclass LIKE '%motorway%' OR fclass LIKE '%trunk%' OR fclass LIKE '%primary%' OR fclass LIKE '%secondary%' OR fclass LIKE '%tertiary%' OR fclass = 'service' OR fclass = 'unclassified'" + geom = geomExtractor( reg.extent, osmRoadsSource, whereStmt) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_ROADS_MAIN(regSource, ftrID, tail): + name = "roads_main_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from major roadways" + source = "OSM" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + geom = geomExtractor( reg.extent, osmRoadsSource, r"fclass LIKE '%motorway%' OR fclass LIKE '%trunk%' OR fclass LIKE '%primary%'") + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_ROADS_SECONDARY(regSource, ftrID, tail): + name = "roads_secondary_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from secondary roadways" + source = "OSM" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + geom = geomExtractor( reg.extent, osmRoadsSource, r"fclass LIKE '%secondary%' OR fclass LIKE '%tertiary%'") + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_POWER_LINE(regSource, ftrID, tail): + name = "power_line_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a power line" + source = "OSM" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + geom = geomExtractor( reg.extent, osmPowerlinesSource, r"power='line'") + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_RAILWAY(regSource, ftrID, tail): + name = "railway_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a railway" + source = "OSM" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + geom = geomExtractor( reg.extent, osmRailwaysSource, r"fclass = 'rail'") + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_WATERBODY(regSource, ftrID, tail): + name = "waterbody_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from permanent water bodies" + source = "COPERNICUS HRL" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Indicate values and create a geomoetry from the result + matrix = reg.indicateValues(waterbodySource, value=1, applyMask=False, resolutionDiv=5) > 0.5 + geom = gk.geom.convertMask(matrix, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_RIVER(regSource, ftrID, tail): + name = "river_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from rivers and other running water bodies" + source = "WWF hydroBASINS" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + geom = geomExtractor( reg.extent, riverSegmentsSource) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_LAKE(regSource, ftrID, tail): + name = "lake_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from lakes and other stagnant water bodies" + source = "WWF HydroLAKES" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + geom = geomExtractor( reg.extent, hydroLakesSource) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_PARK(regSource, ftrID, tail): + name = "protected_park_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a protected park" + source = "WDPA" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + geom = geomExtractor( reg.extent, wdpaSource, where=r"DESIG_ENG LIKE '%park%' OR IUCN_CAT = 'II'") + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_LANDSCAPE(regSource, ftrID, tail): + name = "protected_landscape_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a protected landscape" + source = "WDPA" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + geom = geomExtractor( reg.extent, wdpaSource, where=r"DESIG_ENG LIKE '%landscape%' OR IUCN_CAT = 'V'") + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_MONUMENT(regSource, ftrID, tail): + name = "protected_natural_monument_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a protected natural monument" + source = "WDPA" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + geom = geomExtractor( reg.extent, wdpaSource, where=r"DESIG_ENG LIKE '%monument%' OR IUCN_CAT = 'III'") + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_RESERVE(regSource, ftrID, tail): + name = "protected_reserve_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a protected reserve" + source = "WDPA" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + geom = geomExtractor( reg.extent, wdpaSource, where=r"DESIG_ENG LIKE '%reserve%' OR IUCN_CAT = 'Ia'") + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_WILDERNESS(regSource, ftrID, tail): + name = "protected_wilderness_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a protected wilderness" + source = "WDPA" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + #geoms = geomExtractor( reg.extent, wdpaSource, where=r"DESIG_ENG LIKE '%wilderness%' OR IUCN_CAT = 'Ib'", simplify=reg.pixelSize/5) + + matrix = None + + for f in reg.extent.filterSources( join(wdpaSource[0], wdpaSource[1])): + tmp = reg.indicateFeatures(f, where=r"DESIG_ENG LIKE '%wilderness%' OR IUCN_CAT = 'Ib'", resolutionDiv=5, applyMask=False ) > 0.5 + + if matrix is None: matrix = tmp + else: np.logical_or(tmp, matrix, matrix) + + if matrix.any(): + geom = gk.geom.convertMask(matrix, reg.extent.xyXY, reg.srs) + else: + geom = None + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_BIOSPHERE(regSource, ftrID, tail): + name = "protected_biosphere_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a protected biosphere" + source = "WDPA" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + geom = geomExtractor( reg.extent, wdpaSource, where=r"DESIG_ENG LIKE '%bio%'") + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_HABITAT(regSource, ftrID, tail): + name = "protected_habitat_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a protected habitat" + source = "WDPA" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + #geoms = geomExtractor( reg.extent, wdpaSource, where=r"DESIG_ENG LIKE '%habitat%' OR IUCN_CAT = 'IV'", simplify=reg.pixelSize/5) + + matrix = None + + for f in reg.extent.filterSources( join(wdpaSource[0], wdpaSource[1])): + tmp = reg.indicateFeatures(f, where=r"DESIG_ENG LIKE '%habitat%' OR IUCN_CAT = 'IV'", resolutionDiv=5, applyMask=False ) > 0.5 + + if matrix is None: matrix = tmp + else: np.logical_or(tmp, matrix, matrix) + + if matrix.any(): + geom = gk.geom.convertMask(matrix, reg.extent.xyXY, reg.srs) + else: + geom = None + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_BIRDS(regSource, ftrID, tail): + name = "protected_bird_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from a protected bird area" + source = "WDPA" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + geom = geomExtractor( reg.extent, wdpaSource, where=r"DESIG_ENG LIKE '%bird%'") + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_URBAN(regSource, ftrID, tail): + name = "settlement_urban_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from dense-urban and city settlements" + source = "EUROSTAT" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + indicated = reg.indicateValues(urbanClustersSource, value=(5000, 2e7), applyMask=False) > 0.5 + geom = gk.geom.convertMask(indicated, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_SETTLEMENT(regSource, ftrID, tail): + name = "settlement_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from any settlement area" + source = "CLC" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)) + + # Create a geometry list from the osm files + #eurostatUrban = reg.indicateValues(urbanClustersSource, value=(5000, 2e7), applyMask=False) > 0.5 + clcUrban = reg.indicateValues(clcSource, value=(1,2), applyMask=False) > 0.5 + + geom = gk.geom.convertMask( clcUrban, bounds=reg.extent.xyXY, srs=reg.srs) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_AIRPORT(regSource, ftrID, tail): + + ###################### + ## Evaluate airports + name = "airport_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from an airport" + source = "EUROSTAT, CLC" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=max(distances)*1.25) + + ### Get airport regions + airportMask = reg.indicateValues(clcSource, value=6, applyMask=False) > 0.5 + airportGeoms = gk.geom.convertMask(airportMask, bounds=reg.extent.xyXY, srs=reg.srs) + if airportGeoms is None: airportGeoms = [] + + ### define an airport/airfield shape matcher + def airportShapes( points, minSize, defaultRadius, minDistance=2000 ): + locatedGeoms = [] + + # look for best geometry for each airport + for pt in points: + found = False + + # First look for containing geometries greater than the minimal area + containingGeoms = filter(lambda x: x.Contains(pt), airportGeoms) + for geom in containingGeoms: + if geom.Area() > minSize: + locatedGeoms.append( geom.Clone() ) + found = True + if found: continue + if found: continue + + # Next look for nearby geometries greater than the minimal area + nearbyGeoms = filter(lambda x: pt.Distance(x) <= minDistance, airportGeoms) + for geom in nearbyGeoms: + if geom.Area() > minSize: + locatedGeoms.append( geom.Clone() ) + found = True + if found: continue + if found: continue + + # if all else fails, apply a default distance + locatedGeoms.append( pt.Buffer(defaultRadius) ) + + if len(locatedGeoms)==0: return None + else: return locatedGeoms + + ### Locate airports + airportWhere = "AIRP_USE!=4 AND (AIRP_PASS=1 OR AIRP_PASS=2) AND AIRP_LAND='A'" + airportCoords = [point.Clone() for point,i in gk.vector.extractFeatures(airportsSource, reg.extent.box, where=airportWhere)] + for pt in airportCoords: pt.TransformTo(reg.srs) + + geom = airportShapes(airportCoords, minSize=1e6, defaultRadius=3000) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + + ##################### + ## Evaluate airfields + name = "airfield_proximity" + unit = "meters" + description = "Indicates pixels which are less-than or equal-to X meters from an airfield" + source = "EUROSTAT, CLC" + + output_dir = join("outputs", name) + + # Get distances + distances = EVALUATION_VALUES[name] + + ### Locate airports + airfieldWhere = "AIRP_USE!=4 AND (AIRP_PASS=0 OR AIRP_PASS=9) AND AIRP_LAND='A'" + airfieldCoords = [point.Clone() for point,i in gk.vector.extractFeatures(airportsSource, reg.extent.box, where=airfieldWhere)] + for pt in airfieldCoords: pt.TransformTo(reg.srs) + + geom = airportShapes(airfieldCoords, minSize=1e6, defaultRadius=800) + + # Get edge matrix + result = edgesByProximity(reg, geom, distances) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, distances) + +def evaluate_WINDSPEED50(regSource, ftrID, tail): + name = "windspeed_50m_threshold" + unit = "m/s" + description = "Indicates pixels in which the average windspeed (measured at 50m) is less-than or equal-to X m/s" + source = "Global Wind Atlas" + + output_dir = join("outputs", name) + + # Get distances + thresholds = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=500) + + # Create a geometry list from the osm files + result = edgesByThreshold(reg, gwaSource%50, thresholds) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, thresholds) + +def evaluate_WINDSPEED100(regSource, ftrID, tail): + name = "windspeed_100m_threshold" + unit = "m/s" + description = "Indicates pixels in which the average windspeed (measured at 100m) is less-than or equal-to X m/s" + source = "Global Wind Atlas" + + output_dir = join("outputs", name) + + # Get distances + thresholds = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=500) + + # Create a geometry list from the osm files + result = edgesByThreshold(reg, gwaSource%100, thresholds) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, thresholds) + +def evaluate_GHI(regSource, ftrID, tail): + name = "ghi_threshold" + unit = "kWh/m2/day" + description = "Indicates pixels in which the average daily global-horizontal irrandiance (GHI) is less-than or equal-to X kWh/m2/day" + source = "" + + output_dir = join("outputs", name) + + # Get distances + thresholds = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=500) + + # Create a geometry list from the osm files + result = edgesByThreshold(reg, ghiSource, thresholds) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, thresholds) + +def evaluate_DNI(regSource, ftrID, tail): + name = "dni_threshold" + unit = "kWh/m2/day" + description = "Indicates pixels in which the average daily direct-normal irrandiance (DNI) is less-than or equal-to X kWh/m2/day" + source = "" + + output_dir = join("outputs", name) + + # Get distances + thresholds = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=500) + + # Create a geometry list from the osm files + result = edgesByThreshold(reg, dniSource, thresholds) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, thresholds) + +def evaluate_ELEVATION(regSource, ftrID, tail): + name = "elevation_threshold" + unit = "meters" + description = "Indicates pixels in which the average elevation is less-than or equal-to X meters" + source = "" + + output_dir = join("outputs", name) + + # Get distances + thresholds = EVALUATION_VALUES[name] + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=500) + + # Create a geometry list from the osm files + result = edgesByThreshold(reg, demSource, thresholds) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, thresholds) + +def evaluate_SLOPE(regSource, ftrID, tail): + name = "slope_threshold" + unit = "degrees" + description = "Indicates pixels in which the average slope is less-than or equal-to X degrees" + source = "" + + output_dir = join("outputs", name) + + # Get distances + thresholds = np.array(EVALUATION_VALUES[name]) + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=500) + + # Create a geometry list from the osm files + demSourceClipped = reg.extent.clipRaster(demSource) + gradientDS = gk.raster.gradient(demSourceClipped, mode="slope", factor="latlonToM") + + result = edgesByThreshold(reg, gradientDS, np.tan(thresholds*np.pi/180)) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, thresholds) + +def evaluate_SLOPE_NORTH(regSource, ftrID, tail): + name = "slope_north_facing_threshold" + unit = "degrees" + description = "Indicates pixels in which the average slope in the northern direction is less-than or equal-to X degrees" + source = "" + + output_dir = join("outputs", name) + + # Get distances + thresholds = np.array(EVALUATION_VALUES[name]) + + # Make Region Mask + reg = gk.RegionMask.load(regSource, select=ftrID, padExtent=500) + + # Create a geometry list from the osm files + demSourceClipped = reg.extent.clipRaster(demSource) + gradientDS = gk.raster.gradient(demSourceClipped, mode="north-south", factor="latlonToM") + + result = edgesByThreshold(reg, gradientDS, np.tan(thresholds*np.pi/180)) + + # make result + writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, thresholds) + +################################################################## +## UTILITY FUNCTIONS +def edgesByProximity(reg, geom, distances): + + # make initial matrix + mat = np.ones(reg.mask.shape, dtype=np.uint8)*255 # Set all values to no data (255) + mat[reg.mask] = 254 # Set all values in the region to untouched (254) + + # Only do growing if a geometry is available + if not geom is None and len(geom)!=0: + # make grow func + def doGrow(geom, dist): + if dist > 0: + if isinstance(geom,list) or isinstance(geom, filter): + grown = [g.Buffer(dist) for g in geom] + else: + grown = geom.Buffer(dist) + else: + grown = geom + + return grown + + # Do growing + value = 0 + for dist in distances: + grown = doGrow(geom, dist) + try: + tmpSource = gk.vector.createVector(grown) # Make a temporary vector file + except Exception as e: + print(len(grown), [g.GetGeometryName() for g in grown]) + raise e + + indicated = reg.indicateFeatures(tmpSource) > 0.5 # Map onto the RegionMask + + # apply onto matrix + sel = np.logical_and(mat==254, indicated) # write onto pixels which are indicated and available + mat[sel] = value + value += 1 + + # Done! + return mat + +def edgesByThreshold(reg, source, thresholds): + # make initial matrix + mat = np.ones(reg.mask.shape, dtype=np.uint8)*255 # Set all values to no data (255) + mat[reg.mask] = 254 # Set all values in the region to untouched (254) + + # Only do growing if a geometry is available + value = 0 + for thresh in thresholds: + indicated = reg.indicateValues(source, value=(None,thresh)) > 0.5 + + # apply onto matrix + sel = np.logical_and(mat==254, indicated) # write onto pixels which are indicated and available + mat[sel] = value + value += 1 + + # Done! + return mat + +def writeEdgeFile( result, reg, ftrID, output_dir, name, tail, unit, description, source, values): + # make output + output = "%s.%s_%05d.tif"%(name,tail,ftrID) + if not isdir(output_dir): mkdir(output_dir) + + valueMap = OrderedDict() + for i in range(len(values)): valueMap["%d"%i]="<=%.2f"%values[i] + valueMap["254"]="untouched" + valueMap["255"]="noData" + + meta = OrderedDict() + meta["GLAES_PRIOR"] = "YES" + meta["DISPLAY_NAME"] = name + meta["ALTERNATE_NAME"] = "NONE" + meta["DESCRIPTION"] = description + meta["UNIT"] = unit + meta["SOURCE"] = source + meta["VALUE_MAP"] = dumps(valueMap) + + print(output) + + d = reg.createRaster(output=join(output_dir,output), data=result, overwrite=True, noDataValue=255, dtype=1, meta=meta) + +def geomExtractor( extent, source, where=None, simplify=None ): + searchGeom = extent.box + if isinstance(source,str): + searchFiles = [source,] + else: + searchFiles = list(extent.filterSources( join(source[0], source[1]) )) + + geoms = [] + for f in searchFiles: + for geom, attr in gk.vector.extractFeatures(f, searchGeom, where=where, outputSRS=extent.srs): + geoms.append( geom.Clone() ) + + if not simplify is None: + newGeoms = [g.SimplifyPreserveTopology(simplify) for g in geoms] + for g, ng in zip(geoms, newGeoms): + if "LINE" in ng.GetGeometryName(): + test = ng.Length()/g.Length() + else: + test = ng.Area()/g.Area() + + if test<0.97: + raise RuntimeError("ERROR: Simplified geometry is >3% different from the original") + elif test<0.99: + print("WARNING: simplified geometry is slightly different from the original") + + + if len(geoms) == 0: + return None + else: + return geoms + +################################################################### +## MAIN FUNCTIONALITY +if __name__== '__main__': + START= dt.now() + tail = str(int(dt.now().timestamp())) + print( "RUN ID: ", tail) + print( "TIME START: ", START) + + # Choose the function + func = globals()["evaluate_"+sys.argv[1]] + + # Choose the source + if len(sys.argv)<3: + source = join("reg","aachenShapefile.shp") + else: + source = sys.argv[2] + + # Arange workers + if len(sys.argv)<4: + doMulti = False + else: + doMulti = True + pool = Pool(int(sys.argv[3])) + + # submit jobs + res = [] + count = -1 + for g,a in gk.vector.extractFeatures(source): + count += 1 + #if count<1 : continue + #if count == 2:break + + # Do the analysis + if doMulti: + res.append(pool.apply_async(func, (source, count, tail))) + else: + func(source, count, tail) + + if doMulti: + # Check for errors + for r,i in zip(res,range(len(res))): + try: + r.get() + except Exception as e: + print("EXCEPTION AT ID: "+str(i)) + raise e + + # Wait for jobs to finish + pool.close() + pool.join() + + # finished! + END= dt.now() + print( "TIME END: ", END) + print( "CALC TIME: ", (END-START)) + diff --git a/data/.gitignore b/data/.gitignore new file mode 100644 index 0000000..6f66c74 --- /dev/null +++ b/data/.gitignore @@ -0,0 +1 @@ +*.zip \ No newline at end of file diff --git a/glaes/__init__.py b/glaes/__init__.py new file mode 100644 index 0000000..df748ae --- /dev/null +++ b/glaes/__init__.py @@ -0,0 +1,4 @@ +from .core.priors import Priors +from .core.ExclusionCalculator import ExclusionCalculator +#from .core.WeightedCriterionCalculator import WeightedCriterionCalculator +from .predefinedExclusions import ExclusionSets \ No newline at end of file diff --git a/glaes/core/ExclusionCalculator.py b/glaes/core/ExclusionCalculator.py new file mode 100644 index 0000000..4d7767c --- /dev/null +++ b/glaes/core/ExclusionCalculator.py @@ -0,0 +1,408 @@ +import geokit as gk +from os.path import join, dirname, basename, isfile +from glob import glob +import re +import numpy as np +from collections import namedtuple, OrderedDict + +from .priors import Priors, PriorSource +from .util import GlaesError + +Areas = namedtuple('Areas', "coordinates geoms") + +############################### +# Make an Exclusion Calculator +class ExclusionCalculator(object): + """The ExclusionCalculator object makes land eligibility (LE) analyses easy and quick. Once initialized to a particular region, the ExclusionCalculator object can be used to incorporate any geospatial dataset (so long as it is interpretable by GDAL) into the LE analysis. + + + NOTE: By default, ExclusionCalculator is always initialized at 100x100 meter resolution in the EPSG3035 projection system. This is well suited to LE analyses in Europe, however if another region is being investigated or else if another resolution or projection system is desired for any other reason, this can be incorporated as well during the initialization stage. + + + Initialization: + * ExclusionCalculator can be initialized by passing a specific shapefile describing the investigation region: + + >>> ec = ExclusionCalculator() + + * Or a specific srs and resolution can be used: + + >>> ec = ExclusionCalculator(, pixelSize=0.001, srs='latlon') + + * In fact, the ExclusionCalculator initialization is simply a call to geokit.RegionMask.load, so see that for more information. This also means that any geokit.RegoinMask object can be used to initialize the ExclusionCalculator + + >>> rm = geokit.RegionMask.load(, pad=..., srs=..., pixelSize=..., ...) + >>> ec = ExclusionCalculator(rm) + + Usage: + * The ExclusionCalculator object contains a member name "availability", which contains the most up to date result of the LE analysis + - Just after initialization, the the availability matrix is filled with 1's, meaning that all locations are available + - After excluding locations based off various geospatial datasets, cells in the availability matrix are changed to a value between 0 and 1, where 0 means completely unavailable, 1 means fully available, and intermediate values indicate a pixel which is only partly excluded. + * Exclusions can be applied by using one of the 'excludeVectorType', 'excludeRasterType', or 'excludePrior' methods + - The correct method to use depends on the format of the datasource used for exclusions + * After all exclusions have been applied... + - The 'draw' method can be used to visualize the result + - The 'save' method will save the result to a raster file on disc + - The 'availability' member can be used to extract the availability matrix as a NumPy matrix for further usage + """ + typicalExclusions = { + "access_distance": (5000, None ), + "agriculture_proximity": (None, 50 ), + "agriculture_arable_proximity": (None, 50 ), + "agriculture_pasture_proximity": (None, 50 ), + "agriculture_permanent_crop_proximity": (None, 50 ), + "agriculture_heterogeneous_proximity": (None, 50 ), + "airfield_proximity": (None, 3000 ), + "airport_proximity": (None, 5000 ), + "connection_distance": (10000, None ), + "dni_threshold": (None, 5.0 ), + "elevation_threshold": (1800, None ), + "ghi_threshold": (None, 5.0 ), + "industrial_proximity": (None, 300 ), + "lake_proximity": (None, 400 ), + "mining_proximity": (None, 100 ), + "ocean_proximity": (None, 1000 ), + "power_line_proximity": (None, 200 ), + "protected_biosphere_proximity": (None, 300 ), + "protected_bird_proximity": (None, 1500 ), + "protected_habitat_proximity": (None, 1500 ), + "protected_landscape_proximity": (None, 500 ), + "protected_natural_monument_proximity": (None, 1000 ), + "protected_park_proximity": (None, 1000 ), + "protected_reserve_proximity": (None, 500 ), + "protected_wilderness_proximity": (None, 1000 ), + "camping_proximity": (None, 1000), + "touristic_proximity": (None, 800), + "leisure_proximity": (None, 1000), + "railway_proximity": (None, 150 ), + "river_proximity": (None, 200 ), + "roads_proximity": (None, 150 ), + "roads_main_proximity": (None, 200 ), + "roads_secondary_proximity": (None, 100 ), + "sand_proximity": (None, 1000 ), + "settlement_proximity": (None, 500 ), + "settlement_urban_proximity": (None, 1000 ), + "slope_threshold": (10, None ), + "slope_north_facing_threshold": (3, None ), + "wetland_proximity": (None, 1000 ), + "waterbody_proximity": (None, 300 ), + "windspeed_100m_threshold": (None, 4.5 ), + "windspeed_50m_threshold": (None, 4.5 ), + "woodland_proximity": (None, 300 ), + "woodland_coniferous_proximity": (None, 300 ), + "woodland_deciduous_proximity": (None, 300 ), + "woodland_mixed_proximity": (None, 300 )} + + def __init__(s, region, **kwargs): + """Initialize the ExclusionCalculator + + Inputs: + region : The region definition for which land exclusions will be calculated + - str : A path to a vector file containing the region definition + - geokit.RegionMask : A preinitialized RegionMask object + + kwargs: + * All keyword arguments are passed on to a call to geokit.RegionMask.load + * Most notably (most only operate when region is a path): + - 'srs' can be used to define the reference system to use + - 'pixelSize' can be used to define the resolution (in units of the srs) + - 'select' can be used to filter the vector source and extract a particular feature + """ + + # load the region + s.region = gk.RegionMask.load(region, **kwargs) + s.maskPixels = s.region.mask.sum() + + # Make the total availability matrix + s._availability = np.array(s.region.mask, dtype=np.uint8)*100 + #s._availability[~s.region.mask] = 255 + + # Make a list of item coords + s.itemCoords=None + + def save(s, output, threshold=None, **kwargs): + """Save the current availability matrix to a raster file + + Output will be a byte-valued raster with the following convention: + 0 -> unavailable + 50 -> Semi-available + 100 -> fully eligibile + 255 -> "no data" (out of region) + + Inputs: + output - str : The path of the output raster file + + threshold - float : The acceptable threshold indicating an available pixel + * Use this to process the availability matrix before saving it (will save a little bit of space) + + kwargs: + * All keyword arguments are passed on to a call to geokit.RegionMask.createRaster + * Most notably: + - 'noDataValue' is used to define the no data value + - 'dtype' is used to define the data type of the resulting raster + - 'overwrite' is used to force overwrite an existing file + + """ + + meta={ + "description":"The availability of each pixel for the contextual purpose", + "units":"percent-available" + } + + data = s.availability + if not threshold is None: + data = (data>=threshold).astype(np.uint8)*100 + + data[~s.region.mask] = 255 + s.region.createRaster(output=output, data=data, noData=255, meta=meta, **kwargs) + + + def draw(s, ax=None, dataScaling=None, geomSimplify=None, output=None, noBorder=True, goodColor="#005b82", excludedColor="#8c0000"): + """Draw the current availability matrix on a matplotlib figure + + Inputs: + ax - matplotlib axis object : The axis to draw the figure onto + * If given as 'None', then a fresh axis will be produced and displayed or saved immediately + * When not 'None', then this function returns a handle to the drawn image which can be used however you see fit + + dataScaling - int : A down scaling factor to apply to the visualized matrix + * Use this when visualizing a large area consumes too much memory + + geomSimplify - int : A down scaling factor to apply when drawing the geometry borders of the ExclusionCalculator's region + * Use this when the region's geometry is extremely detailed compared to the scale over which it is drawn + + output - str : A path to save the output figure to + * Only applies when 'ax' is None + * If this is None and 'ax' is None, the figure is displayed immediately + + noBorder - T/F : A flag determining whether or not to show the borders of the plot's axis + * Only useful when 'ax' is None + + goodColor : The color to apply to 'good' locations (having a value of 1) + - str : An HTML color code, or any other string interpretable by matplotlib + - (r,g,b) : Red, green, blue values given as a tuple + * Each must be between 0..1 + + excludedColor : The color to apply to 'excluded' locations (having a value of 0) + * See above for options + + """ + + # import some things + from matplotlib.colors import LinearSegmentedColormap + + # Do we need to make an axis? + if ax is None: + doShow = True + # import some things + import matplotlib.pyplot as plt + + # make a figure and axis + plt.figure(figsize=(12,12)) + ax = plt.subplot(111) + else: doShow=False + + # fix bad inputs + if dataScaling: dataScaling = -1*abs(dataScaling) + if geomSimplify: geomSimplify = abs(geomSimplify) + + # plot the region background + s.region.drawGeometry(ax=ax, simplification=geomSimplify, fc=excludedColor, ec='None', zorder=0) + + # plot the availability + a2b = LinearSegmentedColormap.from_list('alpha_to_blue',[(1,1,1,0),goodColor]) + gk.raster.drawImage(s.availability, bounds=s.region.extent, ax=ax, scaling=dataScaling, cmap=a2b, vmax=100) + + # Draw the region boundaries + s.region.drawGeometry(ax=ax, simplification=geomSimplify, fc='None', ec='k', linewidth=3) + + # Draw Items? + if not s.itemCoords is None: + ax.plot(s.itemCoords[:,0], s.itemCoords[:,1], 'ok') + + # Done! + if doShow: + ax.set_aspect('equal') + ax.autoscale(enable=True) + + if noBorder: + plt.axis('off') + + if output: + plt.savefig(output, dpi=200) + plt.close() + else: + plt.show() + else: + return ax + + @property + def availability(s): + """A matrix containing the availability of each location after all applied exclusions. + * A value of 100 is interpreted as fully available + * A value of 0 is interpreted as completely excluded + * In between values are...in between""" + return s._availability + + @property + def percentAvailable(s): + """The percent of the region which remains available""" + return 100*s.availability.sum(dtype=np.int64)/100/s.region.mask.sum() + + @property + def areaAvailable(s): + """The area of the region which remains available + * Units are defined by the srs used to initialize the ExclusionCalculator""" + return s.availability.sum(dtype=np.int64)*s.region.pixelWidth*s.region.pixelHeight + + ## General excluding functions + def excludeRasterType(s, source, value=None, valueMin=None, valueMax=None, **kwargs): + """Exclude areas based off the values in a raster datasource + + Inputs: + source : The raster datasource defining the values for each location + - str : A path to a raster data source + - gdal Dataset : An open gdal dataset object held in memory + + value : The exact value, or value range to exclude + - Numeric : The exact value to exclude + * Generally this should only be done when the raster datasource contains integer values, + otherwise a range of values should be used to avoid float comparison errors + - ( Numeric, Numeric ) : The low and high boundary describing the range of values to exclude + * If either boundary is given as None, then it is interpreted as unlimited + + valueMin - Numeric : A convenience input when the desired exclusion range is all values above + a minimal value + * This is equivalent to value=(valueMin, None) + + valueMax - Numeric : A convenience input when the desired exclusion range is all values below + a maximal value + * This is equivalent to value=(None, valueMax) + + kwargs + * All other keyword arguments are passed on to a call to geokit.RegionMask.indicateValues + * Most importantly... + - 'resampeAlg' is used to define how the indication matrix is warped to fit the region mask + - 'resolutionDiv' is used to increase the resolution of the working matrix during processing + - 'buffer' is used to add a buffer region (given in units of the ExclusionCalculator's srs) around the raw indicated areas + """ + if value is None and valueMin is None and valueMax is None: + raise GlaesError("One of value, valueMin, or valueMax must be given") + + # Indicate on the source + if not (valueMin is None and valueMax is None): value = (valueMin,valueMax) + areas = (s.region.indicateValues(source, value, **kwargs)*100).astype(np.uint8) + + # exclude the indicated area from the total availability + s._availability = np.min([s._availability, 100-areas],0) + + def excludeVectorType(s, source, where=None, invert=False, **kwargs): + """Exclude areas based off the features in a vector datasource + + Inputs: + source : The raster datasource defining the features to indicate from + - str : A path to a vector data source + - gdal Dataset : An open gdal dataset object held in memory + + where - str : A filtering statement to apply to the datasource before the initial indication + * This is an SQL like statement which can operate on features in the datasource + * For tips, see "http://www.gdal.org/ogr_sql.html" + * For example... + - If the datasource had features which each have an attribute called 'type' and only features with the type "protected" are wanted, the correct statement would be: + where="type='protected'" + + invert - T/F : Flag causing the exclusion of all unindicated areas, instead of all indicated areas + + kwargs + * All other keyword arguments are passed on to a call to geokit.RegionMask.indicateFeatures + * Most importantly... + - 'resolutionDiv' is used to increase the resolution of the working matrix during processing + - 'buffer' is used to add a buffer region (given in units of the ExclusionCalculator's srs) around the raw indicated features + """ + if isinstance(source, PriorSource): + edgeI = kwargs.pop("edgeIndex", np.argwhere(source.edges==source.typicalExclusion)) + source = source.generateVectorFromEdge( s.region.extent, edgeIndex=edgeI ) + + # Indicate on the source + areas = (s.region.indicateFeatures(source, where=where, **kwargs)*100).astype(np.uint8) + + # exclude the indicated area from the total availability + if invert: + s._availability = np.min([s._availability, areas],0) + else: + s._availability = np.min([s._availability, 100-areas],0) + + def excludePrior(s, prior, value=None, valueMin=None, valueMax=None, **kwargs): + """Exclude areas based off the values in one of the Prior datasources + + * The Prior datasources are currently only defined over Europe + * All Prior datasources are defined in the EPSG3035 projection system with 100x100 meter resolution + * For each call to excludePrior, a temporary raster datasource is generated around the ExclusionCalculator's region, after which a call to ExclusionCalculator.excludeRasterType is made, therefore all the same inputs apply here as well + + Inputs: + source - str : The name of the Prior datasource defining the values for each location + * If the name does not exactly match one of the Prior datasources, the best fitting name will be used (and you will be informed about which one is chosen) + * See the ExclusionCalculator.typicalExclusions dictionary for the Prior dataset names and what a typical exclusion threshold would be + * A list of Prior datasets names can also be found in Priors.sources + + value : The exact value, or value range to exclude + - Numeric : The exact value to exclude + * Generally this should only be done when the raster datasource contains integer values, + otherwise a range of values should be used to avoid float comparison errors + - ( Numeric, Numeric ) : The low and high boundary describing the range of values to exclude + * If either boundary is given as None, then it is interpreted as unlimited + * If value, valueMin, and valueMax are all None, the typical exclusion threshold given from ExclusionCalculator.typicalExclusions is used + + valueMin - Numeric : A convenience input when the desired exclusion range is all values above + a minimal value + * This is equivalent to value=(valueMin, None) + + valueMax - Numeric : A convenience input when the desired exclusion range is all values below + a maximal value + * This is equivalent to value=(None, valueMax) + + kwargs + * All other keyword arguments are passed on to a call to geokit.RegionMask.indicateValues + * Most importantly... + - 'buffer' is used to add a buffer region (given in units of the ExclusionCalculator's srs) around the raw indicated areas + """ + if not (valueMin is None and valueMax is None): value = (valueMin,valueMax) + + # make sure we have a Prior object + if isinstance(prior, str): prior = Priors[prior] + + if not isinstance( prior, PriorSource): raise GlaesError("'prior' input must be a Prior object or an associated string") + + # try to get the default value if one isn't given + if value is None: + try: + value = s.typicalExclusions[prior.displayName] + except KeyError: + raise GlaesError("Could not find a default exclusion set for %s"%prior.displayName) + + # Check the value input + if isinstance(value, tuple): + + # Check the boundaries + if not value[0] is None: prior.containsValue(value[0], True) + if not value[1] is None: prior.containsValue(value[1], True) + + # Check edges + if not value[0] is None: prior.valueOnEdge(value[0], True) + if not value[1] is None: prior.valueOnEdge(value[1], True) + else: + if not value==0: + print("WARNING: It is advisable to exclude by a value range instead of a singular value") + + # Make the raster + source = prior.generateRaster( s.region.extent ) + + # Call the excluder + s.excludeRasterType( source, value=value, **kwargs) + + def shrinkAvailability(s, dist, threshold=50, **kwargs): + """Shrinks the current availability by a given distance in the given SRS""" + geom = gk.geom.convertMask(s.availability>=threshold, bounds=s.region.extent, srs=s.region.srs, flat=True) + geom = geom.Buffer(dist) + newAvail = (s.region.indicateGeoms(geom, **kwargs)*100).astype(np.uint8) + s._availability = newAvail + diff --git a/glaes/core/priors.py b/glaes/core/priors.py new file mode 100644 index 0000000..231f762 --- /dev/null +++ b/glaes/core/priors.py @@ -0,0 +1,293 @@ +import geokit as gk +import re +import numpy as np +from glob import glob +from os.path import dirname, basename, join, isdir, splitext +from collections import namedtuple, OrderedDict +import json +from warnings import warn +from difflib import SequenceMatcher as SM + + +# Sort out the data paths +priordir = join(dirname(__file__), "..", "..", "data", "priors") + +# Typical criteria +Criterion = namedtuple("Criteria","doc typicalExclusion unit excludeDirection evaluationName untouchedValue noDataValue") + +# Prior datasource class +class PriorSource(object): + class _LoadFail(Exception):pass + + def __init__(s, path): + s.path = path + ds = gk.raster.loadRaster(path) + + # Check if we're dealign with a GLAES prior + priorCheck = ds.GetMetadataItem("GLAES_PRIOR") + if priorCheck is None or priorCheck != "YES": raise s._LoadFail() + + # Load basic values + s.displayName = ds.GetMetadataItem("DISPLAY_NAME") + if s.displayName is None: + s.displayName = splitext(basename(path))[0] + + s.unit = ds.GetMetadataItem("UNIT") + s.description = ds.GetMetadataItem("DESCRIPTION") + s.alternateName = ds.GetMetadataItem("ALTERNATE_NAME") + + # create edges and estimation-values + try: + valMap = json.loads(ds.GetMetadataItem("VALUE_MAP")) + except Exception as e: + print(path) + raise e + + s.edgeStr = [] + s.edges = [] + s.values = [] + + numRE = re.compile("^(?P[<>]?=?)(?P-?[0-9.]+)$") + + # Arange values and qualifiers + rawValues = [] + qualifiers = [] + for i in range(253): + try: + valString = valMap["%d"%i] + except KeyError: # should fail when we've reached the end of the precalculated edges + break + + s.edgeStr.append(valString) + + try: + qualifier, value = numRE.search(valString).groups() + except Exception as e: + print(valString) + raise e + + rawValues.append(float(value)) + qualifiers.append(qualifier) + + # set values + for i in range(len(rawValues)): + # estimate a value + if qualifiers[i]=="<": s.values.append( rawValues[i]-0.001 ) # subtract a little bit + elif qualifiers[i]==">": s.values.append( rawValues[i]+0.001 ) # add a little bit + else: + if qualifiers[i]=="<=" and i!=0: + val = (rawValues[i]+rawValues[i-1])/2 + elif qualifiers[i]==">=" and i!=(len(rawValues)-1): + val = (rawValues[i]+rawValues[i+1])/2 + else: + val = rawValues[i] + + s.values.append(val) + + # make into numpy arrays + s.edges = np.array(rawValues) + s.values = np.array(s.values) + + if not s.edges.size == s.values.size: raise RuntimeError(basename(path)+": edges length does not match values length") + + # make nodata and untouched value + qualifier, value = numRE.search( valMap["%d"%(s.values.size-1)] ).groups() # Get the last calculated edge + value = float(value) + + # estimate a value + if qualifier=="<=": # set the untouched value to everything above value + s.untouchedTight = value+0.001 + s.untouchedWide = value+100000000000000 + elif qualifier==">=": # do the opposite in this case + s.untouchedTight = value-0.001 + s.untouchedWide = value-100000000000000 + else: + s.untouchedValue = value + s.noDataValue = -999999 + + # Make the doc string + doc = "" + doc += "%s\n"%s.description + doc += "UNITS: %s\n"%s.unit + doc += "VALUE MAP:\n" + doc += " Raw Value : Precalculated Edge : Estimated Value\n" + for i in range(len(s.edges)): + doc += " {:^9} - {:^18s} - {:^15.3f}\n".format(i, s.edgeStr[i], s.values[i]) + doc += " {:^9} - {:^18s} - {:^15.3f}\n".format(254, "untouched", s.untouchedTight) + doc += " {:^9} - {:^18s} - {:^15.3f}\n".format(255, "no-data", s.noDataValue) + + s.__doc__ = doc + + def containsValue(s, val, verbose=False): + if val <= s.edges.max() and val >= s.edges.min(): + return True + else: + if verbose: + warn("%s: %f is outside the predefined boundaries (%f - %f)"%(s.displayName,val,s.edges.min(),s.edges.max()), Warning) + return False + + def valueOnEdge(s, val, verbose=False): + bestI = np.argmin(np.abs(s.edges-val)) + bestEdge = s.edges[bestI] + + if (abs(bestEdge-val) < 0.0001): + return True + elif abs((bestEdge-val)/(bestEdge if bestEdge!=0 else val)) <= 0.05: + return False + else: + if verbose: + print("PRIORS-%s: %f is significantly different from the closest precalculated edge (%f)"%(s.displayName,val,bestEdge)) + return False + + #### Make a datasource generator + def generateRaster(s, extent, untouched='Tight', **kwargs): + + # make better values + values = s.values + if untouched.lower()=='tight': + untouchedValue = s.untouchedTight + elif untouched.lower()=='wide': + untouchedValue = s.untouchedWide + else: + raise RuntimeError("'untouched' must be 'Tight' or 'Wide") + + # make a mutator function to make indexes to estimated values + #indexToValue = np.vectorize(lambda i: s.values[i]) # TODO: test 'interp' vs 'vectorize' + #def mutator(data): + # return indexToValue(data) + def mutator(data): + noData = data == 255 + untouched = data == 254 + result = np.interp(data, range(len(values)), values) + result[untouched] = untouchedValue + result[noData] = s.noDataValue + return result + + # mutate main source + clipDS = extent.clipRaster(s.path) + mutDS = gk.raster.mutateValues(clipDS, processor=mutator, noData=s.noDataValue, **kwargs) + + # return + return mutDS + + #### Make a datasource generator + def generateVectorFromEdge(s, extent, edgeIndex=-1): + # Check edgeIndex + if edgeIndex<0: edgeIndex+=len(s.edges) + + # extract a matrix + extent = extent.castTo('europe_m').fit(100) + dataMatrix = extent.extractMatrix(s.path) + + # make geometries + geoms = [] + fields = dict(edge=[], index=[]) + + mat = dataMatrix <= edgeIndex + + if not mat.any(): raise RuntimeError("Failed to find edge in the given extent") + + shape = gk.geom.convertMask(mat, bounds=extent, flat=True) + + geoms.append(shape) + fields["edge"].append(s.edges[edgeIndex]) + fields["index"].append(edgeIndex) + + # create vector + geoms = geoms[::-1] # opposite order so they can be visualized + fields["edge"] = fields["edge"][::-1] + fields["index"] = fields["index"][::-1] + + vecDS = gk.vector.createVector(geoms, fieldVals=fields) + + # return + return vecDS + + def extractValues(s, points, **kwargs): + values = s.values.tolist() + values.append(s.untouchedTight) + + indicies = gk.raster.extractValues(s.path, points=points, **kwargs) + + if isinstance(indicies, list): + return np.array([values[i.data] for i in indicies ]) + else: + return values[indicies.data] + +# Load priors +class PriorSet(object): + def __init__(s,path): + s.path = path + s._sources = OrderedDict() + + for f in glob(join(path,"*.tif")): + if basename(f) == 'goodAreas.tif':continue + + try: + p = PriorSource(f) + s.sources[p.displayName] = p + if p.alternateName != "NONE": + # make a new prior and update the displayName + p2 = PriorSource(f) + p2.displayName = p.alternateName + s.sources[p.alternateName] = p2 + + except PriorSource._LoadFail: + print("WARNING: Could not parse file: %s"%(basename(f))) + pass + + def regionIsOkay(s, region): + # Check if region is okay + goodPixels = region.indicateValues(join(s.path,"goodArea.tif"), value=1).sum() + + goodRatio = goodPixels/region.mask.sum() + if goodRatio > 0.9999: + # Evertyhing is okay + return True + elif goodRatio > 0.95: + print("PRIORS-WARNING: A portion of the defined region is not included of the precalculated exclusion areas") + return True + else: + return False + + @property + def sources(s): + """An easily indexable/searchable list of the PriorSet's sources""" + return s._sources + + def __getitem__(s,prior): + try: + output = s.sources[prior] + except KeyError: + priorNames = list(s.sources.keys()) + priorLow = prior.lower() + scores = [SM(None, priorLow, priorName).ratio() for priorName in priorNames] + + bestMatch = priorNames[np.argmax(scores)] + + print("PRIORS: Mapping '%s' to '%s'"%(prior, bestMatch)) + + output = s.sources[bestMatch] + + return output + + def combinePriors(s, reg, priorNames, combiner='min'): + + # make output matrix + outputMatrix = np.ones(reg.mask.shape)*999999999 + + # append each matrix + for name in priorNames: + tmp = reg.warp(s[name].generateRaster(reg.extent, "Wide"), applyMask=False) + if combiner == 'min': + outputMatrix = np.min([outputMatrix,tmp], 0) + elif combiner == 'max': + outputMatrix = np.max([outputMatrix,tmp], 0) + + # make an output + outputRaster = reg.createRaster(data=outputMatrix) + return outputRaster + + +# MAKE THE PRIORS! +Priors = PriorSet(priordir) diff --git a/glaes/core/util.py b/glaes/core/util.py new file mode 100644 index 0000000..81c1a7c --- /dev/null +++ b/glaes/core/util.py @@ -0,0 +1 @@ +class GlaesError(Exception): pass \ No newline at end of file diff --git a/glaes/predefinedExclusions.py b/glaes/predefinedExclusions.py new file mode 100644 index 0000000..0fa57dc --- /dev/null +++ b/glaes/predefinedExclusions.py @@ -0,0 +1,314 @@ +import glaes as gl +import geokit as gk + +class WindTurbineExclusionSets(object): + + @staticmethod + def Holtinger2016_max(reg): + """ + SOURCE: Holtinger2016 + + EXCLUSIONS: + - Areas above the alpine forest line + - Maximum slope (11.3 degrees) + - Water bodies + - Settlement areas - 1000m buffer + - Buildings outside of settlement areas - 750m buffer + - Building land outside of settlement areas - 750m buffer + - Built-up areas - 300m buffer + * Industrial, commercial, and mining areas + - Railways - 300m buffer + - Motorways, primary, and secondary roads - 300m buffer + - Airport public safety zones - 5100m buffer + - Power grid( >110kV) - 250m buffer + - National parks - 1000m buffer + - Natura 2000 - habitats directive sites + * Potentially + - Natura 2000 - birds directive sites + - Other protected areas + * Biosphere reserves, landscape protection areas, natural monuments and sites, + - Important birdlife areas + * Potentially + - Major migration routes for wild animals + * Potentially + - Lakes (> 50 ha) - 1000m buffer + """ + ec = gl.ExclusionCalculator(reg) + + ##### do exclusions ##### + # "Areas above the alpine forest line + ec.excludePrior("elevation_threshold", value=(1750, None) ) # alpine forest line assumed at 1750 m + + # "maximum slope (degrees)" + ec.excludePrior("slope_threshold", value=(11.3, None) ) + + # "water bodies" + ec.excludePrior("river_proximity", value=0 ) + #ec.excludePrior("lake_proximity", value=0 ) # commented out since it is included late with a buffer + + # "settlement areas - 1000m buffer" + ec.excludePrior("settlement_proximity", value=(None, 1000) ) + + # "buildings outside of settlement areas - 750m buffer" + + # "building land outside of settlement areas - 750m buffer" + + # "built up areas - 300m buffer" + # " * industrial, commercial, and mining areas" + ec.excludePrior("industrial_proximity", value=(None, 300) ) + ec.excludePrior("mining_proximity", value=(None, 300) ) + + # "railways - 300m buffer" + ec.excludePrior("railway_proximity", value=(None, 300) ) + + # "motorways, primary, and secondary roads - 300m buffer" + ec.excludePrior("roads_main_proximity", value=(None, 300) ) + ec.excludePrior("roads_secondary_proximity", value=(None, 300) ) + + # "airport public safety zones - 5100m buffer" + ec.excludePrior("airport_proximity", value=(None, 5100) ) + + # "power grid( >110kV) - 250m buffer" + ec.excludePrior("power_line_proximity", value=(None, 250) ) + + # "national parks - 1000m buffer" + ec.excludePrior("protected_park_proximity", value=(None,1000) ) + + # "Natura 2000 - habitats directive sites" + # "*potentially" + ec.excludePrior("protected_habitat_proximity", value=0 ) + + # "Natura 2000 - birds directive sites" + ec.excludePrior("protected_bird_proximity", value=0 ) + + # "Other protected areas" + # "*Biosphere reserves, landscape protection areas, natural monuments and sites, + # protected habitats, and landscape section" + ec.excludePrior("protected_biosphere_proximity", value=0 ) + ec.excludePrior("protected_landscape_proximity", value=0 ) + ec.excludePrior("protected_natural_monument_proximity", value=0 ) + + # "important birdlife areas" + # "*potentially" + + # "major migration routes for wild animals" + # "*potentially" + + # "lakes (> 50 ha) - 1000m buffer" + ec.excludePrior("lake_proximity", value=(None,1000) ) + + # All done + return ec + + @staticmethod + def Holtinger2016_med(reg): + """ + SOURCE: Holtinger2016 + + EXCLUSIONS: + - Areas above the alpine forest line + - Maximum slope (8.5 degrees) + - Water bodies + - Settlement areas - 1200m buffer + - Buildings outside of settlement areas - 750m buffer + - Building land outside of settlement areas - 750m buffer + - Built-up areas - 300m buffer + * Industrial, commercial, and mining areas + - Railways - 300m buffer + - Motorways, primary, and secondary roads - 300m buffer + - Airport public safety zones - 5100m buffer + - Power grid( >110kV) - 250m buffer + - National parks - 2000m buffer + - Natura 2000 - habitats directive sites + * Potentially + - Natura 2000 - birds directive sites + - Other protected areas + * Biosphere reserves, landscape protection areas, natural monuments and sites, + - Important birdlife areas + * Potentially + - Major migration routes for wild animals + * Potentially + - Forest areas + * Only Exclude areas in communities with a forest share below 10% + - Lakes (> 50 ha) - 1750m buffer + """ + + ec = gl.ExclusionCalculator(reg) + + ##### do exclusions ##### + # "Areas above the alpine forest line + ec.excludePrior("elevation_threshold", value=(1750, None) ) # alpine forest line assumed at 1750 m + + # "maximum slope (8.5 degrees)" + ec.excludePrior("slope_threshold", value=(8.5, None) ) + + # "water bodies" + ec.excludePrior("river_proximity", value=0 ) + #ec.excludePrior("lake_proximity", value=0 ) # commented out since it is included late with a buffer + + # "settlement areas - 1200m buffer" + ec.excludePrior("settlement_proximity", value=(None, 1200) ) + + # "buildings outside of settlement areas - 750m buffer" + # maybe I should apply OSM directly, here + + # "building land outside of settlement areas - 750m buffer" + # maybe I should apply OSM directly, here + + # "built up areas - 300m buffer" + # " * industrial, commercial, and mining areas" + ec.excludePrior("industrial_proximity", value=(None, 300) ) + ec.excludePrior("mining_proximity", value=(None, 300) ) + + # "railways - 300m buffer" + ec.excludePrior("railway_proximity", value=(None, 300) ) + + # "motorways, primary, and secondary roads - 300m buffer" + ec.excludePrior("roads_main_proximity", value=(None, 300) ) + ec.excludePrior("roads_secondary_proximity", value=(None, 300) ) + + # "airport public safety zones - 5100m buffer" + ec.excludePrior("airport_proximity", value=(None, 5100) ) + + # "power grid( >110kV) - 250m buffer" + ec.excludePrior("power_line_proximity", value=(None, 250) ) + + # "national parks - 2000m buffer" + ec.excludePrior("protected_park_proximity", value=(None,2000) ) + + # "Natura 2000 - habitats directive sites" + # "*potentially" + ec.excludePrior("protected_habitat_proximity", value=0 ) + + # "Natura 2000 - burds directive sites" + ec.excludePrior("protected_bird_proximity", value=0 ) + + # "Other protected areas" + # "*Biosphere reserves, landscape protection areas, natural monuments and sites, + # protected habitats, and landscape section" + ec.excludePrior("protected_biosphere_proximity", value=0 ) + ec.excludePrior("protected_landscape_proximity", value=0 ) + ec.excludePrior("protected_natural_monument_proximity", value=0 ) + + # "important birdlife areas" + # "*potentially" + + # "major migration routes for wild animals" + # "*potentially" + + # "forest areas" + # "* excluding areas in communities with a forest share below 10%" + + # "lakes (> 50 ha) - 1750m buffer" + ec.excludePrior("lake_proximity", value=(None,1750) ) + + # All done + return ec + + @staticmethod + def Holtinger2016_min(reg): + """ + SOURCE: Holtinger2016 + + EXCLUSIONS: + - Areas above the alpine forest line + - Maximum slope (5.7 degrees) + - Water bodies + - Settlement areas - 2000m buffer + - Buildings outside of settlement areas - 1000m buffer + - Building land outside of settlement areas - 1000m buffer + - Built up areas - 300m buffer + * Industrial, commercial, and mining areas + - Railways - 300m buffer + - Motorways, primary, and secondary roads - 300m buffer + - Airport public safety zones - 5100m buffer + - Power grid( >110kV) - 250m buffer + - National parks - 3000m buffer + - Natura 2000 - habitats directive sites - 2000m buffer + * Potentially + - Natura 2000 - burds directive sites - 2000m buffer + - Other protected areas - 2000m buffer + * Biosphere reserves, landscape protection areas, natural monuments and sites, + - Important birdlife areas + * Potentially + - Major migration routes for wild animals + * Potentially + - Forest areas - 1000m buffer + - Lakes (> 50 ha) - 3000m buffer + """ + ec = gl.ExclusionCalculator(reg) + + ##### do exclusions ##### + # "Areas above the alpine forest line + ec.excludePrior("elevation_threshold", value=(1750, None) ) # alpine forest line assumed at 1750 m + + # "maximum slope (5.7 degrees)" + ec.excludePrior("slope_threshold", value=(5.7, None) ) + + # "water bodies" + ec.excludePrior("river_proximity", value=0 ) + #ec.excludePrior("lake_proximity", value=0 ) # commented out since it is included late with a buffer + + # "settlement areas - 2000m buffer" + ec.excludePrior("settlement_proximity", value=(None, 2000) ) + + # "buildings outside of settlement areas - 1000m buffer" + # maybe I should apply OSM directly, here + + # "building land outside of settlement areas - 1000m buffer" + # maybe I should apply OSM directly, here + + # "built up areas - 300m buffer" + # " * industrial, commercial, and mining areas" + ec.excludePrior("industrial_proximity", value=(None, 300) ) + ec.excludePrior("mining_proximity", value=(None, 300) ) + + # "railways - 300m buffer" + ec.excludePrior("railway_proximity", value=(None, 300) ) + + # "motorways, primary, and secondary roads - 300m buffer" + ec.excludePrior("roads_main_proximity", value=(None, 300) ) + ec.excludePrior("roads_secondary_proximity", value=(None, 300) ) + + # "airport public safety zones - 5100m buffer" + ec.excludePrior("airport_proximity", value=(None, 5100) ) + + # "power grid( >110kV) - 250m buffer" + ec.excludePrior("power_line_proximity", value=(None, 250) ) + + # "national parks - 3000m buffer" + ec.excludePrior("protected_park_proximity", value=(None,3000) ) + + # "Natura 2000 - habitats directive sites - 2000m buffer" + # "*potentially" + ec.excludePrior("protected_habitat_proximity", value=(None,2000) ) + + # "Natura 2000 - burds directive sites - 2000m buffer" + ec.excludePrior("protected_bird_proximity", value=(None,2000) ) + + # "Other protected areas - 2000m buffer" + # "*Biosphere reserves, landscape protection areas, natural monuments and sites, + # protected habitats, and landscape section" + ec.excludePrior("protected_biosphere_proximity", value=(None,2000) ) + ec.excludePrior("protected_landscape_proximity", value=(None,2000) ) + ec.excludePrior("protected_natural_monument_proximity", value=(None,2000) ) + + # "important birdlife areas" + # "*potentially" + + # "major migration routes for wild animals" + # "*potentially" + + # "forest areas - 1000m buffer" + ec.excludePrior("woodland_deciduous_proximity", value=(0,1000)) + ec.excludePrior("woodland_coniferous_proximity", value=(0,1000)) + ec.excludePrior("woodland_mixed_proximity", value=(0,1000)) + + # "lakes (> 50 ha) - 30000m buffer" + ec.excludePrior("lake_proximity", value=(None,3000) ) + + # All done + return ec + +class ExclusionSets(object): + Wind = WindTurbineExclusionSets() \ No newline at end of file diff --git a/images/example_01.png b/images/example_01.png new file mode 100644 index 0000000..b8bea00 Binary files /dev/null and b/images/example_01.png differ diff --git a/images/example_02.png b/images/example_02.png new file mode 100644 index 0000000..b2c72ef Binary files /dev/null and b/images/example_02.png differ diff --git a/images/example_03.png b/images/example_03.png new file mode 100644 index 0000000..77e988f Binary files /dev/null and b/images/example_03.png differ diff --git a/images/example_04.png b/images/example_04.png new file mode 100644 index 0000000..90ba35e Binary files /dev/null and b/images/example_04.png differ diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..38f36ad --- /dev/null +++ b/setup.py @@ -0,0 +1,16 @@ +from distutils.core import setup + +setup( + name='glaes', + version='1.0.0', + author='Severin Ryberg', + url='https://github.com/FZJ-IEK3-VSA/glaes', + packages = ["glaes"], + install_requires = [ + "gdal>=2.1.0", + "numpy>=1.11.2", + "geokit>=1.0.1", + "pandas", + "scipy", + ] +) diff --git a/testing/__init__.py b/testing/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/testing/data/CDDA_aachenClipped.dbf b/testing/data/CDDA_aachenClipped.dbf new file mode 100644 index 0000000..e6a8b48 Binary files /dev/null and b/testing/data/CDDA_aachenClipped.dbf differ diff --git a/testing/data/CDDA_aachenClipped.prj b/testing/data/CDDA_aachenClipped.prj new file mode 100644 index 0000000..b9b6c82 --- /dev/null +++ b/testing/data/CDDA_aachenClipped.prj @@ -0,0 +1 @@ +PROJCS["ETRS89_LAEA_Europe",GEOGCS["GCS_ETRS_1989",DATUM["D_ETRS_1989",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_origin",52],PARAMETER["central_meridian",10],PARAMETER["false_easting",4321000],PARAMETER["false_northing",3210000],UNIT["Meter",1]] \ No newline at end of file diff --git a/testing/data/CDDA_aachenClipped.qpj b/testing/data/CDDA_aachenClipped.qpj new file mode 100644 index 0000000..5ed9ccd --- /dev/null +++ b/testing/data/CDDA_aachenClipped.qpj @@ -0,0 +1 @@ +PROJCS["ETRS89 / LAEA Europe",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",52],PARAMETER["longitude_of_center",10],PARAMETER["false_easting",4321000],PARAMETER["false_northing",3210000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","3035"]] diff --git a/testing/data/CDDA_aachenClipped.shp b/testing/data/CDDA_aachenClipped.shp new file mode 100644 index 0000000..35f0542 Binary files /dev/null and b/testing/data/CDDA_aachenClipped.shp differ diff --git a/testing/data/CDDA_aachenClipped.shx b/testing/data/CDDA_aachenClipped.shx new file mode 100644 index 0000000..f09f847 Binary files /dev/null and b/testing/data/CDDA_aachenClipped.shx differ diff --git a/testing/data/Natura2000_aachenClipped.dbf b/testing/data/Natura2000_aachenClipped.dbf new file mode 100644 index 0000000..f637f2f Binary files /dev/null and b/testing/data/Natura2000_aachenClipped.dbf differ diff --git a/testing/data/Natura2000_aachenClipped.prj b/testing/data/Natura2000_aachenClipped.prj new file mode 100644 index 0000000..b9b6c82 --- /dev/null +++ b/testing/data/Natura2000_aachenClipped.prj @@ -0,0 +1 @@ +PROJCS["ETRS89_LAEA_Europe",GEOGCS["GCS_ETRS_1989",DATUM["D_ETRS_1989",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_origin",52],PARAMETER["central_meridian",10],PARAMETER["false_easting",4321000],PARAMETER["false_northing",3210000],UNIT["Meter",1]] \ No newline at end of file diff --git a/testing/data/Natura2000_aachenClipped.qpj b/testing/data/Natura2000_aachenClipped.qpj new file mode 100644 index 0000000..5ed9ccd --- /dev/null +++ b/testing/data/Natura2000_aachenClipped.qpj @@ -0,0 +1 @@ +PROJCS["ETRS89 / LAEA Europe",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",52],PARAMETER["longitude_of_center",10],PARAMETER["false_easting",4321000],PARAMETER["false_northing",3210000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","3035"]] diff --git a/testing/data/Natura2000_aachenClipped.shp b/testing/data/Natura2000_aachenClipped.shp new file mode 100644 index 0000000..b08029b Binary files /dev/null and b/testing/data/Natura2000_aachenClipped.shp differ diff --git a/testing/data/Natura2000_aachenClipped.shx b/testing/data/Natura2000_aachenClipped.shx new file mode 100644 index 0000000..8320d44 Binary files /dev/null and b/testing/data/Natura2000_aachenClipped.shx differ diff --git a/testing/data/aachenShapefile.dbf b/testing/data/aachenShapefile.dbf new file mode 100644 index 0000000..107cb5c Binary files /dev/null and b/testing/data/aachenShapefile.dbf differ diff --git a/testing/data/aachenShapefile.prj b/testing/data/aachenShapefile.prj new file mode 100644 index 0000000..a30c00a --- /dev/null +++ b/testing/data/aachenShapefile.prj @@ -0,0 +1 @@ +GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] \ No newline at end of file diff --git a/testing/data/aachenShapefile.qpj b/testing/data/aachenShapefile.qpj new file mode 100644 index 0000000..5fbc831 --- /dev/null +++ b/testing/data/aachenShapefile.qpj @@ -0,0 +1 @@ +GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]] diff --git a/testing/data/aachenShapefile.shp b/testing/data/aachenShapefile.shp new file mode 100644 index 0000000..5745b92 Binary files /dev/null and b/testing/data/aachenShapefile.shp differ diff --git a/testing/data/aachenShapefile.shx b/testing/data/aachenShapefile.shx new file mode 100644 index 0000000..dee7306 Binary files /dev/null and b/testing/data/aachenShapefile.shx differ diff --git a/testing/data/clc-aachen_clipped.tif b/testing/data/clc-aachen_clipped.tif new file mode 100644 index 0000000..5d77f77 Binary files /dev/null and b/testing/data/clc-aachen_clipped.tif differ diff --git a/testing/data/elevation.tif b/testing/data/elevation.tif new file mode 100644 index 0000000..b34e6d8 Binary files /dev/null and b/testing/data/elevation.tif differ diff --git a/testing/data/roads_prior_clip.tif b/testing/data/roads_prior_clip.tif new file mode 100644 index 0000000..4dd2c34 Binary files /dev/null and b/testing/data/roads_prior_clip.tif differ diff --git a/testing/helpers.py b/testing/helpers.py new file mode 100644 index 0000000..bbeee1a --- /dev/null +++ b/testing/helpers.py @@ -0,0 +1,14 @@ +import glaes as gl +import geokit as gk +import numpy as np +from os.path import join + + +aachenShape = join("data","aachenShapefile.shp") +clcRaster = join("data", "clc-aachen_clipped.tif") +priorSample = join("data", "roads_prior_clip.tif") +cddaVector = join("data","CDDA_aachenClipped.shp") + +def isclose(a, b, rel_tol=1e-09, abs_tol=0.0): + return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) + diff --git a/testing/test_ExclusionCalculator.py b/testing/test_ExclusionCalculator.py new file mode 100644 index 0000000..0cf26b1 --- /dev/null +++ b/testing/test_ExclusionCalculator.py @@ -0,0 +1,147 @@ +from helpers import * + +def test_ExclusionCalculator(): + # Test by giving a shapefile + ec = gl.ExclusionCalculator(aachenShape) + + if ec.region.mask.shape != (523, 340) or \ + ec.region.mask.sum() != 70944 or \ + not isclose(ec.region.mask.std(), 0.48968559141, 1e-6): + raise RuntimeError("Fail") + + # Test by giving a region mask + rm = gk.RegionMask.load(aachenShape) + ec = gl.ExclusionCalculator(rm) + + if ec.region.mask.shape != (523, 340) or \ + ec.region.mask.sum() != 70944 or \ + not isclose(ec.region.mask.std(), 0.48968559141, 1e-6): + raise RuntimeError("Fail") + + # Test by giving a region mask with different resolution + rm = gk.RegionMask.load(aachenShape, srs=gk.srs.EPSG4326, pixelSize=0.001) + ec = gl.ExclusionCalculator(rm) + + if ec.region.mask.shape != (457, 446) or \ + ec.region.mask.sum() != 90296 or \ + not isclose(ec.region.mask.std(), 0.496741981394, 1e-6): + raise RuntimeError("Fail") + +def test_excludeRasterType(): + # exclude single value + ec = gl.ExclusionCalculator(aachenShape) + ec.excludeRasterType(clcRaster, 12) + + if not (isclose(ec.availability.mean(), 32.497469, 1e-6) and isclose(ec.availability.std(), 46.836540, 1e-6)): + raise RuntimeError("excludeRasterType: Single value exclusion - FAIL") + + # exclude value range + ec = gl.ExclusionCalculator(aachenShape) + ec.excludeRasterType(clcRaster, (5,12)) + + if not (isclose(ec.availability.mean(), 31.626365, 1e-6) and isclose(ec.availability.std(), 46.501717, 1e-6)): + raise RuntimeError("excludeRasterType: Value range exclusion - FAIL") + + # exclude value maximum + ec = gl.ExclusionCalculator(aachenShape) + ec.excludeRasterType(clcRaster, (None,12)) + + if not (isclose(ec.availability.mean(), 23.848273, 1e-6) and isclose(ec.availability.std(), 42.615572, 1e-6)): + raise RuntimeError("excludeRasterType: Value maximum exclusion - FAIL") + + ecMax12 = gl.ExclusionCalculator(aachenShape) + ecMax12.excludeRasterType(clcRaster, valueMax=12) + + if not np.abs(ecMax12.availability-ec.availability).sum()/ec.availability.size < 0.000001: + raise RuntimeError("excludeRasterType: valueMax argument - FAIL") + + # exclude value minimum + ec = gl.ExclusionCalculator(aachenShape) + ec.excludeRasterType(clcRaster, (13,None)) + + if not (isclose(ec.availability.mean(), 16.048251, 1e-6) and isclose(ec.availability.std(), 36.705297, 1e-6)): + raise RuntimeError("excludeRasterType: Value minimum exclusion - FAIL") + + ecMin13 = gl.ExclusionCalculator(aachenShape) + ecMin13.excludeRasterType(clcRaster, valueMin=13) + + if not np.abs(ecMin13.availability-ec.availability).sum()/ec.availability.size < 0.000001: + raise RuntimeError("excludeRasterType: valueMin argument - FAIL") + + # Make sure min and max align + if ((ecMax12.availability>0.5) == (ecMin13.availability>0.5))[ecMax12.region.mask].any(): + raise RuntimeError("excludeRasterType: minimum and maximum overlap - FAIL") + + if not (np.logical_or( ecMax12.availability>0.5, ecMin13.availability>0.5 ) == ecMin13.region.mask).all(): + raise RuntimeError("excludeRasterType: minimum and maximum summation - FAIL") + + ### Test with a different projection system + # exclude single value + ec = gl.ExclusionCalculator(aachenShape, srs='latlon', pixelSize=0.005) + ec.excludeRasterType(clcRaster, 12) + + +def test_excludeVectorType(): + # exclude all features directly + ec = gl.ExclusionCalculator(aachenShape) + ec.excludeVectorType(cddaVector) + + if not (isclose(ec.availability.mean(), 30.511191, 1e-6) and isclose(ec.availability.std(), 46.045485, 1e-6)): + raise RuntimeError("excludeVectorType: Single value exclusion, new srs - FAIL") + + # exclude all features directly, new srs + ec = gl.ExclusionCalculator(aachenShape, srs='latlon', pixelSize=0.005) + ec.excludeVectorType(cddaVector) + + if not (isclose(ec.availability.mean(), 32.915172, 1e-6) and isclose(ec.availability.std(), 46.990514, 1e-6)): + raise RuntimeError("excludeVectorType: Single value exclusion, new srs - FAIL") + + # exclude a selection of features + ec = gl.ExclusionCalculator(aachenShape) + ec.excludeVectorType(cddaVector, where="YEAR>2000") + + if not (isclose(ec.availability.mean(), 34.6693277, 1e-6) and isclose(ec.availability.std(), 47.5917101, 1e-6)): + raise RuntimeError("excludeVectorType: Single value exclusion, new srs - FAIL") + + # exclude a selection of features with buffer + ec = gl.ExclusionCalculator(aachenShape) + ec.excludeVectorType(cddaVector, where="YEAR>2000", buffer=400) + + if not (isclose(ec.availability.mean(), 31.0994267, 1e-6) and isclose(ec.availability.std(), 46.2900430, 1e-6)): + raise RuntimeError("excludeVectorType: Single value exclusion, new srs - FAIL") + +def test_excludePrior(): + # make a prior source + pr = gl.core.priors.PriorSource(priorSample) + + # test same srs + ec = gl.ExclusionCalculator(aachenShape) + ec.excludePrior(pr, valueMin=400) + if not (isclose(ec.availability.mean(), 9.92528961872, 1e-6) and isclose(ec.availability.std(), 29.0665453089, 1e-6)): + raise RuntimeError("excludePrior: Same srs - FAIL") + + # test different srs and resolution + ec = gl.ExclusionCalculator(aachenShape, srs='latlon', pixelSize=0.001) + ec.excludePrior(pr, valueMin=400) + + if not (isclose(ec.availability.mean(), 11.0289909823, 1e-6) and isclose(ec.availability.std(), 30.4952463815, 1e-6)): + raise RuntimeError("excludePrior: Different srs - FAIL") + +def test_multiple_exclusions(): + pr = gl.core.priors.PriorSource(priorSample) + ec = gl.ExclusionCalculator(aachenShape) + + # apply exclusions + ec.excludePrior(pr, valueMax=400) + ec.excludeVectorType(cddaVector, where="YEAR>2000") + ec.excludeRasterType(clcRaster, valueMax=12) + + if not (isclose(ec.availability.mean(), 15.2027443482, 1e-6) and isclose(ec.availability.std(), 35.6248783489, 1e-6)): + raise RuntimeError("Multiple Exclusions - FAIL") + +if __name__ == "__main__": + test_ExclusionCalculator() + test_excludeRasterType() + test_excludeVectorType() + test_excludePrior() + test_multiple_exclusions()