"""
This file is part of OSM-flex.
Copyright (C) 2023 OSM-flex contributors listed in AUTHORS.
OSM-flex is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free
Software Foundation, version 3.
OSM-flex is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.
-----
constants and configurations
"""
from pathlib import Path
# =============================================================================
# FILE AND FOLDER PATHS
# =============================================================================
[docs]
OSM_CONFIG_FILE = Path(__file__).parent.joinpath('osmconf.ini')
[docs]
OSM_DIR = Path(Path.home(), 'osm')
[docs]
OSMCONVERT_PATH = OSM_DIR / 'osmconvert'
[docs]
OSM_DATA_DIR = OSM_DIR.joinpath("osm_bpf")
[docs]
POLY_DIR = OSM_DIR.joinpath("poly")
# =============================================================================
# URLS
# =============================================================================
[docs]
GEOFABRIK_URL = 'https://download.geofabrik.de/'
[docs]
PLANET_URL = 'https://planet.openstreetmap.org/pbf/planet-latest.osm.pbf'
# =============================================================================
# DICTIONARIES
# =============================================================================
"""
dictionary for the generation of the correct download api-address at
geofabrik.de, relating ISO3-country codes to the region & written-out name.
Adapted from the GitHub repo osm_clipper (https://github.com/ElcoK/osm_clipper)
Used by download.get_country_geofabrik().
Note: A few small countries will be downloaded as a multi-country file, as
indicated in the comments.
Note: "special" ISO-3 codes - Canary Islands (IC), Asian part of Russia (RUS-A),
European part of Russia (RUS-E)
"""
[docs]
DICT_GEOFABRIK = {
'AFG' : ('asia','afghanistan'),
'ALB' : ('europe','albania'),
'DZA' : ('africa','algeria'),
'AND' : ('europe','andorra'),
'AGO' : ('africa','angola'),
'BEN' : ('africa', 'benin'),
'BWA' : ('africa', 'botswana'),
'BFA' : ('africa', 'burkina-faso'),
'BDI' : ('africa', 'burundi'),
'CMR' : ('africa', 'cameroon'),
'IC' : ('africa', 'canary-islands'),
'CPV' : ('africa', 'cape-verde'),
'CAF' : ('africa', 'central-african-republic'),
'TCD' : ('africa', 'chad'),
'COM' : ('africa', 'comores'),
'COG' : ('africa', 'congo-brazzaville'),
'COD' : ('africa', 'congo-democratic-republic'),
'DJI' : ('africa', 'djibouti'),
'EGY' : ('africa', 'egypt'),
'GNQ' : ('africa', 'equatorial-guinea'),
'ERI' : ('africa', 'eritrea'),
'ETH' : ('africa', 'ethiopia'),
'GAB' : ('africa', 'gabon'),
'GMB' : ('africa', 'senegal-and-gambia'), #TOGETHER WITH SENEGAL
'GHA' : ('africa', 'ghana'),
'GIN' : ('africa', 'guinea'),
'GNB' : ('africa', 'guinea-bissau'),
'CIV' : ('africa', 'ivory-coast'),
'KEN' : ('africa', 'kenya'),
'LSO' : ('africa', 'lesotho'),
'LBR' : ('africa', 'liberia'),
'LBY' : ('africa', 'libya'),
'MDG' : ('africa', 'madagascar'),
'MWI' : ('africa', 'malawi'),
'MLI' : ('africa', 'mali'),
'MRT' : ('africa', 'mauritania'),
'MAR' : ('africa', 'morocco'),
'MOZ' : ('africa', 'mozambique'),
'NAM' : ('africa', 'namibia'),
'NER' : ('africa', 'niger'),
'NGA' : ('africa', 'nigeria'),
'RWA' : ('africa', 'rwanda'),
'SHN' : ('africa', 'saint-helena-ascension-and-tristan-da-cunha'),
'STP' : ('africa', 'sao-tome-and-principe'),
'SEN' : ('africa', 'senegal-and-gambia'), #TOGETHER WITH THE GAMBIA
'SYC' : ('africa', 'seychelles'),
'SLE' : ('africa', 'sierra-leone'),
'SOM' : ('africa', 'somalia'),
'ZAF' : ('africa', 'south-africa'),
'SDN' : ('africa', 'sudan'),
'SSD' : ('africa', 'south-sudan'),
'SWZ' : ('africa', 'swaziland'),
'TZA' : ('africa', 'tanzania'),
'TGO' : ('africa', 'togo'),
'TUN' : ('africa', 'tunisia'),
'UGA' : ('africa', 'uganda'),
'ZMB' : ('africa', 'zambia'),
'ZWE' : ('africa', 'zimbabwe'),
'ARM' : ('asia', 'armenia'),
'AZE' : ('asia', 'azerbaijan'),
'BGD' : ('asia', 'bangladesh'),
'BTN' : ('asia', 'bhutan'),
'KHM' : ('asia', 'cambodia'),
'CHN' : ('asia', 'china'),
'SAU' : ('asia', 'gcc-states'), #Together with Kuwait, the United Arab Emirates, Qatar, Bahrain, and Oman
'KWT' : ('asia', 'gcc-states'), #Together with Saudi Arabia, the United Arab Emirates, Qatar, Bahrain, and Oman
'ARE' : ('asia', 'gcc-states'), #Together with Saudi Arabia, Kuwait, Qatar, Bahrain, and Oman
'QAT' : ('asia', 'gcc-states'), #Together with Saudi Arabia, Kuwait, the United Arab Emirates, Bahrain, and Oman
'OMN' : ('asia', 'gcc-states'), #Together with Saudi Arabia, Kuwait, the United Arab Emirates, Qatar and Oman
'BHR' : ('asia', 'gcc-states'), #Together with Saudi Arabia, Kuwait, the United Arab Emirates, Qatar and Bahrain
'IND' : ('asia', 'india'),
'IDN' : ('asia', 'indonesia'),
'IRN' : ('asia', 'iran'),
'IRQ' : ('asia', 'iraq'),
'ISR' : ('asia', 'israel-and-palestine'), # TOGETHER WITH PALESTINE
'PSE' : ('asia', 'israel-and-palestine'), # TOGETHER WITH ISRAEL
'JPN' : ('asia', 'japan'),
'JOR' : ('asia', 'jordan'),
'KAZ' : ('asia', 'kazakhstan'),
'KGZ' : ('asia', 'kyrgyzstan'),
'LAO' : ('asia', 'laos'),
'LBN' : ('asia', 'lebanon'),
'MYS' : ('asia', 'malaysia-singapore-brunei'), # TOGETHER WITH SINGAPORE AND BRUNEI
'SGP' : ('asia', 'malaysia-singapore-brunei'), # TOGETHER WITH MALAYSIA AND BRUNEI
'BRN' : ('asia', 'malaysia-singapore-brunei'), # TOGETHER WITH MALAYSIA AND SINGAPORE
'MDV' : ('asia', 'maldives'),
'MNG' : ('asia', 'mongolia'),
'MMR' : ('asia', 'myanmar'),
'NPL' : ('asia', 'nepal'),
'PRK' : ('asia', 'north-korea'),
'PAK' : ('asia', 'pakistan'),
'PHL' : ('asia', 'philippines'),
'RUS-A' : ('asia', 'russia'), # Asian part of Russia
'KOR' : ('asia', 'south-korea'),
'LKA' : ('asia', 'sri-lanka'),
'SYR' : ('asia', 'syria'),
'TWN' : ('asia', 'taiwan'),
'TJK' : ('asia', 'tajikistan'),
'THA' : ('asia', 'thailand'),
'TKM' : ('asia', 'turkmenistan'),
'UZB' : ('asia', 'uzbekistan'),
'VNM' : ('asia', 'vietnam'),
'YEM' : ('asia', 'yemen'),
'BHS' : ('central-america', 'bahamas'),
'BLZ' : ('central-america', 'belize'),
'CUB' : ('central-america', 'cuba'),
'GTM' : ('central-america', 'guatemala'),
'HTI' : ('central-america', 'haiti-and-domrep'), # TOGETHER WITH DOMINICAN REPUBLIC
'DOM' : ('central-america', 'haiti-and-domrep'), # TOGETHER WITH HAITI
'JAM' : ('central-america', 'jamaica'),
'HND' : ('central-america', 'honduras'),
'NIC' : ('central-america', 'nicaragua'),
'SLV' : ('central-america', 'el-salvador'),
'CRI' : ('central-america', 'costa-rica'),
'AUT' : ('europe', 'austria'),
'BLR' : ('europe', 'belarus'),
'BEL' : ('europe', 'belgium'),
'BIH' : ('europe', 'bosnia-herzegovina'),
'BGR' : ('europe', 'bulgaria'),
'HRV' : ('europe', 'croatia'),
'CYP' : ('europe', 'cyprus'),
'CZE' : ('europe', 'czech-republic'),
'DNK' : ('europe', 'denmark'),
'EST' : ('europe', 'estonia'),
'FRO' : ('europe', 'faroe-islands'),
'FIN' : ('europe', 'finland'),
'FRA' : ('europe', 'france'),
'GEO' : ('europe', 'georgia'),
'DEU' : ('europe', 'germany'),
'GBR' : ('europe', 'great-britain'), # DOES NOT INCLUDE NORTHERN ISLAND
'GRC' : ('europe', 'greece'),
'HUN' : ('europe', 'hungary'),
'ISL' : ('europe', 'iceland'),
'IRL' : ('europe', 'ireland-and-northern-ireland'),
'IMN' : ('europe', 'isle-of-man'),
'ITA' : ('europe', 'italy'),
'LVA' : ('europe', 'latvia'),
'LIE' : ('europe', 'liechtenstein'),
'LTU' : ('europe', 'lithuania'),
'LUX' : ('europe', 'luxembourg'),
'MKD' : ('europe', 'macedonia'),
'MLT' : ('europe', 'malta'),
'MDA' : ('europe', 'moldova'),
'MCO' : ('europe', 'monaco'),
'MNE' : ('europe', 'montenegro'),
'NLD' : ('europe', 'netherlands'),
'NOR' : ('europe', 'norway'),
'POL' : ('europe', 'poland'),
'PRT' : ('europe', 'portugal'),
'ROU' : ('europe', 'romania'),
'RUS-E' : ('europe', 'russia'), # European part of Russia
'SRB' : ('europe', 'serbia'),
'SVK' : ('europe', 'slovakia'),
'SVN' : ('europe', 'slovenia'),
'ESP' : ('europe', 'spain'),
'SWE' : ('europe', 'sweden'),
'CHE' : ('europe', 'switzerland'),
'TUR' : ('europe', 'turkey'),
'UKR' : ('europe', 'ukraine'),
'CAN' : ('north-america', 'canada'),
'GRL' : ('north-america', 'greenland'),
'MEX' : ('north-america', 'mexico'),
'USA' : ('north-america', 'us'),
'AUS' : ('australia-oceania', 'australia'),
'COK' : ('australia-oceania', 'cook-islands'),
'FJI' : ('australia-oceania', 'fiji'),
'KIR' : ('australia-oceania', 'kiribati'),
'MHL' : ('australia-oceania', 'marshall-islands'),
'FSM' : ('australia-oceania', 'micronesia'),
'NRU' : ('australia-oceania', 'nauru'),
'NCL' : ('australia-oceania', 'new-caledonia'),
'NZL' : ('australia-oceania', 'new-zealand'),
'NIU' : ('australia-oceania', 'niue'),
'PLW' : ('australia-oceania', 'palau'),
'PNG' : ('australia-oceania', 'papua-new-guinea'),
'PCN' : ('australia-oceania', 'pitcairn-islands'),
'WSM' : ('australia-oceania', 'samoa'),
'SLB' : ('australia-oceania', 'solomon-islands'),
'TON' : ('australia-oceania', 'tonga'),
'TUV' : ('australia-oceania', 'tuvalu'),
'VUT' : ('australia-oceania', 'vanuatu'),
'ARG' : ('south-america', 'argentina'),
'BOL' : ('south-america', 'bolivia'),
'BRA' : ('south-america', 'brazil'),
'CHL' : ('south-america', 'chile'),
'COL' : ('south-america', 'colombia'),
'ECU' : ('south-america', 'ecuador'),
'PRY' : ('south-america', 'paraguay'),
'PER' : ('south-america', 'peru'),
'SUR' : ('south-america', 'suriname'),
'URY' : ('south-america', 'uruguay'),
'VEN' : ('south-america', 'venezuela'),
}
"""
nested dictionary that contains collections of relevant columns (osm_keys) and
key - value pairs (osm_query) to extract critical infrastructure data from an
osm.pbf file, via the function OSM_FileQuery().retrieve_cis()
Currently implemented for:
* educational facilities,
* electric power,
* food supply,
* healthcare facilities,
* natural gas infrastructure,
* oil infrastructure,
* road,
* rail,
* telecommunications,
* water supply,
* wastewater.
Note: If modified, make sure that key exists in osm.config file, under the
respective geometry/-ies.
"""
[docs]
DICT_CIS_OSM = {
'education' : {
'osm_keys' : ['amenity','building','name'],
'osm_query' : """building='school' or amenity='school' or
building='kindergarten' or
amenity='kindergarten' or
building='college' or amenity='college' or
building='university' or amenity='university' or
building='college' or amenity='college' or
building='childcare' or amenity='childcare'"""},
'healthcare' : {
'osm_keys' : ['amenity','building','healthcare','name'],
'osm_query' : """amenity='hospital' or healthcare='hospital' or
building='hospital' or building='clinic' or
amenity='clinic' or healthcare='clinic' or
amenity='doctors' or healthcare='doctors'
"""},
'water' : {
'osm_keys' : ['man_made','pump','pipeline','emergency','name'],
'osm_query' : """man_made='water_well' or man_made='water_works' or
man_made='water_tower' or
man_made='reservoir_covered' or
landuse='reservoir' or
(man_made='pipeline' and substance='water') or
(pipeline='substation' and substance='water') or
pump='powered' or pump='manual' or pump='yes' or
emergency='fire_hydrant' or
(man_made='storage_tank' and content='water')"""},
'telecom' : {
'osm_keys' : ['man_made','tower_type','telecom',
'communication_mobile_phone','name'],
'osm_query' : """tower_type='communication' or man_made='mast' or
communication_mobile_phone='*' or
telecom='antenna' or
telecom='poles' or communication='pole' or
telecom='central_office' or
telecom='street_cabinet' or
telecom='exchange' or telecom='data_center' or
telecom='distribution_point' or
telecom='connection_point' or
telecom='line' or communication='line' or
utility='telecom'"""},
'road' : {
'osm_keys' : ['highway','name','maxspeed','lanes','surface'],
'osm_query' : """highway in ('motorway', 'motorway_link', 'trunk', 'trunk_link',
'primary', 'primary_link', 'secondary', 'secondary_link', 'tertiary',
'tertiary_link', 'residential', 'road', 'unclassified')
"""},
'main_road' : {
'osm_keys' : ['highway','name','maxspeed','lanes','surface'],
'osm_query' : """highway in ('primary', 'primary_link', 'secondary',
'secondary_link', 'tertiary', 'tertiary_link', 'trunk', 'trunk_link',
'motorway', 'motorway_link')
"""},
'rail' : {
'osm_keys' : ['railway','name','gauge','electrified','voltage'],
'osm_query' : """railway='rail' or railway='tram' or
railway='subway' or railway='narrow_gauge' or
railway='light_rail' or
railway='station' or railway='platform' or
railway='stop' or railway='tram_stop' or
railway='signal' or railway='switch'"""},
'air' : {
'osm_keys' : ['aeroway','name'],
'osm_query' : """aeroway='aerodrome'"""},
'gas' : {
'osm_keys' : ['man_made','pipeline', 'utility','name'],
'osm_query' : """(man_made='pipeline' and substance='gas') or
(pipeline='substation' and substance='gas') or
(man_made='storage_tank' and content='gas') or
utility='gas'"""},
'oil' : {
'osm_keys' : ['pipeline','man_made','amenity','name'],
'osm_query' : """(pipeline='substation' and substance='oil') or
(man_made='pipeline' and substance='oil') or
man_made='petroleum_well' or
man_made='oil_refinery' or
amenity='fuel'"""},
'power' : {
'osm_keys' : ['power','voltage','utility','name'],
'osm_query' : """power='line' or power='cable' or
power='minor_line' or power='plant' or
power='generator' or power='substation' or
power='transformer' or
power='pole' or power='portal' or
power='tower' or power='terminal' or
power='switch' or power='catenary_mast' or
utility='power'"""},
'wastewater' : {
'osm_keys' : ['reservoir_type','man_made','utility','natural',
'name'],
'osm_query' : """reservoir_type='sewage' or
(man_made='storage_tank' and content='sewage') or
(man_made='pipeline' and substance='sewage') or
substance='waterwaste' or
substance='wastewater' or
(natural='water' and water='wastewater') or
man_made='wastewater_plant' or
man_made='wastewater_tank' or
utility='sewerage'"""},
'food' : {
'osm_keys' : ['shop','name'],
'osm_query' : """shop='supermarket' or shop='greengrocer' or
shop='grocery' or shop='general' or
shop='bakery'"""},
'buildings' : {
'osm_keys' : ['building','amenity','name'],
'osm_query' : """building='yes' or building='house' or
building='residential' or building='detached' or
building='hut' or building='industrial' or
building='shed' or building='apartments'"""}
}