आर में शेपफाइल खोलना? [बन्द है]


64

मुझे आगे के भूस्थैतिक विश्लेषण के लिए इसका उपयोग करने के लिए आर में आर्कपेज़ से एक आकृति आकृति खोलने की आवश्यकता है। मैंने इसे ASCII टेक्स्ट फ़ाइल में बदल दिया है, लेकिन R में इसे data.frame के रूप में पहचाना जाता है। जैसे ही x और y गैर-संख्यात्मक के रूप में पहचाने जाते हैं, निर्देशांक फ़ंक्शन काम नहीं करता है।

क्या आप इससे निपटने में मदद कर सकते हैं?


1
किस तरह की आकृति? मैं अंक ग्रहण कर रहा हूँ क्योंकि इसमें X और Y कॉलम है?
सिंबांगु

जवाबों:


54

सीधे आकृति का उपयोग करें। आप इसे आसानी से rgdalया sfसंकुल के साथ कर सकते हैं , और किसी ऑब्जेक्ट में आकृति पढ़ सकते हैं। दोनों पैकेजों के लिए आपको dsnडेटा स्रोत प्रदान करने की आवश्यकता होती है , जो कि आकृति-आकृति के मामले में निर्देशिका है , और layer- जो आकार-नाम, ऋण विस्तार है:

# Read SHAPEFILE.shp from the current working directory (".")

require(rgdal)
shape <- readOGR(dsn = ".", layer = "SHAPEFILE")

require(sf)
shape <- read_sf(dsn = ".", layer = "SHAPEFILE")

(Rgdal के लिए, OSX या Linux में आप '~' आशुलिपि डेटा स्रोत (के रूप में घर निर्देशिका के लिए उपयोग नहीं कर सकते dsn) निर्देशिका - अन्यथा आप एक बेकार मिल जाएगा संदेश "खुला डेटा स्रोत नहीं कर सकते"। sfपैकेज नहीं है इस सीमा को, कुछ अन्य लाभों के बीच में।)

यह आपको एक वस्तु देगा जो एक स्थानिक * DataFrame (अंक, रेखा या बहुभुज) है - तब विशेषता तालिका के क्षेत्र सामान्य डेटाफ़्रेम के समान shape$IDआईडी आईडी के लिए आपके लिए उसी तरह सुलभ होंगे ।

यदि आप अपने द्वारा आयात की गई ASCII फ़ाइल का उपयोग करना चाहते हैं, तो आपको बस संख्याओं के लिए पाठ (वर्ण) x और y फ़ील्ड को परिवर्तित करना चाहिए, जैसे:

shape$x <- as.numeric(as.character(shape$x))
shape$y <- as.numeric(as.character(shape$y))
coordinates(shape) <- ~x + y

2015-01-18 को संपादित करें : ध्यान दें कि rgdal maptools (जो मैंने शुरू में यहाँ सुझाया गया था) से थोड़ा बेहतर है, मुख्यतः क्योंकि यह स्वचालित रूप से प्रक्षेपण जानकारी पढ़ता और लिखता है।

टिप्पणियाँ:

  • नेस्टेड as.numeric(as.character())फ़ंक्शंस - यदि आपका एएससीआईआई पाठ एक कारक (संभावना) के रूप में पढ़ा गया था, तो यह सुनिश्चित करता है कि आपको कारक स्तरों के बजाय संख्यात्मक मान प्राप्त हों।
  • rgdalऔर sfविभिन्न फ़ाइल और डेटाबेस प्रकार तक पहुँचने के भ्रमित करने के तरीके हैं (उदाहरण के लिए GPX फ़ाइल के लिए, dsn फ़ाइल नाम है, और इस तरह के तरीके, ट्रैकपाइंट, आदि) को अलग-अलग घटकों को परत करता है, और ऑनलाइन उदाहरणों की सावधानीपूर्वक पढ़ने की आवश्यकता है।

R को संख्यात्मक क्षेत्रों को पार्स करना चाहिए, इसलिए मुझे लगता है कि x और y में एक विशेष वर्ण प्रकार है। इसके अलावा, आयात पर, जब तक कि अलग-अलग तरीके से निर्दिष्ट नहीं किया जाता है, चरित्र फ़ील्ड्स को एक कारक में ज़ब्त किया जाएगा। जैसे, एक सरल "as.numeric" मंदी काम नहीं करेगा। मैं भी maptools के बजाय "rgdal" में "readorg" का उपयोग करूंगा।
जेफरी इवांस

