R에서 osm 파일을 shapefile (또는 데이터 프레임)로 변환


15

오늘 호주의 도로 모양 파일을 찾고있었습니다. 나는 Geofabrik에 가는 것을 끝내었다 . Open Street Map에는 데이터 .osm형식이 있습니다. 그러나 그들은 .shp호주에 하나도 없습니다 .

가능한 경우 R osmshapefiles사용하여 파일 을 변환하려고합니다. 검색했지만 아직 해결책을 찾지 못했습니다. 이 방법이 있습니까? 또는 osm 파일을 R로 읽고 데이터를 데이터 프레임으로 변환하여 ggplot2?를 사용하여 그림을 그릴 수 있습니까?

나는 두 개의 shape 파일을 사용하여 뉴질랜드의 다음 그래픽 달성 maptoolsggplot2. 이상적으로는 비슷한 호주지도를 만들고 싶습니다.

여기에 이미지 설명을 입력하십시오


도로 파일로 무엇을하고 싶습니까?지도 나 분석에 표시 하시겠습니까? 쉐이프 파일에는 몇 가지 제한이 있습니다. 다른 형식을 사용하는 것이 좋습니다.
Simbamangu

@Simbamangu 처음에지도에 도로를 표시하고 싶습니다. shapefile이 아닌 경우 R에 어떤 형식을 사용하도록 권장합니까?
재주로

답변:


10

이 솔루션은 R 솔루션이 아니지만 Quantum GIS (QGIS) 는 원하는 것을 달성 할 수있는 좋은 방법입니다.

.osm 파일 (벡터 추가 도구)을로드하고 목차에서 마우스 오른쪽 단추로 클릭 한 후 ESRI 셰이프 파일로 저장을 클릭하면됩니다.

QGIS는 이러한 큰 추출로 충돌 할 수 있으므로이를 피하기 위해 OverPass API 와 같은 OSM 도구를 사용하여 경계 상자를 사용하여 필요한 것만 다운로드 할 수 있습니다.

육교 터보 API는 또한 추출물을 얻을 수 있습니다, 그에 관한 짧은 튜토리얼은 여기에!

Overpass-Turbo의 마법사를 사용하여 highway = primary 및 highway = primary_link 태그 (OSM Highway Tagging Scheme은 여기를 참조하십시오 ! )를 기반으로 한 빠른 예를 실행했으며 아래 이미지는 Victoria의 결과입니다.

그런 다음 데이터를 GeoJSON으로 내보내고 QGIS에로드 한 다음 결과를 모양 파일로 저장했습니다. (두 번째 이미지는 QGIS에로드 된 선과 폴리를 보여줍니다)

다른 대안은 GeoFabrik에서 해당 영역에 대한 PBF 또는 OSM 파일을 다운로드하고 Osmosis를 사용하여 highway = * 태그를 추출하여 데이터를 서브 세트하는 것 입니다. yor 데이터를 정기적으로 업데이트하려면 Osmosis가 권장되는 방법입니다. 추출이 한 번이면 메모리 제한으로 인해 작은 경계 상자에서해야하더라도 오버 패스가 더 쉬울 것입니다. 동일한 오버 패스 쿼리를 적용하여 다른 경계 상자를 적용하면됩니다.

고속도로 = 1 차 오버 패스 터보 결과

QGIS에로드 된 GeoJSON 내보내기


2
당신이 생각하는 것처럼 간단합니다 : australia.osm.pbf는 195MB 크기 (압축)이므로 모든 데이터를로드하기 위해 QGIS가 충돌한다고 가정합니다. QGIS에 데이터를 공급 하기 전에 osmfilter 또는 osmosis로 원하는 도로 정보를 필터링하는 것이 좋습니다 .
AndreJ

@Andre, 유효한 포인트는 적절하게 답변을 업데이트합니다!
Mark Cupitt

1
내 작업을 처리하는 다른 방법을 알려 주셔서 감사합니다. 나는 당신에게서 새로운 것을 배웠습니다. 건배.
jazzurro

10

@ jazzurro, 당신은 완벽하게 R로 이것을 할 수 있습니다, 그냥 osmar 패키지를 찾으십시오! osmar 문서 (osmar.r-forge.r-project.org/RJpreprint.pdf)를 읽으십시오. 11 페이지의 munich.osm에 대한 태그로 도로 / 고속도로를 추출하는 자세한 예를 찾을 수 있습니다! 호주의 행성 파일에서 데이터를 가져와 추출한 후 원하는 형식으로 변환 할 수 있습니다!

