Conversion du fichier osm en fichier de formes (ou bloc de données) dans R

15

Je cherchais un fichier de formes de route pour l'Australie aujourd'hui. J'ai fini par aller chez Geofabrik . Open Street Map a des données au .osmformat. Mais ils n'en ont pas .shppour l'Australie.

Si possible, je veux convertir les osmfichiers en shapefilesutilisant R. J'ai cherché autour, mais je n'ai pas encore trouvé de solutions. Y a-t-il un moyen d'y parvenir? Alternativement, est-il possible de lire des fichiers osm en R et de convertir les données en trame de données afin que je puisse dessiner des chiffres en utilisant ggplot2?

J'ai réalisé le graphique suivant de NZ en utilisant deux fichiers de formes avec maptoolset ggplot2. Idéalement, je veux produire une carte similaire de l'Australie.

entrez la description de l'image ici

jazzurro
la source
Que voulez-vous faire avec les fichiers routiers - affichez-les simplement sur une carte ou une sorte d'analyse? Les fichiers de formes ont certaines limites; il vaut mieux utiliser un autre format!
Simbamangu
@Simbamangu Je veux d'abord afficher les routes sur une carte. Sinon, quel format recommandez-vous d'utiliser avec R?
jazzurro

Réponses:

10

Ce n'est pas une solution R, mais Quantum GIS (QGIS) est un excellent moyen de réaliser ce que vous voulez.

Vous pouvez simplement charger le fichier .osm (outil Ajouter un vecteur), cliquer dessus avec le bouton droit dans la table des matières et enregistrer sous forme de fichier ESRI.

QGIS peut planter avec un extrait aussi volumineux, donc pour éviter cela, vous pouvez utiliser les outils OSM comme l' API OverPass pour télécharger uniquement ce dont vous avez besoin en utilisant des boîtes englobantes.

L' OverPass-Turbo Api est également disponible pour obtenir des extraits, un court tutoriel sur celui-ci est ici!

J'ai exécuté un exemple rapide basé sur les balises Highway = primary et Highway = primary_link (le schéma de marquage OSM Highway peut être vu ici! ) En utilisant l'assistant sur Overpass-Turbo et l'image ci-dessous était le résultat pour Victoria.

J'ai ensuite exporté les données sous GeoJSON, les ai chargées dans QGIS, puis j'ai enregistré le résultat sous forme de fichier de forme. (La deuxième image montre les lignes et les polys chargés dans QGIS)

L'autre alternative consiste à télécharger le fichier PBF ou OSM pour la zone à partir de GeoFabrik et à sous-définir les données en extrayant les balises Highway = * en utilisant l' osmose . Si vous souhaitez mettre à jour vos données régulièrement, l'osmose serait la manière recommandée de procéder. S'il s'agit d'un extrait unique, le dépassement serait probablement plus facile, même si vous devez le faire dans des zones de délimitation plus petites en raison de limitations de mémoire. Vous devez simplement appliquer les mêmes requêtes Overpass pour différentes zones de délimitation.

Highway = Primary OverPass-Turbo Results

GeoJSON exporté chargé dans QGIS

Mark Cupitt
la source
2
Nat aussi simple que vous le pensez: le fichier australia.osm.pbf fait 195 Mo (compressé), donc je suppose qu'il va planter QGIS pour charger toutes les données. Je suggère de filtrer les informations routières souhaitées avec osmfilter ou osmose avant d' alimenter QGIS avec les données.
AndreJ
@Andre, point valide, mettra à jour la réponse de manière appropriée!
Mark Cupitt
1
Merci beaucoup de me faire connaître une autre façon de gérer ma tâche. J'ai appris quelque chose de nouveau de toi. À votre santé.
jazzurro
10

@jazzurro, vous pouvez parfaitement le faire avec R, recherchez simplement le package osmar! Lisez la documentation osmar (osmar.r-forge.r-project.org/RJpreprint.pdf). Aux pages 11 pp. Vous pouvez trouver un exemple détaillé pour extraire des routes / autoroutes par les balises correspondantes pour munich.osm! Après avoir extrait et extrait les données d'un fichier planète pour l'Australie, vous pouvez les convertir dans le format de votre choix!

