R में ऑस्मफाइल (या डेटा फ्रेम) में ऑसम फ़ाइल परिवर्तित करना


15

मैं आज ऑस्ट्रेलिया के लिए एक सड़क के आकार की तलाश कर रहा था। मैंने जियोफैब्रिक जाना समाप्त कर दिया । ओपन स्ट्रीट मैप में .osmप्रारूप में डेटा है । लेकिन .shpऑस्ट्रेलिया के लिए उनके पास एक नहीं है ।

यदि संभव हो, तो मैं आर osmका shapefilesउपयोग करके फ़ाइलों को परिवर्तित करना चाहता हूं । मैंने आसपास खोज की है, लेकिन मुझे अभी तक समाधान नहीं मिला है। क्या इसका कोई तरीका है? वैकल्पिक रूप से, क्या ऑसम फ़ाइलों को आर में पढ़ना और डेटा को डेटा फ्रेम में बदलना संभव है ताकि मैं आंकड़े का उपयोग कर आकर्षित कर सकूं ggplot2?

मैंने NZ के निम्नलिखित ग्राफिक को दो शेपफाइल्स के साथ maptoolsऔर का उपयोग करके हासिल किया है ggplot2। आदर्श रूप से, मैं ऑस्ट्रेलिया का एक समान नक्शा तैयार करना चाहता हूं।

यहाँ छवि विवरण दर्ज करें


आप सड़क फ़ाइलों के साथ क्या करना चाहते हैं - बस उन्हें एक मानचित्र पर प्रदर्शित करें, या किसी तरह का विश्लेषण करें? शेपफाइल्स की कुछ सीमाएँ हैं; आप किसी अन्य प्रारूप का उपयोग करके बेहतर हो सकते हैं!
सिमबंगु

@ सिंबांगु मैं शुरू में सड़कों को एक नक्शे पर प्रदर्शित करना चाहता हूं। यदि आकार नहीं है, तो आप R के साथ किस प्रारूप का उपयोग करने की सलाह देते हैं?
जैजुर्रो 5

जवाबों:


10

यह एक आर समाधान नहीं है, लेकिन क्वांटम जीआईएस (क्यूजीआईएस) जो आप चाहते हैं उसे प्राप्त करने का एक शानदार तरीका है।

आप केवल .osm फ़ाइल (वेक्टर टूल जोड़ें) लोड कर सकते हैं, इसे सामग्री तालिका में सहेजें पर क्लिक करें और ESRI आकृति के रूप में सहेजें।

QGIS इतने बड़े अर्क के साथ दुर्घटनाग्रस्त हो सकता है, इसलिए इससे बचने के लिए आप ओवरपास एपीआई जैसे ओएसएम टूल्स का उपयोग केवल डाउनलोड करने के लिए कर सकते हैं जो आपको बाउंडिंग बॉक्स का उपयोग करने की आवश्यकता है।

पुल-टर्बो एपीआई भी अर्क प्राप्त करने के लिए उपलब्ध है, उस पर एक संक्षिप्त ट्यूटोरियल है यहां!

मैंने राजमार्ग = प्राथमिक और राजमार्ग = प्राथमिक_लिंक टैग (OSM राजमार्ग टैगिंग योजना यहाँ देखी जा सकती है ) के आधार पर एक त्वरित उदाहरण दिया है ! ओवरपास-टर्बो पर विज़ार्ड का उपयोग करना और नीचे की छवि विक्टोरिया के लिए परिणाम था।

फिर मैंने डेटा को GeoJSON के रूप में निर्यात किया, उसे QGIS में लोड किया और फिर परिणाम को एक आकृति फ़ाइल के रूप में सहेजा। (दूसरी छवि QGIS में लाई गई लाइनों और पोल को दिखाती है)

अन्य वैकल्पिक GeoFabrik से क्षेत्र के लिए PBF या OSM फ़ाइल डाउनलोड करने और राजमार्ग = * का उपयोग करके टैग निकाल कर डेटा सबसेट तक है ऑस्मोसिस । यदि आप नियमित रूप से योर डेटा अपडेट करना चाहते हैं, तो ऑस्मोसिस आगे बढ़ने के लिए अनुशंसित तरीका होगा। यदि यह एक बंद अर्क है, तो ओवरपास शायद आसान होगा, भले ही आपको इसे स्मृति सीमाओं के कारण छोटे बाउंडिंग बॉक्स में करना पड़े। आप बस एक ही ओवरपास प्रश्नों को अलग-अलग बाउंडिंग बॉक्स लागू करेंगे।

राजमार्ग = प्राथमिक ओवरपास-टर्बो परिणाम

निर्यात किए गए GeoJSON को QGIS में लोड किया गया


