Osm dosyasını R'de şekil dosyasına (veya veri çerçevesine) dönüştürme


15

Bugün Avustralya için bir yol şekil dosyası arıyordum. Ben gidiş sona erdi Geofabrik . Açık Sokak Haritası .osmbiçiminde verilere sahip . Ama .shpAvustralya için bir tane yok .

Mümkünse, osmdosyaları shapefilesR kullanarak dönüştürmek istiyorum. Etrafta arama yaptım, ancak henüz çözüm bulamadım. Bunun bir yolu var mı? Alternatif olarak, osm dosyalarını R'ye okumak ve verileri veri çerçevesine dönüştürmek, böylece rakamları kullanarak çizim yapabilmem mümkün ggplot2mü?

Ben iki shapefiles kullanarak NZ aşağıdaki grafiği elde ettik maptoolsve ggplot2. İdeal olarak, benzer bir Avustralya haritası üretmek istiyorum.

resim açıklamasını buraya girin


Yol dosyalarıyla ne yapmak istiyorsunuz - sadece bir haritada mı yoksa bir çeşit analizde mi görüntülüyorsunuz? Şekil dosyalarının bazı sınırlamaları vardır; başka bir format kullanmak daha iyi olabilir!
Simbamangu

@Simbamangu Başlangıçta bir harita üzerinde yolları görüntülemek istiyorum. Şekil dosyası değilse, R ile hangi biçimi kullanmanızı önerirsiniz?
jazzurro

Yanıtlar:


10

Bu bir R çözümü değildir, ancak Quantum GIS (QGIS) istediğinizi elde etmenin harika bir yoludur.

.Osm dosyasını (Vektör Ekle aracı) yükleyebilir, İçindekiler bölümünde sağ tıklayıp ESRI Şekil Dosyası Olarak Kaydet'i tıklayabilirsiniz.

QGIS böyle büyük bir özütle çökebilir, bu nedenle bunu önlemek için OverPass API gibi OSM Araçları'nı yalnızca sınırlama kutularını kullanarak ihtiyacınız olanı indirmek için kullanabilirsiniz.

Üst Geçit-Turbo Api da özütleri elde etmek için kullanılabilir, bu konuda kısa bir öğretici olduğunu Burada!

Otoyol = birincil ve otoyol = birincil_link etiketlerine (OSM Otoyol Etiketleme Şeması Burada görülebilir ! ) Dayalı hızlı bir örnek çalıştırdım ve Üstgeçit-Turbo Sihirbazı'nı kullanarak aşağıdaki görüntü Victoria'nın sonucuydu.

Daha sonra verileri GeoJSON olarak dışa aktardım, QGIS'e yükledim ve sonucu şekil dosyası olarak kaydettim. (İkinci resim, QGIS'ye yüklenen çizgileri ve polisleri gösterir)

Diğer alternatif alan için PBF veya OSM dosyasını GeoFabrik'ten indirmek ve Osmosis kullanarak highway = * etiketlerini çıkararak verileri alt kümelendirmektir . Verilerinizi düzenli olarak güncellemek istiyorsanız, Osmosis devam etmek için önerilen yol olacaktır. Bir defalık özütse, bellek sınırlamaları nedeniyle daha küçük sınırlayıcı kutularda yapmanız gerekse bile Üstgeçit muhtemelen daha kolay olacaktır. Aynı Üstgeçit sorgularını farklı sınırlayıcı kutularda uygularsınız.

Otoyol = Primer Üst Geçiş-Turbo Sonuçları

QGIS'e yüklenen dışa aktarılan GeoJSON


2
Nat düşündüğünüz kadar basit: australia.osm.pbf 195MB büyük (sıkıştırılmış), bu yüzden tüm verileri yüklemek için QGIS'i çökerteceğini varsayıyorum. QGIS'i verilerle beslemeden önce istenen yol bilgisini osmfilter veya osmoz ile filtrelemenizi öneririm .
AndreJ

@Andre, geçerli nokta, cevabı uygun şekilde güncelleyecektir!
Mark Cupitt

1
Görevimi yerine getirmenin başka bir yolunu bilmeme izin verdiğiniz için çok teşekkür ederim. Senden yeni bir şey öğrendim. Şerefe.
jazzurro

10

@jazzurro, bunu R ile mükemmel bir şekilde yapabilirsiniz, sadece osmar paketine bakın! Osmar belgelerini okuyun (osmar.r-forge.r-project.org/RJpreprint.pdf). Sayfa 11'de munich.osm etiketlerine göre yolların / otoyolların çıkarılmasına ilişkin ayrıntılı bir örnek bulabilirsiniz! Avustralya için bir gezegen dosyasından veri çekip çıkardıktan sonra istediğiniz herhangi bir formata dönüştürebilirsiniz!

