R में स्थानिक बहुभुज वस्तुओं की सूची मर्ज करें


16

मेरे पास स्थानिक बफ़र्स (30000 बफ़र्स) की एक सूची है जिसे मैंने फ़ंक्शन के साथ बनाया है lapply:

buff.pts <- lapply(1:nrow(pts.prj), FUN=function(l){
  buff <- gBuffer(pts.prj[l,], width=1000) ## 1km
  return(buff)
}))

> head(buff.pts)
[[1]]
class       : SpatialPolygons 
features    : 1 
extent      : 307941.8, 311941.8, 4994518, 4998518  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs +towgs84=0,0,0 

[[2]]
class       : SpatialPolygons 
features    : 1 
extent      : 307226, 311226, 4991153, 4995153  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs +towgs84=0,0,0 

इस सूची से, मैं 30000 बफ़र्स (या सुविधाओं) के साथ एक आकृति प्राप्त करने के लिए सभी स्थानिक बफ़र्स को कैसे मर्ज कर सकता हूं? (इस आकृति को तब फ़ंक्शन aggregateमें स्थानिक बहुभुजों को विशेषताओं द्वारा संयोजित करने के लिए उपयोग किया जाएगा ।)

मैंने इस कोड का परीक्षण किया लेकिन मुझे यह त्रुटि संदेश प्राप्त हुआ:

test <- as.data.frame(do.call("rbind", buff.pts))
Error in as.data.frame(do.call("rbind", buff.pts)) : 
  error in evaluating the argument 'x' in selecting a method for function 'as.data.frame': Error in validObject(res) : 
  invalid class SpatialPolygons object: non-unique Polygons ID slot values

3
किसी भी कारण से आप के साथ अपने बफ़र्स का निर्माण करने की आवश्यकता है lapplyउपयोग करने के बजाय gBufferसाथ byid = TRUE?
सेंगेल

जवाबों:


12

SpatialPolygonsवस्तुओं की एक सूची को देखते हुए , यहाँ एक मूल SpatialPolygonsसुविधा के साथ एक फ़ीचर के साथ एक स्थानिक बहुभुज डेटा फ़्रेम का निर्माण करना है ।

नमूना डेटा: spl12 SpatialPolygonsवस्तुओं की एक सूची है - सुनिश्चित करें कि आपकी वस्तु इस के समान परिणाम देती है, और 30,000 पर चलने से पहले एक छोटे नमूने पर परीक्षण करें।

> length(spl)
[1] 12
> class(spl)
[1] "list"
> class(spl[[1]])
[1] "SpatialPolygons"
attr(,"package")
[1] "sp"

आप Spatial Polygonsइसमें सभी विशेषताओं के साथ एक एकल ऑब्जेक्ट बनाना चाहते हैं ताकि एक स्थानिक बहुभुज डेटा फ़्रेम बना सकें:

> joined = SpatialPolygons(lapply(spl, function(x){x@polygons[[1]]}))
> plot(joined)

यह polygonsऑब्जेक्ट से पहला स्लॉट लेता है (और केवल एक ही होना चाहिए, क्योंकि प्रत्येक सूची तत्व वर्तमान में एक एकल विशेषता है) और फिर बहुभुज वस्तुओं की एक सूची का निर्माण करता है जो कि आप SpatialPolygonsएक बहु-सुविधा बनाने के लिए फ़ीड करते हैं SpatialPolygons। यह प्लॉट करें, और आपको अपनी सभी विशेषताओं को देखना चाहिए। अगला, यदि आप एक के रूप में सहेजना चाहते हैं, तो आपको shapefileकुछ डेटा जोड़ने की आवश्यकता है। किसी और चीज़ के अभाव में, मैं 1 से 12 आईडी कॉलम बनाता हूं:

> jdata = SpatialPolygonsDataFrame(Sr=joined, data=data.frame(i=1:12),FALSE)

FALSEझंडा सिर्फ आर अप मैच के लिए स्थानिक और गैर स्थानिक डेटा को पुनर्व्यवस्थित करने की कोशिश कर बंद हो जाता है। आप बफ़र आकारों को डेटा फ़्रेम या कुछ में रखना चाह सकते हैं।

काम हो गया।


18

स्थानिक वस्तुओं की सूची को मर्ज करने के लिए, आप यह कर सकते हैं:

library(raster)
m <- do.call(bind, buff.pts) 

2

यदि आप अपने बहुभुज में विशिष्ट आईडी नहीं रखते हैं, तो आप rbind में makeUniqueIDs तर्क का उपयोग कर सकते हैं।

 library(purrr)

list(buff.pts, makeUniqueIDs = T) %>% 
  flatten() %>% 
  do.call(rbind, .)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.