@ जेफ्री, रीडओजीआर निश्चित रूप से जाने का बेहतर तरीका है - जीएसई पर बाद के आर सवालों पर कुछ चर्चाएँ देखें। कारक जबरदस्ती पर अच्छा बिंदु; as.characterसमस्या के आसपास पाने के लिए नेस्टेड के साथ अद्यतन करेगा ।
सिंबांगु

आप ~ का उपयोग कर सकते हैं, लेकिन आपको निर्देशिका पर कॉल करना होगा। डायरेक्टरी, जैसे readOGR (dsn = path.expand ("~ / डाउनलोड / cb_2016_us_zcta510_500k /"), लेयर = "cb_2016_us_zcta510_500k")
hd1

3
किसी तरह मुझे अभी भी एक स्पष्टीकरण की आवश्यकता थी यह वास्तव में सही उत्तर है: dsn="directory where the shapefile, projection file, etc are located" layer="name of the file without .shp extention"
यूफोस

मैं यह नोट करना चाहता हूं कि dsnतर्क में अनुगामी स्लैश शामिल नहीं होना चाहिए --- जैसे dsn = "C:/Users/Downloads/"होना चाहिए dsn = "C:/Users/Downloads"। आशा है कि यह किसी की हताशा को हल करता है ...
किम

21

मैं सिंबांगु के साथ सहमत हूं और आकृति को बनाए रखने के मामले में तैयार हूं, लेकिन विशेष रूप से रग्गल लाइब्रेरी के लिए आपका ध्यान निर्देशित करना चाहता हूं। NCEAS के लिए gissolved द्वारा सुझाए गए लिंक का पालन करें और rgdal के लिए निर्देशों का पालन करें। यह कुछ मशीनों पर स्थापित करने के लिए चुनौतीपूर्ण हो सकता है लेकिन अनुमानों के अनुसार यह परिणामों में काफी सुधार कर सकता है।

Maptools पुस्तकालय उत्कृष्ट है और आप जिस आकार में आप पढ़ रहे हैं उसके लिए प्रक्षेपण को परिभाषित करने की अनुमति देता है, लेकिन ऐसा करने के लिए आपको यह जानने की आवश्यकता है कि प्रोजेजे 4 प्रारूप में उस प्रक्षेपण को कैसे निर्दिष्ट किया जाए। एक उदाहरण कुछ इस तरह लग सकता है:

project2<-"+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80    
   +datum=NAD83 +units=m +no_defs" #USA Contiguous Equidistant Conic Projection
data.shape<-readShapePoly("./MyMap.shp",IDvar="FIPS",proj4string=CRS(project2))
plot(data.shape)

यदि आप इस मार्ग पर जाना चाहते हैं, तो मैं http://spatialreference.org को अनुशंसा करता हूं कि यह पता लगाने के स्थान के रूप में कि आपका प्रोजेक्शन प्रोजे 4 प्रारूप में कैसा दिखता है। यदि यह आपके लिए परेशानी की तरह दिखता है, तो rgdal ESRI शेपफाइल की .prj फाइल (वह फाइल जिसमें ईएसआरआई की शेपफाइल के लिए परिभाषा परिभाषा है) को पढ़कर इसे आसान बना देगा। उसी फाइल पर rgdal का उपयोग करने के लिए जिसे आप बस लिखेंगे:

library(rgdal)
data.shape<-readOGR(dsn="C:/Directory_Containing_Shapefile",layer="MyMap")
plot(data.shape)

यदि आप सिर्फ एक ही आकृति के साथ काम कर रहे हैं, तो आप ऐसा कर के स्केट की संभावना कर सकते हैं, लेकिन जैसे ही आप कई डेटा स्रोतों को देखना शुरू करते हैं या Google मानचित्र के साथ ओवरलेइंग करते हैं, तो आपके अनुमानों को ठीक रखना आवश्यक हो जाता है।

आर में स्थानिक डेटा पर कुछ सहायक वॉकथ्रू के लिए, जिसमें आयात और बिंदु पैटर्न के साथ काम करने के सामान शामिल हैं, मेरे पास https://csde.washington.edu/workshop/point-patterns-and-Asterster पर कुछ पुराने पाठ्यक्रम सामग्री ऑनलाइन है। -surfaces / (अधिक कार्यशालाओं को यहां पाया जा सकता है ) जो आपको यह देखने में मदद कर सकते हैं कि ये तरीके व्यवहार में तुलना कैसे करते हैं।


