Convertir el archivo osm a shapefile (o marco de datos) en R

14

Estaba buscando un shapefile de carretera para Australia hoy. Terminé yendo a Geofabrik . Open Street Map tiene datos en formato .osm . Pero no tienen uno en .shp para Australia.

Si es posible, quiero convertir los archivos osm a shapefiles usando R. He buscado, pero aún no he encontrado soluciones. ¿Hay alguna manera de hacer esto? Alternativamente, ¿es posible leer archivos osm en R y convertir los datos en un marco de datos para que pueda dibujar figuras usando ggplot2 ?

He logrado el siguiente gráfico de NZ usando dos shapefiles con maptools y ggplot2 . Idealmente, quiero producir un mapa similar de Australia.

    
pregunta jazzurro 02.10.2014 - 06:04

4 respuestas

10

Esta no es una solución R, pero Quantum GIS (QGIS) es una excelente manera de lograr lo que desea.

Simplemente puede cargar el archivo .osm (Agregar herramienta Vector), hacer clic con el botón derecho en la Tabla de contenido y Guardar como archivo de forma ESRI.

QGIS puede fallar con un extracto tan grande, así que para evitar esto puedes usar OSM Tools como OverPass API para descargar solo lo que necesita mediante los cuadros delimitadores.

La Api de OverPass-Turbo también está disponible para obtener extractos, un breve tutorial sobre eso es ¡Aquí!

Ejecuté un ejemplo rápido basado en las etiquetas highway = primary y highway = primary_link (el Esquema de etiquetado de carreteras de OSM se puede ver en ¡Aquí! ) usando el Wizard en Overpass-Turbo y la imagen de abajo fue el resultado para Victoria.

Luego exporté los datos como GeoJSON, los cargué en QGIS y luego guardé el resultado como un archivo de forma. (La segunda imagen muestra las líneas y polis cargadas en QGIS)

La otra alternativa es descargar el archivo PBF u OSM para el área desde GeoFabrik y subcontratar los datos mediante la extracción de las etiquetas highway = * utilizando Osmosis . Si desea actualizar sus datos de manera regular, Osmosis sería la manera recomendada de proceder. Si se trata de un extracto único, el paso superior probablemente sería más fácil, aunque tenga que hacerlo en cajas de límite más pequeñas debido a las limitaciones de memoria. Solo aplicaría las mismas consultas de Overpass en diferentes cuadros de límite.

    
respondido por el Mark Cupitt 02.10.2014 - 07:00
10

@jazzurro, perfectamente puedes hacer esto con R, ¡solo busca el paquete osmar! Lea la documentación de osmar (osmar.r-forge.r-project.org/RJpreprint.pdf). En las páginas 11 pp. Puede encontrar un ejemplo detallado para extraer carreteras / autopistas mediante las etiquetas correspondientes para munich.osm! Después de extraer y extraer los datos de un archivo planetario para Australia, puede convertirlos a cualquier formato que desee.

Editar:

Como algunos comentaristas se quejaron de la falta de ejemplos, publicaré un ejemplo de los documentos. En mi humilde opinión no sería necesario volver a escribir los ejemplos existentes aquí, ¿verdad?

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

    
respondido por el Kay 02.10.2014 - 08:04
6

Bien, aquí viene la respuesta correcta:

  • Asegúrese de que rgdal (versión > = 1.0.4) esté instalado

    install.packages('rgdal')
    packageVersion('rgdal')
    
    [1] ‘1.0.4’
    
  • Asegúrese de que gdal (versión > = 1.11.0) esté instalado

    library(rgdal)
    getGDALVersionInfo()
    
    [1] "GDAL 1.11.2, released 2015/02/10"
    
  • Asegúrese de que gdal esté compilado con Expat / OSM y soporte SQLite:

    c('SQLite', 'OSM') %in% ogrDrivers()$name
    
    [1] TRUE TRUE
    
  • Asegúrese de saber qué capa desea guardar como shapefile:

    ogrListLayers('filename.osm.pbf')
    
    [1] "points" "lines" "multilinestrings" "multipolygons"
    attr(,"driver")
    [1] "OSM"
    attr(,"nlayers")
    [1] 4
    
  • Estamos listos para ir:

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

Una vez que lea el archivo a través de readOGR , siga estas pautas para aprender cómo trazar con ggplot2 .

Tenga en cuenta que también puede leer los archivos .osm en formato XML, solo asegúrese de que no estén comprimidos (es decir, la extensión es .osm no .osm.bz2 ). Pero trate de usar el archivo .osm.pbf ya que son muchos más pequeño.

    
respondido por el gkcn 23.06.2015 - 22:01
1

osm2shp.ru aquí puede descargar datos de openstreetmap en formato de shapefiles. Datos divididos por regiones: Norte y Sudamérica, Australia y Oceanía, África, Europa y Asia.61 capas para descargar. Datos filtrados por las condiciones de "Características del mapa".

    
respondido por el Сергей Костин 14.04.2016 - 21:32

Lea otras preguntas en las etiquetas