Convertendo arquivo osm em shapefile (ou quadro de dados) em R

15

Eu estava procurando um arquivo de forma de estrada para a Austrália hoje. Acabei indo para Geofabrik . O Open Street Map possui dados em .osmformato. Mas eles não têm um .shppara a Austrália.

Se possível, desejo converter os osmarquivos para o shapefilesR.. Pesquisei, mas ainda não encontrei soluções. Existe alguma maneira de fazer isso? Como alternativa, é possível ler arquivos osm em R e converter os dados em quadro de dados para que eu possa desenhar figuras usando ggplot2?

Consegui o seguinte gráfico da NZ usando dois shapefiles com maptoolse ggplot2. Idealmente, quero produzir um mapa semelhante da Austrália.

insira a descrição da imagem aqui

jazzurro
fonte
O que você deseja fazer com os arquivos da estrada - apenas exiba-os em um mapa ou algum tipo de análise? Os arquivos de forma têm algumas limitações; pode ser melhor usar outro formato!
Simbamangu
@ Simbamangu Quero exibir inicialmente as estradas em um mapa. Se não for shapefile, que formato você recomenda usar com o R?
jazzurro

Respostas:

10

Esta não é uma solução R, mas o Quantum GIS (QGIS) é uma ótima maneira de conseguir o que deseja.

Você pode simplesmente carregar o arquivo .osm (ferramenta Adicionar vetor), clicar com o botão direito do mouse no Sumário e Salvar como arquivo de forma ESRI.

O QGIS pode falhar com uma extração tão grande; portanto, para evitar isso, você pode usar as Ferramentas OSM, como a API OverPass, para baixar apenas o que você precisa usando caixas delimitadoras.

A OverPass-Turbo Api também está disponível para obter extratos, um breve tutorial sobre o assunto aqui!

Executei um exemplo rápido com base nas tags highway = primary e highway = primary_link (O esquema de marcação de estrada OSM pode ser visto aqui! ) Usando o Assistente no Overpass-Turbo e a imagem abaixo foi o resultado para Victoria.

Em seguida, exportei os dados como GeoJSON, carreguei esses dados no QGIS e salvei o resultado como um arquivo de forma. (A segunda imagem mostra as linhas e polys carregadas no QGIS)

A outra alternativa é fazer o download do arquivo PBF ou OSM para a área do GeoFabrik e subconjunto dos dados extraindo as tags highway = * usando osmose . Se você deseja atualizar seus dados regularmente, osmose seria a maneira recomendada de prosseguir. Se for uma extração única, o Overpass provavelmente seria mais fácil, mesmo que você precise fazer isso em caixas delimitadoras menores devido a limitações de memória. Você aplicaria apenas as mesmas consultas de passagem superior a diferentes caixas delimitadoras.

Rodovia = Resultados Primários de OverPass-Turbo

GeoJSON exportado carregado no QGIS

Mark Cupitt
fonte
2
Nat tão simples quanto você pensa: o australia.osm.pbf tem 195 MB de largura (compactado), então suponho que ele travará o QGIS para carregar todos os dados. Sugiro filtrar as informações de estrada desejadas com osmfilter ou osmose antes de alimentar o QGIS com os dados.
Andrej
@ André, ponto válido, atualizará a resposta adequadamente!
Mark Cupitt #
1
Muito obrigado por me informar outra maneira de lidar com minha tarefa. Eu aprendi algo novo com você. Felicidades.
Jazzurro 03/10/2014
10

@jazzurro, você pode perfeitamente fazer isso com R, basta procurar o pacote osmar! Leia a documentação do osmar (osmar.r-forge.r-project.org/RJpreprint.pdf). Nas páginas 11 pp., Você pode encontrar um exemplo detalhado para extrair estradas / rodovias pelas tags correspondentes para munich.osm! Depois de extrair e extrair os dados de um arquivo planetário para a Austrália, você pode converter para qualquer formato que desejar!

Editar:

Como alguns comentaristas estavam reclamando da falta de exemplos, postarei um exemplo dos documentos. IMHO não seria necessário redigitar exemplos existentes aqui, seria?

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

insira a descrição da imagem aqui

Kay
fonte
Muito obrigado pelo link. Vi uma ou duas postagens relacionadas ao pacote. Mas não tinha certeza se o pacote pode converter .osmarquivos em quadro de dados. Observando rapidamente, parece que não há uma maneira direta de converter .osmarquivos em quadro de dados. Ou existe?
Jazzurro # 2/14
Leia a documentação da osmar ( osmar.r-forge.r-project.org/RJpreprint.pdf ) .. Nas páginas 11 pp. Você encontra um exemplo detalhado para extrair estradas / rodovias pelas tags correspondentes para munich.osm! Depois de extrair e extrair os dados de um arquivo planetário para a Austrália, você pode converter para qualquer formato que desejar! ps: removeu o outro link do OP como este não fez tráfico de endereço com OSM-arquivos ..
Kay
1
Isso não fornece uma resposta para a pergunta. Para criticar ou solicitar esclarecimentos a um autor, deixe um comentário abaixo da postagem.
SS_Rebelious
@SS_Rebelious, ele claramente fornece uma resposta. Não sei o que você está tentando dizer.
Kay
@Kay Para melhorar esta resposta, você pode explicar como usar o pacote osmar para obter os resultados desejados.
Zachary #
7

OK, aqui vem a resposta correta:

  • Verifique se rgdal(versão> = 1.0.4) está instalado

    install.packages('rgdal')
    packageVersion('rgdal')
    
    [1]1.0.4
  • Verifique se gdal(versão> = 1.11.0) está instalado

    library(rgdal)
    getGDALVersionInfo()
    
    [1] "GDAL 1.11.2, released 2015/02/10"
  • Certifique-se de que gdalseja compilado com o suporte Expat / OSM e SQLite:

    c('SQLite', 'OSM') %in% ogrDrivers()$name
    
    [1] TRUE TRUE
  • Verifique se você sabe qual camada deseja salvar como shapefile:

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

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

Depois de ler o arquivo readOGR, siga estas diretrizes para aprender como plotá-lo ggplot2.

Observe que você também pode ler .osmarquivos no formato XML, apenas verifique se eles não estão compactados (por exemplo, a extensão .osmnão está .osm.bz2). Tente usar o arquivo .osm.pbf, pois eles são muito menores.

gkcn
fonte
FYI, mais recente compilado rgdalpara Windows para é 0,9-3 e retorna FALSE FALSEparac('SQLite', 'OSM') %in% ogrDrivers()$name
aaryno
Para rgdalvocê poder experimentar o pacote fonte ( cran.r-project.org/src/contrib/rgdal_1.0-4.tar.gz ) ou o binário oldrel ( cran.r-project.org/bin/windows/contrib/3.1/ rgdal_1.0-4.zip ). Sobre o GDALbinário do Windows, eu não sei, você pode registrar um relatório de bug para GDALprojetar e solicitar que o suporte a Expat e SQLite seja ativado nos GDALbinários do Windows .
gkcn
Ou você pode construí-lo usando MinGW no Windows e permitir Expat e SQLite: trac.osgeo.org/gdal/wiki/BuildingWithMinGW
gkcn
1

osm2shp.ru aqui você pode baixar os dados do openstreetmap no formato shapefiles. Dados divididos por regiões: América do Norte e do Sul, Austrália e Oceania, África, Europa e Ásia. 62 camadas para download. Dados filtrados pelas condições "Recursos do mapa".

Сергей Костин
fonte