R का उपयोग करके डेटा फ्रेम में एक स्थानिक बहुभुज वस्तु में कनवर्ट करें


18

मेरा लक्ष्य कुछ बहुभुजों को विलय करके मौजूदा आकृति को संशोधित करना है।

शेपफाइल आयात करने और UnionSpatialPolygons कमांड का उपयोग करने के बाद, मुझे बहुभुज की रूपरेखा मिलती है जो मुझे चाहिए।

हालाँकि, यह अब एक SpatialPolygons ऑब्जेक्ट है और SpatialPolygonsDataFrame नहीं है, इसलिए मैं इसे राइटॉग का उपयोग करके किसी आकृति में निर्यात करने में असमर्थ हूं।

मैं इस समस्या के आसपास कैसे पहुँच सकता हूँ?


3
यदि नीचे दिया गया उत्तर उपयोगी था, तो आपको उत्तर पाठ के बाईं ओर टिक मार्क पर क्लिक करके इसे सही के रूप में चुनना चाहिए।
धीरे

जवाबों:


20

जैसा कि नाम से पता चलता है, एक SpatialPolygonsDataFrame मूल रूप से केवल एक SpatialPolygons ऑब्जेक्ट है जो डेटा संलग्न है (विशेषता तालिका)। डेटा में कम से कम उतनी पंक्तियाँ होनी चाहिए जितनी सुविधाएँ हैं

library(rgdal)
ob <- SpatialPolygons(..)# Your SpatialPolygons Object
spp <-     SpatialPolygonsDataFrame(ob,data=as.data.frame("yourData"),proj4string=CRS("+proj=    aea > +ellps=GRS80 +datum=WGS84"))
writeOGR(spp,"shapes","testShape",driver="ESRI Shapefile",)

---- संपादित ----

यदि आप अपनी SpatialPolygonsDataFrameपीठ को किसी SpatialPolygonsऑब्जेक्ट में बदलना चाहते हैं, तो आपको आर के भीतर ऑब्जेक्ट संरचना को संबोधित करने की आवश्यकता है

ob <- SpatialPolygons(spp@polygons,proj4string=spp@proj4string)

निश्चित रूप से, @Curlew सही है। IDsनिष्पादित करते समय तर्क को सही ढंग से निर्दिष्ट करना सुनिश्चित करें UnionSpatialPolygons। अन्यथा आपको dataतर्क को निर्दिष्ट करने में समस्या हो सकती है जब वापस परिवर्तित करना SpatialPolygonsDataFrame
fdetsch

1
ज़रूर, काफी आसान। मैंने उसके लिए मूल उत्तर को संपादित किया
कर्लव

1
मैंने हाल ही में शेपफाइल्स के साथ काम करना शुरू किया और अभी भी इस से खुद को परिचित करने की कोशिश कर रहा हूं। YouData के लिए क्या सटीक रूप से प्रतिस्थापित किया जाना चाहिए data=as.data.frame("yourData")? आंतरिक बहुभुजों का उपयोग करने के बाद unionSpatialPolygons(...), मैं नए आकार के रूप में परिणाम लिखना
चाहूंगा

आपको अपने SpatialPolygons ऑब्जेक्ट में जितनी सुविधाएँ हैं उतनी ही पंक्तियों के साथ data.frame होना आवश्यक है। बेहतर है कि आप के unionविषय में एक नया प्रश्न पूछें ..
कर्लेव

1
@Curlew धन्यवाद, अभी नए प्रश्न यहाँ पोस्ट किए हैं gis.stackexchange.com/q/121405/40108
lightonphiri

9

समस्या:

1: UnionSpatialPolygons का परिणाम एक स्थानिक बहुभुज है

2: परिणाम को एक स्थानिक बहुभुज डेटा फ़्रेम में परिवर्तित करना एक वास्तविक दर्द है

-ए। एक स्थानिक बहुभुज से जुड़ने के लिए आपको एक बहुत सटीक डेटा फ़्रेम की आवश्यकता होती है

बी। आपके द्वारा UnionSpatialPolygons के लिए उपयोग किए जाने वाले डेटा में आउटपुट की तुलना में अधिक पंक्तियाँ होती हैं और उन्हें उस तरीके से स्वरूपित नहीं किया जाता है जिसकी आवश्यकता होती है।

मेरा (बदसूरत) समाधान:

### Coerce into spatial polygon data frame with id and row name of spatial polygon

# Make a data frame that meets the requirements above:

df<- data.frame(id = getSpPPolygonsIDSlots(your.spatialpolygon))
row.names(df) <- getSpPPolygonsIDSlots(your.spatialpolygon)

# Make spatial polygon data frame
spdf <- SpatialPolygonsDataFrame(your.spatialpolygon, data =df)

# Then don't forget to make sure the projection is correct
# XXXX is your SRID

proj4string(spdf) <- CRS("+init=epsg:XXXX");
spdf <- spTransform(spdf , CRS("+init=epsg:XXXX"));

अगर (लंबाई (Sr @ बहुभुज)! = Nrow (डेटा)) स्टॉप (पेस्ट ("ऑब्जेक्ट लंबाई बेमेल: \ n") में त्रुटि: तर्क लंबाई शून्य का है इसके अलावा: चेतावनी संदेश: 1: उपयोग * लागू करें और सीधे स्लॉट
मोक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.