2
जितना आप सोचते हैं उतना ही सरल है: australia.osm.pbf 195MB बड़ा (संपीड़ित) है, इसलिए मुझे लगता है कि यह QGIS को सभी डेटा लोड करने के लिए क्रैश कर देगा। मैं डेटा के साथ QGIS खिलाने से पहले ऑस्मफिल्टर या असमस के साथ वांछित सड़क की जानकारी को फ़िल्टर करने का सुझाव देता हूं ।
आंद्रेजे

@ और, मान्य बिंदु, उत्तर को उचित रूप से अद्यतन करेगा!
मार्क कपिट

1
बहुत बहुत धन्यवाद मुझे अपना काम संभालने का एक और तरीका बताने में। मैंने आपसे कुछ नया सीखा। चीयर्स।
जाजुर्रो

10

@ जैज़ुर्रो, आप पूरी तरह से आर के साथ ऐसा कर सकते हैं, बस ऑसम पैकेज देखें! ओसमर प्रलेखन (osmar.r-forge.r-project.org/RJpreprint.pdf) पढ़ें। पृष्ठ 11 पीपी पर। आप म्यूनिख.मस्म के अनुसार टैग के द्वारा सड़कों / राजमार्गों को निकालने के लिए एक विस्तृत उदाहरण पा सकते हैं! ऑस्ट्रेलिया के लिए एक ग्रह फ़ाइल से डेटा को खींचने और निकालने के बाद आप अपनी इच्छानुसार किसी भी प्रारूप में परिवर्तित कर सकते हैं!

संपादित करें:

जैसा कि कुछ टिप्पणीकार उदाहरणों की कमी के बारे में शिकायत कर रहे थे, मैं डॉक्स से एक उदाहरण पोस्ट करूंगा। 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फ़ाइलों को डेटा फ़्रेम में परिवर्तित करने का कोई सीधा तरीका नहीं है । या है?
जाजुर्रो

Osmar प्रलेखन पढ़ें ( osmar.r-forge.r-project.org/RJpreprint.pdf ) .. पृष्ठ 11 पीपी पर। आप सड़कों / राजमार्गों को निकालने के लिए एक विस्तृत उदाहरण के अनुसार टैग के द्वारा पा सकते हैं munich.osm! ऑस्ट्रेलिया के लिए एक ग्रह फ़ाइल से डेटा खींचने और निकालने के बाद आप अपनी इच्छानुसार किसी भी प्रारूप में परिवर्तित कर सकते हैं! पीएस: ओपी से अन्य लिंक को हटा दिया क्योंकि यह ओएसएम-फाइलों के साथ काम नहीं करता था ..
Kay

1
यह प्रश्न का उत्तर नहीं देता है। किसी लेखक से स्पष्टीकरण मांगने या उसका अनुरोध करने के लिए, उनके पोस्ट के नीचे एक टिप्पणी छोड़ दें।
SS_Rebelious

@SS_Rebelious, यह स्पष्ट रूप से एक उत्तर प्रदान करता है। मैं नहीं जानता कि आप क्या कहना चाह रहे हैं।
Kay

@ इस उत्तर को बेहतर बनाने के लिए, आप यह बता सकते हैं कि वांछित परिणाम प्राप्त करने के लिए ओसमर पैकेज का उपयोग कैसे करें।
जाकारी

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
  • सुनिश्चित करें कि आपको पता है कि आप किस परत को आकार आकृति के रूप में सहेजना चाहते हैं:

    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

ध्यान दें कि आप .osmएक्सएमएल प्रारूप में फाइलें भी पढ़ सकते हैं , बस यह सुनिश्चित कर लें कि वे संपीड़ित नहीं हैं (यानी एक्सटेंशन .osmनहीं है .osm.bz2) लेकिन .osm.pbf फ़ाइल का उपयोग करने का प्रयास करें क्योंकि वे बहुत छोटे हैं।


fyi, के rgdalलिए खिड़कियों के लिए नवीनतम संकलित 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प्रोजेक्ट करने के लिए बग रिपोर्ट दर्ज कर सकते हैं और अनुरोध कर सकते हैं कि विंडोज GDALसैलरी में एक्सपैट और SQLite समर्थन सक्षम होना चाहिए ।
gccn

या आप Windows पर MinGW का उपयोग करके इसे स्वयं बना सकते हैं और Expat और SQLite को सक्षम कर सकते हैं: trac.osgeo.org/gdal/wiki/BuildingWithMinGW
gkcn

1

osm2shp.ru यहां आप शेपफाइल्स प्रारूप में ओपनस्ट्रीटमैप डेटा डाउनलोड कर सकते हैं। क्षेत्रों द्वारा विभाजित डेटा: डाउनलोड के लिए उत्तर और दक्षिण अमेरिका, ऑस्ट्रेलिया और ओशिनिया, अफ्रीका, यूरोपा और एशिया। "मैप फीचर्स" स्थितियों द्वारा फ़िल्टर किया गया डेटा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.