Conversione del file osm in shapefile (o frame di dati) in R


15

Oggi stavo cercando uno shapefile stradale per l'Australia. Ho finito per andare a Geofabrik . Open Street Map ha dati in .osmformato. Ma non ne hanno uno .shpper l'Australia.

Se possibile, desidero convertire i osmfile in shapefilesR. Ho cercato, ma non ho ancora trovato soluzioni. C'è un modo per farlo? In alternativa, è possibile leggere i file osm in R e convertire i dati in frame di dati in modo da poter disegnare figure usando ggplot2?

Ho ottenuto il seguente grafico della Nuova Zelanda usando due shapefile con maptoolse ggplot2. Idealmente, voglio produrre una mappa simile dell'Australia.

inserisci qui la descrizione dell'immagine


Cosa vuoi fare con i file di strada: visualizzali semplicemente su una mappa o qualche tipo di analisi? Gli Shapefile hanno alcune limitazioni; potresti stare meglio usando un altro formato!
Simbamangu,

@Simbamangu Voglio visualizzare inizialmente le strade su una mappa. Se non lo shapefile, quale formato mi consiglia di utilizzare con R?
jazzurro,

Risposte:


10

Questa non è una soluzione R, ma Quantum GIS (QGIS) è un ottimo modo per ottenere ciò che desideri.

Puoi semplicemente caricare il file .osm (strumento Aggiungi vettore), fare clic con il pulsante destro del mouse nel Sommario e salvare come file di forma ESRI.

QGIS potrebbe arrestarsi in modo anomalo con un estratto così ampio, quindi per evitare ciò è possibile utilizzare Strumenti OSM come l' API OverPass per scaricare solo ciò che è necessario utilizzando i box di delimitazione.

Il cavalcavia-Turbo API è disponibile per ottenere estratti anche, un breve tutorial su che è qui!

Ho eseguito un rapido esempio basato sui tag highway = primary e highway = primary_link (lo schema di tagging delle autostrade OSM può essere visto qui! ) Usando la procedura guidata su Overpass-Turbo e l'immagine qui sotto è stata il risultato per Victoria.

Ho quindi esportato i dati come GeoJSON, li ho caricati in QGIS, quindi ho salvato il risultato come file di forma. (La seconda immagine mostra le linee e i poligoni caricati in QGIS)

L'altra alternativa è scaricare il file PBF o OSM per l'area da GeoFabrik e sottoinsieme i dati estraendo i tag highway = * usando l' osmosi . Se desideri aggiornare i tuoi dati su base regolare, l'osmosi sarebbe il modo consigliato di procedere. Se si tratta di un estratto una tantum, il cavalcavia sarebbe probabilmente più semplice, anche se è necessario farlo in scatole di delimitazione più piccole a causa delle limitazioni di memoria. Dovresti semplicemente applicare le stesse query di cavalcavia a caselle di delimitazione diverse.

Highway = Risultati OverPass-Turbo primario

GeoJSON esportato caricato in QGIS


2
Nat è semplice come pensi: australia.osm.pbf ha una dimensione di 195 MB (compressa), quindi suppongo che QGIS si arresti in modo anomalo per caricare tutti i dati. Suggerisco di filtrare le informazioni stradali desiderate con osmfilter o osmosi prima di fornire a QGIS i dati.
AndreJ,

@Andre, punto valido, aggiornerà la risposta in modo appropriato!
Mark Cupitt,

1
Grazie mille per avermi fatto conoscere un altro modo di gestire il mio compito. Ho imparato qualcosa di nuovo da te. Saluti.
jazzurro,

10

@jazzurro, puoi farlo perfettamente con R, basta cercare il pacchetto osmar! Leggi la documentazione di osmar (osmar.r-forge.r-project.org/RJpreprint.pdf). A pagine 11 pagg. Puoi trovare un esempio dettagliato per l'estrazione di strade / autostrade dai tag corrispondenti per munich.osm! Dopo aver estratto ed estratto i dati da un file planet per l'Australia, puoi convertire in qualsiasi formato desideri!

Modificare:

Poiché alcuni commentatori si lamentano della mancanza di esempi, posterò un esempio dai documenti. IMHO non sarebbe necessario ridigitare qui esempi esistenti, vero?

library(maptools)
library(osmar)
url <- "http://osmar.r-forge.r-project.org/"
file <- "muenchen.osm.gz"
download.file(sprintf("%s%s", url, file), file)
unzip("gzip -d muenchen.osm.gz") # gzip is linux only, on windows I unzipped this manually with 7zip!