Düzenle:

Bazı yorumcular örnek eksikliğinden şikayetçi olduklarından, dokümanlardan bir örnek yayınlayacağım. IMHO, burada mevcut örnekleri yeniden yazmak gerekli değildir, değil mi?

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

resim açıklamasını buraya girin


Bağlantı için çok teşekkür ederim. Paketle ilgili bir veya iki gönderi gördüm. Ancak paketin .osmveri çerçevesine dosyaları dönüştürüp dönüştüremeyeceğinden emin değildim . Hızlı bir bakışla, .osmdosyaları veri çerçevesine dönüştürmenin doğrudan bir yolu yok gibi görünüyor . Yoksa var mı?
jazzurro

Osmar belgelerini okuyun ( osmar.r-forge.r-project.org/RJpreprint.pdf ) .. Sayfa 11'de, ilgili etiketleri kullanarak yolları / otoyolları çıkarmak için ayrıntılı bir örnek bulabilirsiniz munich.osm! Avustralya için bir gezegen dosyasından veri çekip çıkardıktan sonra istediğiniz herhangi bir formata dönüştürebilirsiniz! ps: osm dosyaları ile ilgili adres vermedi gibi OP diğer bağlantı kaldırıldı ..
Kay

1
Bu soruya bir cevap sağlamaz. Bir yazardan eleştiri veya açıklama istemek için gönderilerinin altına bir yorum bırakın.
SS_Rebelious

@SS_Rebelious, Açıkça bir cevap veriyor. Ne demeye çalıştığını bilmiyorum.
Kay

@Kay Bu yanıtı daha iyi hale getirmek için, istenen sonuçları elde etmek için osmar paketinin nasıl kullanılacağını açıklayabilirsiniz.
Zachary

7

Tamam, doğru cevap geliyor:

  • rgdal(Sürüm> = 1.0.4) yüklendiğinden emin olun

    install.packages('rgdal')
    packageVersion('rgdal')
    
    [1]1.0.4
  • gdal(Sürüm> = 1.11.0) yüklendiğinden emin olun

    library(rgdal)
    getGDALVersionInfo()
    
    [1] "GDAL 1.11.2, released 2015/02/10"
  • Bunun gdalExpat / OSM ve SQLite desteği ile derlendiğinden emin olun :

    c('SQLite', 'OSM') %in% ogrDrivers()$name
    
    [1] TRUE TRUE
  • Hangi katmanı şekil dosyası olarak kaydetmek istediğinizi bildiğinizden emin olun:

    ogrListLayers('filename.osm.pbf')
    
    [1] "points" "lines" "multilinestrings" "multipolygons"
    attr(,"driver")
    [1] "OSM"
    attr(,"nlayers")
    [1] 4
  • Gitmeye hazırız:

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

Dosyayı üzerinden okuduktan sonra readOGR, nasıl çizileceğini öğrenmek için bu yönergeleri izleyin ggplot2.

.osmDosyaları XML biçiminde de okuyabileceğinizi unutmayın, sıkıştırılmadıklarından emin olun (yani uzantı .osmdeğildir .osm.bz2) Ancak çok daha küçük oldukları için .osm.pbf dosyasını kullanmayı deneyin.


Bilginize, son derlenmiş rgdal0.9-3 ve getiri olduğu için pencereler için FALSE FALSEiçinc('SQLite', 'OSM') %in% ogrDrivers()$name
aaryno

İçin rgdalkaynak paketini deneyebilirsiniz ( cran.r-project.org/src/contrib/rgdal_1.0-4.tar.gz ) ya da oldrel ikili ( cran.r-project.org/bin/windows/contrib/3.1/ rgdal_1.0-4.zip ). Hakkında GDALpencereler ikili, bilmiyorum, sen bir hata raporu yapabilirsiniz GDALExpat ve SQLite desteği, Windows etkin olmalıdır bu projeye ve istek GDALikili.
gkcn

Ya da Windows'ta MinGW kullanarak kendiniz oluşturabilir ve Expat ve SQLite'ı etkinleştirebilirsiniz: trac.osgeo.org/gdal/wiki/BuildingWithMinGW
gkcn

1

osm2shp.ru buradan openstreetmap verilerini şekil dosyaları biçiminde indirebilirsiniz. Veriler bölgelere göre bölünmüştür: Kuzey ve Güney Amerika, Avustralya ve Okyanusya, Afrika, Avrupa ve Asya.61 katman indirmek için. "Harita Özellikleri" koşullarına göre filtrelenen veriler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.