Éditer:

Comme certains commentateurs se plaignaient du manque d'exemples, je posterai un exemple de la documentation. À mon humble avis, il ne serait pas nécessaire de retaper les exemples existants ici, n'est-ce pas?

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")

entrez la description de l'image ici

Kay
la source
Merci beaucoup pour le lien. J'ai vu un ou deux messages liés au package. Mais je n'étais pas sûr que le package puisse convertir des .osmfichiers en trame de données. Après avoir regardé rapidement, il semble qu'il n'y ait aucun moyen direct de convertir des .osmfichiers en trame de données. Ou y en a-t-il?
jazzurro
Lisez la documentation osmar ( osmar.r-forge.r-project.org/RJpreprint.pdf ) .. Aux pages 11 pp. Vous pouvez trouver un exemple détaillé pour extraire des routes / autoroutes par les balises correspondantes pour munich.osm! Après avoir extrait et extrait les données d'un fichier planète pour l'Australie, vous pouvez les convertir dans le format de votre choix! ps: supprimé l'autre lien de l'OP car cela ne traitait pas du traitement des fichiers osm ..
Kay
1
Cela ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article.
SS_Rebelious
@SS_Rebelious, il fournit clairement une réponse. Je ne sais pas ce que tu essaies de dire.
Kay
@Kay Pour améliorer cette réponse, vous pouvez expliquer comment utiliser le package osmar pour obtenir les résultats souhaités.
Zachary
7

OK, voici la bonne réponse:

  • Assurez-vous que rgdal(version> = 1.0.4) est installé

    install.packages('rgdal')
    packageVersion('rgdal')
    
    [1]1.0.4
  • Assurez-vous que gdal(version> = 1.11.0) est installé

    library(rgdal)
    getGDALVersionInfo()
    
    [1] "GDAL 1.11.2, released 2015/02/10"
  • Assurez-vous qu'il gdalest compilé avec le support Expat / OSM et SQLite:

    c('SQLite', 'OSM') %in% ogrDrivers()$name
    
    [1] TRUE TRUE
  • Assurez-vous de savoir quel calque vous souhaitez enregistrer en tant que fichier de formes:

    ogrListLayers('filename.osm.pbf')
    
    [1] "points" "lines" "multilinestrings" "multipolygons"
    attr(,"driver")
    [1] "OSM"
    attr(,"nlayers")
    [1] 4
  • Nous sommes prêts à partir:

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

Une fois que vous avez lu le fichier via readOGR, suivez ces instructions pour apprendre à le tracer avec ggplot2.

Notez que vous pouvez également lire des .osmfichiers au format XML, assurez-vous simplement qu'ils ne sont pas compressés (c'est-à-dire que l'extension .osmne l' est pas .osm.bz2). Mais essayez d'utiliser le fichier .osm.pbf car ils sont beaucoup plus petits.

gkcn
la source
fyi, la dernière compilation rgdalpour windows est 0.9-3 et revient FALSE FALSEpourc('SQLite', 'OSM') %in% ogrDrivers()$name
aaryno
Car rgdalvous pouvez essayer le paquet source ( cran.r-project.org/src/contrib/rgdal_1.0-4.tar.gz ) ou le binaire oldrel ( cran.r-project.org/bin/windows/contrib/3.1/ rgdal_1.0-4.zip ). À propos du GDALbinaire Windows, je ne sais pas, vous pouvez déposer un rapport de bogue à GDALprojeter et demander que le support Expat et SQLite soit activé dans les GDALbinaires Windows .
gkcn
Ou vous pouvez le créer vous-même en utilisant MinGW sur Windows et activer Expat et SQLite: trac.osgeo.org/gdal/wiki/BuildingWithMinGW
gkcn
1

osm2shp.ru ici, vous pouvez télécharger des données openstreetmap au format shapefiles. Données divisées par régions: Amérique du Nord et du Sud, Australie et Océanie, Afrique, Europe et Asie.61 couches à télécharger. Données filtrées par les conditions "Caractéristiques de la carte".

Сергей Костин
la source