편집하다:

일부 주석가가 부족한 사례에 대해 불평하면서 문서에서 예제를 게시합니다. IMHO 여기에 기존 예제를 다시 입력 할 필요가 없습니까?

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

여기에 이미지 설명을 입력하십시오


링크 주셔서 대단히 감사합니다. 패키지와 관련된 하나 또는 두 개의 게시물을 보았습니다. 그러나 패키지가 .osm파일을 데이터 프레임으로 변환 할 수 있는지 확실하지 않았습니다 . 살펴보면 .osm파일을 데이터 프레임 으로 변환하는 직접적인 방법이없는 것 같습니다 . 아니면 있습니까?
jazzurro

osmar 문서 (읽기 osmar.r-forge.r-project.org/RJpreprint.pdf를 페이지에서 ... 11 쪽 참조). 당신의 따라 태그에 의해 도로 / 고속도로를 추출하는 자세한 예를 찾을 수 있습니다 munich.osm! 호주의 행성 파일에서 데이터를 가져와 추출한 후 원하는 형식으로 변환 할 수 있습니다! 추신 : osm 파일을 다루지 않았기 때문에 OP에서 다른 링크를 제거했습니다.
Kay

1
이것은 질문에 대한 답변을 제공하지 않습니다. 저자에게 비평을하거나 설명을 요청하려면 게시물 아래에 의견을 남겨주십시오.
SS_Rebelious

@SS_Rebelious, 그것은 분명히 대답을 제공합니다. 당신이 무슨 말을하는지 모르겠습니다.
Kay

@Kay이 답변을 개선하기 위해 osmar 패키지를 사용하여 원하는 결과를 얻는 방법을 설명 할 수 있습니다.
Zachary

7

좋아, 여기에 정답이 온다.

  • rgdal(버전> = 1.0.4)가 설치되어 있는지 확인하십시오

    install.packages('rgdal')
    packageVersion('rgdal')
    
    [1]1.0.4
  • gdal(버전> = 1.11.0)이 설치되어 있는지 확인하십시오

    library(rgdal)
    getGDALVersionInfo()
    
    [1] "GDAL 1.11.2, released 2015/02/10"
  • gdalExpat / OSM 및 SQLite 지원으로 컴파일 되었는지 확인하십시오 .

    c('SQLite', 'OSM') %in% ogrDrivers()$name
    
    [1] TRUE TRUE
  • shapefile로 저장할 레이어를 알고 있는지 확인하십시오.

    ogrListLayers('filename.osm.pbf')
    
    [1] "points" "lines" "multilinestrings" "multipolygons"
    attr(,"driver")
    [1] "OSM"
    attr(,"nlayers")
    [1] 4
  • 우리는 갈 준비가되어 있습니다 :

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

를 통해 파일을 읽은 후 다음 지침readOGR따라 파일을 작성 하는 방법을 알아보십시오 ggplot2.

.osmXML 형식의 파일을 읽을 수도 있으며 압축되지 않았는지 확인하십시오 (예 : 확장자가 .osm아닌지 확인 .osm.bz2). .osm.pbf 파일은 훨씬 작으므로 사용하십시오.


참고로, rgdalwindows 용으로 컴파일 된 최신 버전 은 FALSE FALSEc('SQLite', 'OSM') %in% ogrDrivers()$name
0.9-3

들어 rgdal당신은 소스 패키지를 시도 할 수 있습니다 ( cran.r-project.org/src/contrib/rgdal_1.0-4.tar.gz ) 또는 oldrel 진 ( cran.r-project.org/bin/windows/contrib/3.1/ rgdal_1.0-4.zip ). [정보] GDAL윈도우 바이너리, 나도 몰라, 당신은에 버그 리포트를 제기 할 수 있습니다 GDAL국외 거주자 및 SQLite는 지원이 윈도우에 활성화되어 있어야합니다 프로젝트와 요청 GDAL바이너리를.
gkcn 2016 년

또는 Windows에서 MinGW를 사용하여 직접 빌드하고 Expat 및 SQLite를 활성화 할 수 있습니다. trac.osgeo.org/gdal/wiki/BuildingWithMinGW
gkcn

1

osm2shp.ru 여기서 shapestreet 형식의 오픈 스트리트 맵 데이터를 다운로드 할 수 있습니다. 북미 및 남미, 호주 및 오세아니아, 아프리카, 유로파 및 아시아 지역으로 나눈 데이터 : 61 개의 레이어를 다운로드 할 수 있습니다. "지도 기능"조건으로 필터링 된 데이터.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.