src <- osmsource_osmosis(file = "muenchen.osm")
muc_bbox <- center_bbox(11.575278, 48.137222, 3000, 3000)
muc <- get_osm(muc_bbox, src)
muc
summary(muc)

hw_ids <- find(muc, way(tags(k == "highway")))
hw_ids <- find_down(muc, way(hw_ids))
hw <- subset(muc, ids = hw_ids)

plot(muc)
plot_ways(hw, add = TRUE, col = "green")

# convert to spatial object (SpatialLinesDataFrame)
# and save to whatever format you like..
hw_line <- as_sp(hw, "lines")

inserisci qui la descrizione dell'immagine


Grazie mille per il link. Ho visto uno o due post relativi al pacchetto. Ma non ero sicuro che il pacchetto potesse convertire i .osmfile in frame di dati. Dando una rapida occhiata, sembra che non esista un modo diretto per convertire i .osmfile in frame di dati. O c'è?
jazzurro,

Leggi la documentazione di osmar ( osmar.r-forge.r-project.org/RJpreprint.pdf ) .. Alle pagine 11 pagg. Puoi trovare un esempio dettagliato per estrarre strade / autostrade dai tag corrispondenti per munich.osm! Dopo aver estratto ed estratto i dati da un file planet per l'Australia, puoi convertire in qualsiasi formato desideri! ps: rimosso l'altro collegamento dall'OP in quanto non risolveva la questione dei file osm ..
Kay,

1
Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post.
SS_Rebelious,

@SS_Rebelious, fornisce chiaramente una risposta. Non so cosa stai cercando di dire.
Kay,

@Kay Per migliorare questa risposta, è possibile spiegare come utilizzare il pacchetto osmar per ottenere i risultati desiderati.
Zaccaria,

7

OK, ecco la risposta corretta:

  • Assicurarsi che rgdal(versione> = 1.0.4) sia installato

    install.packages('rgdal')
    packageVersion('rgdal')
    
    [1]1.0.4
  • Assicurarsi che gdal(versione> = 1.11.0) sia installato

    library(rgdal)
    getGDALVersionInfo()
    
    [1] "GDAL 1.11.2, released 2015/02/10"
  • Assicurarsi che gdalsia compilato con il supporto Expat / OSM e SQLite:

    c('SQLite', 'OSM') %in% ogrDrivers()$name
    
    [1] TRUE TRUE
  • Assicurati di sapere quale layer desideri salvare come shapefile:

    ogrListLayers('filename.osm.pbf')
    
    [1] "points" "lines" "multilinestrings" "multipolygons"
    attr(,"driver")
    [1] "OSM"
    attr(,"nlayers")
    [1] 4
  • Siamo pronti ad andare:

    osm <- readOGR('filename.osm.pbf', 'lines')
    writeOGR(osm, 'myshapedir', 'mylayer', driver = 'ESRI Shapefile')

Dopo aver letto il file tramite readOGR, segui queste linee guida per imparare a tracciarlo ggplot2.

Nota che puoi anche leggere i .osmfile in formato XML, assicurati solo che non siano compressi (ovvero l'estensione .osmnon lo è .osm.bz2) Ma prova a usare i file .osm.pbf poiché sono molto più piccoli.


a proposito, l'ultima compilata rgdalper Windows per è 0.9-3 e ritorna FALSE FALSEperc('SQLite', 'OSM') %in% ogrDrivers()$name
aaryno il

Perché rgdalpuoi provare il pacchetto sorgente ( cran.r-project.org/src/contrib/rgdal_1.0-4.tar.gz ) o binario oldrel ( cran.r-project.org/bin/windows/contrib/3.1/ rgdal_1.0-4.zip ). Per quanto riguarda il GDALbinario di Windows, non lo so, è possibile presentare una segnalazione di bug per GDALproiettare e richiedere che il supporto di Expat e SQLite debba essere abilitato nei GDALbinari di Windows .
gkcn,

Oppure puoi costruirlo tu stesso usando MinGW su Windows e abilitare Expat e SQLite: trac.osgeo.org/gdal/wiki/BuildingWithMinGW
gkcn

1

osm2shp.ru qui è possibile scaricare i dati openstreetmap in formato shapefile. Dati divisi per regioni: Nord e Sud America, Australia e Oceania, Africa, Europa e Asia.61 livelli da scaricare. Dati filtrati in base alle condizioni "Funzioni mappa".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.