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 and Causal ML (August 10, 2023). Available at SSRN: https://www.ssrn.com/abstract=4537867
Usage Example
# 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")
points <- st_read("djibouti-latest.osm.pbf", "points")
lines <- st_read("djibouti-latest.osm.pbf", "lines")
polygons <- st_read("djibouti-latest.osm.pbf", "multipolygons")
# Classify features using the included classifications
library(osmclass)
points_class <- osm_classify(points, osm_point_polygon_class)
polygons_class <- osm_classify(polygons, osm_point_polygon_class)
lines_class <- osm_classify(lines, osm_line_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_info <- lines |> ss(lines_class$classified) |>
rsplit(lines_class$main_cat[lines_class$classified]) |>
get_vars(names(osm_line_info_tags), regex = TRUE)
lines_info <- Map(osm_tags_df, lines_info, osm_line_info_tags[names(lines_info)])
str(lines_info)
# Get 'other_tags' of points layer as list
other_point_tags <- osm_other_tags_list(points$other_tags, values = TRUE)
str(other_point_tags)
Executed Example
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
points <- st_read("djibouti-latest.osm.pbf", "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
lines <- st_read("djibouti-latest.osm.pbf", "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
polygons <- st_read("djibouti-latest.osm.pbf", "multipolygons")
#> 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)
points_class <- osm_classify(points, osm_point_polygon_class)
polygons_class <- osm_classify(polygons, osm_point_polygon_class)
lines_class <- osm_classify(lines, osm_line_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_info <- lines |> ss(lines_class$classified) |>
rsplit(lines_class$main_cat[lines_class$classified]) |>
get_vars(names(osm_line_info_tags), regex = TRUE)
lines_info <- Map(osm_tags_df, lines_info, osm_line_info_tags[names(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
other_point_tags <- osm_other_tags_list(points$other_tags, values = TRUE)
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