Functions to classify Open Street Map (OSM) features into meaningful functional or analytical categories
Designed for OSM PBF files, e.g. from https://download.geofabrik.de/, imported as spatial data
frames using sf::st_read()
. A classification consists of a
list of categories that are assigned to certain OSM tags and values,
also specified as a list. Given a layer from an OSM PBF file and a
classification, the main osm_classify()
function returns a
classification data frame giving, for each feature, the primary and
alternative categories (if there is overlap) assigned, and the tag(s)
and value(s) matched on. The package also contains a classification of
OSM features by economic function, based on Krantz (2023).
Krantz, Sebastian, Mapping Africa’s Infrastructure Potential with Geospatial Big Data, Causal ML, and XAI (August 10, 2023). Available at SSRN: https://www.ssrn.com/abstract=4537867
# Download OSM PBF file for Djibouti
download.file("https://download.geofabrik.de/africa/djibouti-latest.osm.pbf",
destfile = "djibouti-latest.osm.pbf", mode = "wb")
# Import OSM data for Djibouti
library(sf)
st_layers("djibouti-latest.osm.pbf")
<- st_read("djibouti-latest.osm.pbf", "points")
points <- st_read("djibouti-latest.osm.pbf", "lines")
lines <- st_read("djibouti-latest.osm.pbf", "multipolygons")
polygons
# Classify features using the included classifications
library(osmclass)
<- osm_classify(points, osm_point_polygon_class)
points_class <- osm_classify(polygons, osm_point_polygon_class)
polygons_class <- osm_classify(lines, osm_line_class)
lines_class
# See what proportion of the data we have classified
sum(points_class$classified)/nrow(points)
sum(polygons_class$classified)/nrow(polygons)
sum(lines_class$classified)/nrow(lines)
# Get some additional info for lines
library(collapse)
<- lines |> ss(lines_class$classified) |>
lines_info rsplit(lines_class$main_cat[lines_class$classified]) |>
get_vars(names(osm_line_info_tags), regex = TRUE)
<- Map(osm_tags_df, lines_info, osm_line_info_tags[names(lines_info)])
lines_info str(lines_info)
# Get 'other_tags' of points layer as list
<- osm_other_tags_list(points$other_tags, values = TRUE)
other_point_tags str(other_point_tags)
options(width = 200)
# Download OSM PBF file for Djibouti
download.file("https://download.geofabrik.de/africa/djibouti-latest.osm.pbf",
destfile = "djibouti-latest.osm.pbf", mode = "wb")
# Import Data
library(sf)
#> Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE
st_layers("djibouti-latest.osm.pbf")
#> Driver: OSM
#> Available layers:
#> layer_name geometry_type features fields crs_name
#> 1 points Point NA 10 WGS 84
#> 2 lines Line String NA 10 WGS 84
#> 3 multilinestrings Multi Line String NA 4 WGS 84
#> 4 multipolygons Multi Polygon NA 25 WGS 84
#> 5 other_relations Geometry Collection NA 4 WGS 84
<- st_read("djibouti-latest.osm.pbf", "points")
points #> Reading layer `points' from data source `/private/var/folders/zp/cc61fbb560g9pqns4g2wtzz40000gn/T/RtmpYmbUJM/reprex-162c639d7c992-smoky-macaw/djibouti-latest.osm.pbf' using driver `OSM'
#> Simple feature collection with 8610 features and 10 fields
#> Geometry type: POINT
#> Dimension: XY
#> Bounding box: xmin: 41.76667 ymin: 10.41907 xmax: 43.45367 ymax: 12.90639
#> Geodetic CRS: WGS 84
<- st_read("djibouti-latest.osm.pbf", "lines")
lines #> Reading layer `lines' from data source `/private/var/folders/zp/cc61fbb560g9pqns4g2wtzz40000gn/T/RtmpYmbUJM/reprex-162c639d7c992-smoky-macaw/djibouti-latest.osm.pbf' using driver `OSM'
#> Simple feature collection with 17071 features and 10 fields
#> Geometry type: LINESTRING
#> Dimension: XY
#> Bounding box: xmin: 32.48287 ymin: -4.058333 xmax: 55.16667 ymax: 29.94195
#> Geodetic CRS: WGS 84
<- st_read("djibouti-latest.osm.pbf", "multipolygons")
polygons #> Reading layer `multipolygons' from data source `/private/var/folders/zp/cc61fbb560g9pqns4g2wtzz40000gn/T/RtmpYmbUJM/reprex-162c639d7c992-smoky-macaw/djibouti-latest.osm.pbf' using driver `OSM'
#> Simple feature collection with 145514 features and 25 fields
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: 41.67136 ymin: 10.91495 xmax: 43.6579 ymax: 12.79231
#> Geodetic CRS: WGS 84
# Classify Features
library(osmclass)
<- osm_classify(points, osm_point_polygon_class)
points_class <- osm_classify(polygons, osm_point_polygon_class)
polygons_class <- osm_classify(lines, osm_line_class)
lines_class
# See Results
subset(points_class, classified)
#> classified main_cat main_tag main_tag_value alt_cats alt_tags_values
#> 1: TRUE transport highway traffic_signals <NA> <NA>
#> 2: TRUE transport highway traffic_signals <NA> <NA>
#> 3: TRUE transport highway traffic_signals <NA> <NA>
#> 4: TRUE transport highway traffic_signals <NA> <NA>
#> 5: TRUE transport highway traffic_signals <NA> <NA>
#> ---
#> 2850: TRUE transport aeroway holding_position <NA> <NA>
#> 2851: TRUE transport aeroway holding_position <NA> <NA>
#> 2852: TRUE transport aeroway holding_position <NA> <NA>
#> 2853: TRUE transport aeroway holding_position <NA> <NA>
#> 2854: TRUE utilities_other man_made water_well <NA> <NA>
subset(polygons_class, classified)
#> classified main_cat main_tag main_tag_value alt_cats alt_tags_values
#> 1: TRUE military landuse military <NA> <NA>
#> 2: TRUE residential building apartments <NA> <NA>
#> 3: TRUE military landuse military <NA> <NA>
#> 4: TRUE sports leisure track sports sport:"athletics"
#> 5: TRUE residential landuse residential <NA> <NA>
#> ---
#> 3416: TRUE farming landuse farmyard <NA> <NA>
#> 3417: TRUE residential landuse residential <NA> <NA>
#> 3418: TRUE residential landuse residential <NA> <NA>
#> 3419: TRUE residential landuse residential <NA> <NA>
#> 3420: TRUE residential landuse residential <NA> <NA>
subset(lines_class, classified)
#> classified main_cat main_tag main_tag_value alt_cats alt_tags_values
#> 1: TRUE road highway secondary <NA> <NA>
#> 2: TRUE road highway secondary <NA> <NA>
#> 3: TRUE road highway tertiary <NA> <NA>
#> 4: TRUE road highway primary <NA> <NA>
#> 5: TRUE road highway secondary <NA> <NA>
#> ---
#> 1922: TRUE aeroway aeroway runway <NA> <NA>
#> 1923: TRUE aeroway aeroway stopway <NA> <NA>
#> 1924: TRUE aeroway aeroway runway <NA> <NA>
#> 1925: TRUE aeroway aeroway runway <NA> <NA>
#> 1926: TRUE aeroway aeroway runway <NA> <NA>
# See what proportion of the data we have classified
sum(points_class$classified)/nrow(points)
#> [1] 0.331475
sum(polygons_class$classified)/nrow(polygons)
#> [1] 0.02350289
sum(lines_class$classified)/nrow(lines)
#> [1] 0.1128229
# Get some additional Info for Lines
library(collapse)
#> collapse 1.9.6.9500, see ?`collapse-package` or ?`collapse-documentation`
#>
#> Attaching package: 'collapse'
#> The following object is masked from 'package:stats':
#>
#> D
<- lines |> ss(lines_class$classified) |>
lines_info rsplit(lines_class$main_cat[lines_class$classified]) |>
get_vars(names(osm_line_info_tags), regex = TRUE)
<- Map(osm_tags_df, lines_info, osm_line_info_tags[names(lines_info)])
lines_info str(lines_info)
#> List of 8
#> $ aeroway :Classes 'data.table' and 'data.frame': 149 obs. of 8 variables:
#> ..$ ref : chr [1:149] NA NA NA NA ...
#> ..$ name : chr [1:149] NA NA NA NA ...
#> ..$ man_made : chr [1:149] NA NA NA NA ...
#> ..$ aerialway: chr [1:149] NA NA NA NA ...
#> ..$ surface : chr [1:149] NA NA NA NA ...
#> ..$ highway : chr [1:149] NA NA NA NA ...
#> ..$ length : chr [1:149] NA NA NA NA ...
#> ..$ width : chr [1:149] NA NA NA NA ...
#> ..- attr(*, ".internal.selfref")=<externalptr>
#> $ pipeline:Classes 'data.table' and 'data.frame': 29 obs. of 4 variables:
#> ..$ name : chr [1:29] NA NA NA NA ...
#> ..$ man_made : chr [1:29] "pipeline" "pipeline" "pipeline" "pipeline" ...
#> ..$ substance: chr [1:29] "hydrocarbons" "hydrocarbons" "hydrocarbons" "water" ...
#> ..$ location : chr [1:29] "overground" "overground" "overground" NA ...
#> ..- attr(*, ".internal.selfref")=<externalptr>
#> $ power :Classes 'data.table' and 'data.frame': 66 obs. of 7 variables:
#> ..$ name : chr [1:66] NA NA "Adagalla أداغالا" NA ...
#> ..$ description: chr [1:66] NA NA NA NA ...
#> ..$ operator : chr [1:66] NA NA NA NA ...
#> ..$ man_made : chr [1:66] NA NA NA NA ...
#> ..$ power : chr [1:66] "line" "line" "line" "substation" ...
#> ..$ location : chr [1:66] NA NA NA NA ...
#> ..$ start_date : chr [1:66] NA NA NA NA ...
#> ..- attr(*, ".internal.selfref")=<externalptr>
#> $ railway :Classes 'data.table' and 'data.frame': 234 obs. of 15 variables:
#> ..$ name : chr [1:234] "Ethio-Djibouti Railways سكة حديد أديس أبابا - جيبوتي" "سكة حديد أديس أبابا - جيبوتي" "سكة حديد أديس أبابا - جيبوتي" "سكة حديد أديس أبابا - جيبوتي" ...
#> ..$ operator : chr [1:234] "شركة السكك الحديدية الجيبوتية الإثيوبية Compagnie du chemin de fer Djibouto-Ethiopien\"" "شركة السكك الحديدية الجيبوتية الإثيوبية Compagnie du chemin de fer Djibouto-Ethiopien\"" "شركة السكك الحديدية الجيبوتية الإثيوبية Compagnie du chemin de fer Djibouto-Ethiopien\"" NA ...
#> ..$ usage : chr [1:234] "main" NA NA "main" ...
#> ..$ service : chr [1:234] NA "yard" "yard" NA ...
#> ..$ man_made : chr [1:234] NA NA NA NA ...
#> ..$ railway : chr [1:234] "abandoned" "abandoned" "abandoned" "disused" ...
#> ..$ tracks : chr [1:234] NA NA NA NA ...
#> ..$ electrified: chr [1:234] "no" "no" "no" "no" ...
#> ..$ embankment : chr [1:234] NA NA NA NA ...
#> ..$ gauge : chr [1:234] "1000" "1000" "1000" "1000" ...
#> ..$ voltage : chr [1:234] NA NA NA NA ...
#> ..$ frequency : chr [1:234] NA NA NA NA ...
#> ..$ historic : chr [1:234] NA NA NA NA ...
#> ..$ width : chr [1:234] NA NA NA NA ...
#> ..$ start_date : chr [1:234] "1917" "1917" "1917" "1917" ...
#> ..- attr(*, ".internal.selfref")=<externalptr>
#> $ road :Classes 'data.table' and 'data.frame': 622 obs. of 13 variables:
#> ..$ ref : chr [1:622] NA NA NA NA ...
#> ..$ name : chr [1:622] "Avenue Ali Bahdon شارع علي بهدون" "Route de la Siesta طريق القيلولة" NA NA ...
#> ..$ description: chr [1:622] NA NA NA NA ...
#> ..$ man_made : chr [1:622] NA NA NA NA ...
#> ..$ highway : chr [1:622] "secondary" "secondary" "tertiary" "primary" ...
#> ..$ lanes : chr [1:622] NA NA NA NA ...
#> ..$ lit : chr [1:622] NA NA NA NA ...
#> ..$ maxspeed : chr [1:622] NA NA NA NA ...
#> ..$ oneway : chr [1:622] "yes" "no" NA "yes" ...
#> ..$ surface : chr [1:622] NA NA NA NA ...
#> ..$ smoothness : chr [1:622] NA NA NA NA ...
#> ..$ tracktype : chr [1:622] NA NA NA NA ...
#> ..$ width : chr [1:622] NA NA NA NA ...
#> ..- attr(*, ".internal.selfref")=<externalptr>
#> $ storage :Classes 'data.table' and 'data.frame': 38 obs. of 3 variables:
#> ..$ name : chr [1:38] NA NA NA NA ...
#> ..$ man_made: chr [1:38] "storage_tank" "storage_tank" "storage_tank" "storage_tank" ...
#> ..$ content : chr [1:38] NA "fuel" "fuel" "fuel" ...
#> ..- attr(*, ".internal.selfref")=<externalptr>
#> $ telecom :Classes 'data.table' and 'data.frame': 7 obs. of 3 variables:
#> ..$ name : chr [1:7] "FLAG Europe-Asia" "FLAG Europe-Asia" "FLAG Europe-Asia" "FLAG Europe-Asia" ...
#> ..$ man_made: chr [1:7] NA NA NA NA ...
#> ..$ location: chr [1:7] NA NA NA NA ...
#> ..- attr(*, ".internal.selfref")=<externalptr>
#> $ waterway:Classes 'data.table' and 'data.frame': 779 obs. of 6 variables:
#> ..$ name : chr [1:779] "Oued Gôba'ad" "Essalou ويما" "Las Dawwa'o" "Oued D'Ambouli وادي أمبولي" ...
#> ..$ description : chr [1:779] NA NA NA NA ...
#> ..$ man_made : chr [1:779] NA NA NA NA ...
#> ..$ intermittent: chr [1:779] "yes" "yes" "yes" "yes" ...
#> ..$ width : chr [1:779] "11" NA NA NA ...
#> ..$ tidal : chr [1:779] NA NA NA NA ...
#> ..- attr(*, ".internal.selfref")=<externalptr>
# Get 'other_tags' of points layer as list
<- osm_other_tags_list(points$other_tags, values = TRUE)
other_point_tags str(other_point_tags)
#> List of 8610
#> $ :List of 193
#> ..$ GNS:dsg_code : chr "PPLC"
#> ..$ GNS:dsg_name : chr "populated place"
#> ..$ GNS:id : chr "-2034412"
#> ..$ GNS:modify_date : chr "2018-04-11"
#> ..$ admin_level : chr "2"
#> ..$ alt_name:ar : chr "دجبت;غإبت;جبت;جبوت;جيبوتي;جيبوتى;دجيبوتي;مدينة جيبوتي"
#> ..$ capital : chr "yes"
#> ..$ capital_ISO3166-1: chr "yes"
#> ..$ is_capital : chr "country"
#> ..$ name:ace : chr "Djibouti"
#> ..$ name:af : chr "Djiboeti"
#> ..$ name:am : chr "ጅቡቲ"
#> ..$ name:an : chr "Chibuti"
#> ..$ name:ar : chr "جيبوتي"
#> ..$ name:arz : chr "جيبوتي"
#> ..$ name:ast : chr "Xibuti"
#> ..$ name:az : chr "Cibuti"
#> ..$ name:azb : chr "جیبوتی"
#> ..$ name:ba : chr "Джибути"
#> ..$ name:bat-smg : chr "Džėbotis"
#> ..$ name:bcl : chr "Dibouti"
#> ..$ name:be : chr "Джыбуці"
#> ..$ name:bg : chr "Джибути"
#> ..$ name:bjn : chr "Djibouti"
#> ..$ name:bn : chr "জিবুতি"
#> ..$ name:bo : chr "ཇི་བའོ་ཊི།"
#> ..$ name:bpy : chr "ডিজিবোটি"
#> ..$ name:br : chr "Djibouti"
#> ..$ name:bs : chr "Djibouti"
#> ..$ name:bxr : chr "Джибути"
#> ..$ name:ca : chr "Djibouti"
#> ..$ name:ce : chr "Джибути"
#> ..$ name:ceb : chr "Yibuti"
#> ..$ name:ckb : chr "جیبووتی"
#> ..$ name:crh : chr "Cibuti"
#> ..$ name:cs : chr "Džíbutí"
#> ..$ name:cv : chr "Джибути"
#> ..$ name:cy : chr "Djibouti"
#> ..$ name:da : chr "Djibouti"
#> ..$ name:de : chr "Dschibuti"
#> ..$ name:diq : chr "Cibuti"
#> ..$ name:dv : chr "ޖިބުތީ"
#> ..$ name:ee : chr "Djibouti"
#> ..$ name:el : chr "Τζιμπουτί"
#> ..$ name:en : chr "Djibouti"
#> ..$ name:eo : chr "Ĝibutio"
#> ..$ name:es : chr "Yibuti"
#> ..$ name:et : chr "Djibouti"
#> ..$ name:eu : chr "Djibuti"
#> ..$ name:ext : chr "Yibuti"
#> ..$ name:fa : chr "جیبوتی"
#> ..$ name:fi : chr "Djibouti"
#> ..$ name:fr : chr "Djibouti"
#> ..$ name:frp : chr "Dj·iboti"
#> ..$ name:fy : chr "Dzjibûty"
#> ..$ name:ga : chr "Diobúití"
#> ..$ name:gag : chr "Cibuti"
#> ..$ name:gd : chr "Djibouti"
#> ..$ name:gl : chr "Xibutí"
#> ..$ name:gv : chr "Djibouti"
#> ..$ name:he : chr "ג'יבוטי"
#> ..$ name:hi : chr "जीबूती"
#> ..$ name:hif : chr "Djibouti"
#> ..$ name:hr : chr "Djibouti"
#> ..$ name:hsb : chr "Dźibuti"
#> ..$ name:ht : chr "Djibouti"
#> ..$ name:hu : chr "Dzsibuti"
#> ..$ name:hy : chr "Ջիբութի"
#> ..$ name:ia : chr "Djibouti"
#> ..$ name:id : chr "Djibouti"
#> ..$ name:ie : chr "Djibouti"
#> ..$ name:ilo : chr "Djibouti"
#> ..$ name:io : chr "Djibuti"
#> ..$ name:is : chr "Djíbútí"
#> ..$ name:it : chr "Gibuti"
#> ..$ name:ja : chr "ジブチ市"
#> ..$ name:jv : chr "Djibouti"
#> ..$ name:ka : chr "ჯიბუტი"
#> ..$ name:kab : chr "Jibuti"
#> ..$ name:kab-Arab : chr "جيبوتي"
#> ..$ name:kg : chr "Djibuti"
#> ..$ name:ki : chr "Djibouti"
#> ..$ name:kk : chr "Джибути"
#> ..$ name:kk-Arab : chr "دجىيبۋتىي"
#> ..$ name:kmr : chr "جیبووتی"
#> ..$ name:kn : chr "ಜಿಬೂತೀ"
#> ..$ name:ko : chr "지부티"
#> ..$ name:ks : chr "جیبوتی"
#> ..$ name:ku : chr "Cîbûtî"
#> ..$ name:ku-Arab : chr "جیبووتی"
#> ..$ name:kw : chr "Sita Jibouti"
#> ..$ name:ky : chr "Жибути шаары"
#> ..$ name:la : chr "Urbs Dzibutum"
#> ..$ name:lb : chr "Dschibuti"
#> ..$ name:li : chr "Djibouti"
#> ..$ name:lij : chr "Gibuti"
#> ..$ name:lmo : chr "Djibouti"
#> ..$ name:ln : chr "Djibuti"
#> ..$ name:lrc : chr "جیبۊتی"
#> .. [list output truncated]
#> $ :List of 1
#> ..$ traffic_signals: chr "signal"
#> $ : NULL
#> $ : NULL
#> $ : NULL
#> $ :List of 1
#> ..$ noexit: chr "yes"
#> $ :List of 10
#> ..$ GNS:dsg_code : chr "PPL"
#> ..$ GNS:dsg_name : chr "populated place"
#> ..$ GNS:id : chr "231295"
#> ..$ GNS:modify_date: chr "2000-11-15"
#> ..$ alt_name : chr "Goubetto;Goubatto;Goubétto"
#> ..$ alt_name:ar : chr "غوبتّو"
#> ..$ name:ar : chr "غوبتو"
#> ..$ name:en : chr "Goubetto"
#> ..$ name:fr : chr "Goubetto"
#> ..$ wikidata : chr "Q5588130\""
#> $ :List of 1
#> ..$ traffic_signals: chr "signal"
#> $ :List of 1
#> ..$ railway: chr "level_crossing"
#> $ :List of 5
#> ..$ name:ar: chr "الجزر موشا"
#> ..$ name:en: chr "Moucha Islands"
#> ..$ name:fr: chr "Îles Moucha"
#> ..$ name:hu: chr "Moucha-szigetek"
#> ..$ sport : chr "scuba_diving\""
#> $ :List of 2
#> ..$ condition: chr "extinct"
#> ..$ natural : chr "volcano"
#> $ :List of 17
#> ..$ GNS:dsg_code : chr "PPLA"
#> ..$ GNS:dsg_name : chr "populated place"
#> ..$ GNS:id : chr "-2032942"
#> ..$ GNS:modify_date : chr "2018-04-10"
#> ..$ alt_name : chr "`Ali Sabieh;Ali Sabiè;Ali Sabie;Ali Sabiet;‘Ali Sabîẖ;`Ali Sabih;‘Ali Sabieh;‘Ali Sabieh علي صبيح"
#> ..$ alt_name:ar : chr "علي سبح"
#> ..$ alt_name:en : chr "`Ali Sabih"
#> ..$ name:ar : chr "علي صبيح"
#> ..$ name:cs : chr "Ali Zabí"
#> ..$ name:en : chr "Ali Sabieh"
#> ..$ name:fr : chr "Ali Sabieh"
#> ..$ name:ru : chr "Али-Сабих"
#> ..$ name:so : chr "Cali Sabiix"
#> ..$ population : chr "71230"
#> ..$ source:population: chr "French Wikipedia"
#> ..$ wikidata : chr "Q842854"
#> ..$ wikipedia : chr "ar:علي صبيح\""
#> $ :List of 20
#> ..$ GNS:dsg_code : chr "PPLA"
#> ..$ GNS:dsg_name : chr "populated place"
#> ..$ GNS:id : chr "-2037463"
#> ..$ GNS:modify_date: chr "2018-04-10"
#> ..$ alt_name : chr "Tagiura;Tajura;Tadjura;Tadjoura;Tadjoura تاجورة"
#> ..$ alt_name:ar : chr "تاجورة;تدجور;تغإأر;تجر;تدجر"
#> ..$ is_capital : chr "county"
#> ..$ name:aa : chr "Tagórri"
#> ..$ name:ar : chr "تجرة"
#> ..$ name:de : chr "Tadschura"
#> ..$ name:en : chr "Tadjoura"
#> ..$ name:es : chr "Tadyura"
#> ..$ name:fa : chr "تاجوره"
#> ..$ name:fr : chr "Tadjourah"
#> ..$ name:ru : chr "Таджура"
#> ..$ name:so : chr "Tajuura"
#> ..$ name:ur : chr "تاجورہ"
#> ..$ population : chr "25000"
#> ..$ wikidata : chr "Q820972"
#> ..$ wikipedia : chr "ar:تجرة (جيبوتي)\""
#> $ :List of 14
#> ..$ GNS:dsg_code : chr "PPL"
#> ..$ GNS:dsg_name : chr "populated place"
#> ..$ GNS:id : chr "-2037139"
#> ..$ GNS:modify_date: chr "2000-11-15"
#> ..$ alt_name : chr "راندا;Randa"
#> ..$ alt_name:ar : chr "راندا;رند"
#> ..$ is_capital : chr "district"
#> ..$ name:aa : chr "Sūrí Randá"
#> ..$ name:ar : chr "رندة"
#> ..$ name:de : chr "Randa"
#> ..$ name:en : chr "Randa"
#> ..$ name:fr : chr "Randa"
#> ..$ name:ru : chr "Ранда"
#> ..$ wikidata : chr "Q1004708\""
#> $ :List of 37
#> ..$ GNS:dsg_code : chr "PPLA"
#> ..$ GNS:dsg_name : chr "populated place"
#> ..$ GNS:id : chr "-2034338"
#> ..$ GNS:modify_date: chr "2018-04-11"
#> ..$ alt_name : chr "Dikil;Dikkil;Dicchil;Dicchil دخيل"
#> ..$ alt_name:ar : chr "دكل;دكّل"
#> ..$ name:ar : chr "دخيل"
#> ..$ name:azb : chr "دخیل"
#> ..$ name:be : chr "Дыхіл"
#> ..$ name:da : chr "Dikhil"
#> ..$ name:de : chr "Dikhil"
#> ..$ name:el : chr "Ντικίλ"
#> ..$ name:en : chr "Dikhil"
#> ..$ name:et : chr "Dikhil"
#> ..$ name:fa : chr "دخیل"
#> ..$ name:fr : chr "Dikhil"
#> ..$ name:id : chr "Dikhil"
#> ..$ name:it : chr "Dikhil"
#> ..$ name:ja : chr "ディキル"
#> ..$ name:ka : chr "დიკილი"
#> ..$ name:ko : chr "디킬"
#> ..$ name:ks : chr "دخیل"
#> ..$ name:lt : chr "Dikilis"
#> ..$ name:nl : chr "Dikhil (stad)"
#> ..$ name:pl : chr "Dikhil"
#> ..$ name:ro : chr "Dikhil"
#> ..$ name:ru : chr "Дикиль"
#> ..$ name:sv : chr "Dikhil"
#> ..$ name:tr : chr "Dikhil"
#> ..$ name:ur : chr "دخیل"
#> ..$ name:zh : chr "迪基勒"
#> ..$ name:zu : chr "Dikhil"
#> ..$ population : chr "35000"
#> ..$ population:date: chr "2012"
#> ..$ wikidata : chr "Q620625"
#> ..$ wikipedia : chr "ar:دخيل (مدينة)"
#> ..$ wikipedia:ar : chr "دخيل (مدينة)\""
#> $ :List of 17
#> ..$ GNS:dsg_code : chr "PPL"
#> ..$ GNS:dsg_name : chr "populated place"
#> ..$ GNS:id : chr "-2037694"
#> ..$ GNS:modify_date: chr "2009-03-18"
#> ..$ alt_name : chr "Yoboki"
#> ..$ alt_name:ar : chr "يوبوك"
#> ..$ name:ar : chr "يوبوكي"
#> ..$ name:azb : chr "یوبوکی"
#> ..$ name:de : chr "Yoboki"
#> ..$ name:en : chr "Yoboki"
#> ..$ name:fa : chr "یوبوکی"
#> ..$ name:fr : chr "Yoboki"
#> ..$ name:sv : chr "Yoboki"
#> ..$ name:ur : chr "یوبوکی"
#> ..$ population : chr "20644"
#> ..$ wikidata : chr "Q2301477"
#> ..$ wikipedia : chr "ar:يوبوكي\""
#> $ :List of 1
#> ..$ natural: chr "volcano"
#> $ :List of 15
#> ..$ GNS:dsg_code: chr "PPL"
#> ..$ GNS:id : chr "-2034456"
#> ..$ alt_name:ar : chr "دورّ"
#> ..$ name:ar : chr "درة"
#> ..$ name:azb : chr "دره"
#> ..$ name:de : chr "Dorra"
#> ..$ name:fa : chr "دره"
#> ..$ name:fr : chr "Dorra"
#> ..$ name:kk : chr "Дорра"
#> ..$ name:ru : chr "Дорра"
#> ..$ name:sv : chr "Dorra"
#> ..$ name:ur : chr "درہ"
#> ..$ type : chr "boundary"
#> ..$ wikidata : chr "Q970073"
#> ..$ wikipedia : chr "fr:Dorra\""
#> $ :List of 1
#> ..$ natural: chr "volcano"
#> $ :List of 1
#> ..$ natural: chr "volcano"
#> $ :List of 1
#> ..$ natural: chr "volcano"
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ :List of 6
#> ..$ GNS:dsg_code: chr "PPL"
#> ..$ GNS:id : chr "-2033567"
#> ..$ name:ar : chr "بالهو"
#> ..$ name:fr : chr "Balho"
#> ..$ wikidata : chr "Q804945"
#> ..$ wikipedia : chr "fr:Balho\""
#> $ :List of 13
#> ..$ GNS:dsg_code : chr "PPLA"
#> ..$ GNS:dsg_name : chr "populated place"
#> ..$ GNS:id : chr "-2036711"
#> ..$ GNS:modify_date: chr "2018-04-11"
#> ..$ alt_name : chr "Obok;Ubuk;Hayyou;Obok أوبوك"
#> ..$ alt_name:ar : chr "أوبوك;أبخ;وبوك;هيّو"
#> ..$ alt_name:en : chr "أوبوك"
#> ..$ name:ar : chr "أبخ"
#> ..$ name:en : chr "Obock"
#> ..$ name:fr : chr "Obock"
#> ..$ population : chr "8500"
#> ..$ wikidata : chr "Q860179"
#> ..$ wikipedia : chr "ar:أوبوك\""
#> $ :List of 1
#> ..$ traffic_signals: chr "signal"
#> $ :List of 1
#> ..$ traffic_signals: chr "signal"
#> $ :List of 1
#> ..$ traffic_signals: chr "signal"
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ :List of 1
#> ..$ railway: chr "level_crossing"
#> $ :List of 1
#> ..$ railway: chr "level_crossing"
#> $ :List of 1
#> ..$ railway: chr "level_crossing"
#> $ :List of 1
#> ..$ railway: chr "level_crossing"
#> $ :List of 1
#> ..$ railway: chr "level_crossing"
#> $ :List of 2
#> ..$ surface : chr "asphalt"
#> ..$ traffic_calming: chr "hump"
#> $ :List of 1
#> ..$ traffic_signals: chr "signal"
#> $ :List of 1
#> ..$ noexit: chr "yes"
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ : NULL
#> $ :List of 1
#> ..$ traffic_signals: chr "signal"
#> $ :List of 1
#> ..$ railway: chr "level_crossing"
#> $ :List of 1
#> ..$ traffic_signals: chr "signal"
#> $ :List of 1
#> ..$ traffic_signals: chr "signal"
#> $ :List of 1
#> ..$ railway: chr "level_crossing"
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ :List of 4
#> ..$ landuse : chr "military"
#> ..$ military: chr "naval_base"
#> ..$ name:ar : chr "توقف البحرية العسكرية"
#> ..$ name:fr : chr "Escale Marine Militaire\""
#> $ :List of 4
#> ..$ name:ar : chr "شابلي"
#> ..$ name:en : chr "Shabili"
#> ..$ name:fr : chr "Chebele"
#> ..$ wikidata: chr "Q5066004\""
#> $ :List of 4
#> ..$ addr:city: chr "جيبوتي"
#> ..$ name:ar : chr "الجميل"
#> ..$ name:fr : chr "AL GAMIL"
#> ..$ shop : chr "convenience\""
#> $ :List of 3
#> ..$ name:ar : chr "صاروخ"
#> ..$ name:fr : chr "Fusée"
#> ..$ tower:type: chr "observation\""
#> $ :List of 3
#> ..$ name:ar: chr "أربور"
#> ..$ name:en: chr "Orobor"
#> ..$ name:fr: chr "Orobor\""
#> $ :List of 4
#> ..$ alt_name:ar: chr "أوبوك"
#> ..$ leisure : chr "marina"
#> ..$ name:ar : chr "أبخ"
#> ..$ name:fr : chr "Obock\""
#> $ :List of 9
#> ..$ alt_name : chr "علي أدي;مخيم علي أدي"
#> ..$ alt_name:ar : chr "علي أدي;مخيم علي أدي"
#> ..$ long_name : chr "مخيم علي عدي"
#> ..$ long_name:ar: chr "مخيم علي عدي"
#> ..$ long_name:en: chr "Ali-Addeh Refugee Camp"
#> ..$ name:ar : chr "علي عدي"
#> ..$ name:en : chr "Ali Adde"
#> ..$ name:fr : chr "Ali Addé"
#> ..$ wikidata : chr "Q1753852\""
#> $ :List of 3
#> ..$ name:ar : chr "دعسبيو"
#> ..$ name:fr : chr "Daasbiyo"
#> ..$ wikidata: chr "Q15213041\""
#> $ :List of 1
#> ..$ ford: chr "yes"
#> $ :List of 10
#> ..$ GNS:dsg_code : chr "PPL"
#> ..$ GNS:dsg_name : chr "populated place"
#> ..$ GNS:id : chr "-2035639"
#> ..$ GNS:modify_date: chr "2000-11-15"
#> ..$ alt_name : chr "Hol Holl;Holl-Holl;Holhol"
#> ..$ alt_name:ar : chr "هول هولّ;هولهول"
#> ..$ alt_name:en : chr "Holhol"
#> ..$ name:ar : chr "هلهول"
#> ..$ name:en : chr "Holl-Holl"
#> ..$ name:fr : chr "Holl-Holl\""
#> $ :List of 15
#> ..$ GNS:dsg_code : chr "PPLA"
#> ..$ GNS:dsg_name : chr "populated place"
#> ..$ GNS:id : chr "-2033189"
#> ..$ GNS:modify_date: chr "2018-04-10"
#> ..$ alt_name : chr "أرتا;ارتا;`Arta;‘Arta;‘Arta أرتا"
#> ..$ alt_name:ar : chr "أرتا;ارتا;عرتا;عرت"
#> ..$ name:ar : chr "عرتا"
#> ..$ name:de : chr "Arta"
#> ..$ name:en : chr "Arta"
#> ..$ name:fa : chr "عرتا"
#> ..$ name:fr : chr "Arta"
#> ..$ name:ur : chr "عرتا"
#> ..$ population : chr "10275"
#> ..$ wikidata : chr "Q705884"
#> ..$ wikipedia : chr "ar:أرتا\""
#> $ :List of 2
#> ..$ name:ar: chr "شاطئ عرتا"
#> ..$ name:fr: chr "ARTA PLAGE\""
#> $ : NULL
#> $ :List of 1
#> ..$ name:ar: chr "TC١٢\""
#> $ :List of 1
#> ..$ name:ar: chr "MS١٢\""
#> $ :List of 3
#> ..$ landuse: chr "military"
#> ..$ name:ar: chr "نقطة المراقب كرون"
#> ..$ name:en: chr "Koron OBS point\""
#> $ : NULL
#> $ : NULL
#> $ : NULL
#> $ :List of 5
#> ..$ abandoned:aeroway: chr "aerodrome"
#> ..$ icao : chr "HDHE"
#> ..$ name:ar : chr "مطار هيركال"
#> ..$ name:fr : chr "Aérodrome d'Hercale"
#> ..$ wikidata : chr "Q5739242\""
#> $ :List of 7
#> ..$ aeroway : chr "aerodrome"
#> ..$ iata : chr "MHI"
#> ..$ icao : chr "HDMO"
#> ..$ name:ar : chr "مطار موشا"
#> ..$ name:en : chr "Moucha Airport"
#> ..$ name:fr : chr "Aérodrome de Moucha"
#> ..$ wikidata: chr "Q11824610\""
#> $ :List of 1
#> ..$ railway: chr "level_crossing"
#> $ : NULL
#> $ : NULL
#> $ :List of 1
#> ..$ railway: chr "level_crossing"
#> $ : NULL
#> $ :List of 1
#> ..$ railway: chr "level_crossing"
#> $ :List of 4
#> ..$ bicycle : chr "no"
#> ..$ foot : chr "no"
#> ..$ horse : chr "no"
#> ..$ motor_vehicle: chr "yes"
#> $ : NULL
#> $ :List of 2
#> ..$ amenity : chr "fuel"
#> ..$ wheelchair: chr "no"
#> $ :List of 4
#> ..$ long_name:ar: chr "قرية مولود"
#> ..$ name:ar : chr "مولود"
#> ..$ name:en : chr "Moulud Village"
#> ..$ name:fr : chr "Mouloud\""
#> $ :List of 4
#> ..$ addr:city: chr "جيبوتي"
#> ..$ name:ar : chr "نزل الرمال"
#> ..$ name:fr : chr "Auberge Sable"
#> ..$ tourism : chr "motel\""
#> $ :List of 4
#> ..$ addr:city: chr "جيبوتي"
#> ..$ name:ar : chr "فندق علي صبية"
#> ..$ name:fr : chr "Hôtel Ali Sabieh"
#> ..$ tourism : chr "motel\""
#> $ :List of 6
#> ..$ alt_name : chr "غورابو"
#> ..$ alt_name:ar: chr "غورابو"
#> ..$ name:ar : chr "غور آبوس"
#> ..$ name:en : chr "Gour A'Bbous"
#> ..$ name:fr : chr "Gour A'Bbous"
#> ..$ wikidata : chr "Q5584359\""
#> $ :List of 3
#> ..$ amenity: chr "car_rental"
#> ..$ name:ar: chr "مكتب وروكار"
#> ..$ name:fr: chr "Europcar Office\""
#> $ :List of 4
#> ..$ name:ar: chr "مكتب الهجرة"
#> ..$ name:en: chr "Immigration Office"
#> ..$ name:fr: chr "Bureau d'immigration"
#> ..$ office : chr "government\""
#> $ :List of 10
#> ..$ GNS:dsg_code : chr "PPL"
#> ..$ GNS:dsg_name : chr "populated place"
#> ..$ GNS:id : chr "-2037641"
#> ..$ GNS:modify_date: chr "2009-03-18"
#> ..$ alt_name : chr "Gué'a;Oue`a;Wê‘a;We`a;Ouê‘a"
#> ..$ alt_name:en : chr "Oue`a"
#> ..$ name:ar : chr "وع"
#> ..$ name:en : chr "Ouea"
#> ..$ name:fr : chr "Ouéah"
#> ..$ population : chr "5000\""
#> $ :List of 1
#> ..$ is_in:continent: chr "Africa"
#> $ :List of 1
#> ..$ is_in:continent: chr "Africa"
#> $ :List of 1
#> ..$ is_in:continent: chr "Africa"
#> $ :List of 1
#> ..$ is_in:continent: chr "Africa"
#> $ :List of 1
#> ..$ is_in:continent: chr "Africa"
#> $ :List of 1
#> ..$ is_in:continent: chr "Africa"
#> $ :List of 1
#> ..$ is_in:continent: chr "Africa"
#> $ :List of 1
#> ..$ is_in:continent: chr "Africa"
#> [list output truncated]
Created on 2023-08-11 with reprex v2.0.2