+1 स्थानिक संदर्भ जानकारी के लिए ... विशेष रूप से अनुमानों को हल करने पर जोर देने के लिए!
सिमबामंगु

@csfowler, मैंने readOGR का उपयोग करने की कोशिश की, लेकिन यह .prj फ़ाइल को आयात नहीं कर रहा है। कोई विचार क्यों? मैं जीव विज्ञान विभाग में भी UW में हूं।
हरमन टूथ्रोट

@ user4050, आपके कोड को देखे बिना जानना मुश्किल है। मुझे लगता है कि एक ही निर्देशिका में .prj फ़ाइल है? और सुनिश्चित करें कि आपने यह सुनिश्चित करने के लिए एन्कोडिंग = "ईएसआरआई शेपफाइल" मूल्य का उपयोग किया है कि आरग्डल को पता है कि यह एक शेफाइल है?
csfowler

17

मुझे लगता है कि आपको आकार-निर्धारण को ASCII में नहीं बदलना चाहिए, बल्कि स्थानिक एक्सटेंशनों में से एक के साथ सीधे आकृति-आकृति का उपयोग करना चाहिए। यहाँ आप एक आकार ( http://www.nceas.ucsb.edu/scicomp/usecases/ReadWriteESRIShapeFiles ) पढ़ने और लिखने के तीन तरीके खोज सकते हैं । आर-स्थानिक परियोजना शायद आपको http://cran.r-project.org/web/packages/sp/india.html पर भी रुचि देगी ।


17

आप सीधे शेपफाइल्सsf को खोलने के लिए लाइब्रेरी का उपयोग कर सकते हैं । यह पुस्तकालय की तुलना में तेज़ है , यहाँ देखें: आर-बेंचमार्क के लिए सरल सुविधाएँ । पैकेज के बारे में अधिक जानकारी के लिए प्रोजेक्ट होमपेज r-spatial चेक करें ।Rrgdalsf

# Load library
library('sf')

# Load shapefile
shapename <- read_sf('~/path/to/file.shp')

11

2017 में एक आसान समाधान पुस्तकालय shapefile()में समारोह है raster

#Load library
library(raster)

#Load shapefile
shp <- shapefile("myshapefile")

अद्यतन: यह 2019 में अभी भी एक अच्छा विकल्प है।


क्या इसका उपयोग ऑनलाइन स्रोत से आयात करने के लिए किया जा सकता है? I
आई डेल टोरो

@IDelToro सीधे नहीं। आपको इसे पहले अपनी हार्ड ड्राइव पर डाउनलोड करना होगा और फिर वहां से लोड करना होगा।
क्रिस्टोफर

6

एक और विकल्प Fastshp पुस्तकालय का उपयोग करना है जो प्रदान करता है ::

बड़े ESRI शेपफाइल्स (.shp) से निपटने के लिए रूटीन। इसमें रीडिंग, पॉइंट्स का पतला होना और पॉइंट ऑफ़ शेप्स से मेल खाना शामिल है। इस पैकेज का मुख्य उद्देश्य बड़े आकार के आकार (लाखों अंक) का समर्थन करने की गति प्रदान करना है। यह कुछ अन्य शेपफाइल पैकेजों की तुलना में तेजी से मैजिनीट के कई ऑर्डर हैं।

यहाँ ggplot2 के साथ इसका उपयोग करने के बारे में SE पर मेरा प्रश्न है:

मैं ggplot2 में फास्टशॉट के माध्यम से लोड किए गए शेपफाइल को कैसे प्लॉट कर सकता हूं?


1
मुझे यह थोड़ा परेशान करने वाला लगता है कि read.shp फ़ंक्शन के परिणामस्वरूप sp ऑब्जेक्ट नहीं होता है। यह देखते हुए कि स्थानिक आर समुदाय इस पर स्थानिक वस्तुओं को संभालने के लिए वास्तविक मानक के रूप में परिवर्तित कर रहा है, मुझे यह कुछ हद तक सुस्त लगता है। पर्याप्त रैम और 64 बिट ओएस को देखते हुए, बड़े डेटा को पढ़ना एक समस्या नहीं है। 8GB RAM के साथ मैंने 30M अंक और 2.5M पॉलीगॉन को पढ़ा है जिसमें बिना किसी समस्या के rgdal का उपयोग किया गया है। यहाँ ggplot2 के साथ sp ऑब्जेक्ट का उपयोग करने पर कुछ दिशा है: github.com/hadley/ggplot2/wiki/plotting-polygon-shapefiles
Jeffrey Evans
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.