बहुभुज को क्लिप करें और डेटा को बनाए रखें?


13

मेरे पास ये दो बहुभुज हैं:

library(sp); library(rgeos); library(maptools)

coords1 <- matrix(c(-1.841960, -1.823464, -1.838623, -1.841960, 55.663696,
                    55.659178, 55.650841, 55.663696), ncol=2)
coords2 <- matrix(c(-1.822606, -1.816790, -1.832712, -1.822606, 55.657887,
                    55.646806, 55.650679, 55.657887), ncol=2)
p1 <- Polygon(coords1)
p2 <- Polygon(coords2)
p1 <- Polygons(list(p1), ID = "p1")
p2 <- Polygons(list(p2), ID = "p2")
myPolys <- SpatialPolygons(list(p1, p2))
spdf1 = SpatialPolygonsDataFrame(myPolys, data.frame(variable1 = c(232,
                                                                   242), variable2 = c(235, 464), row.names = c("p1", "p2")))
proj4string(spdf1) <- CRS("+proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0")
plot(spdf1, col="red")

coords1a <- matrix(c(-1.830219, -1.833753, -1.821154, -1.830219, 55.647353,
                     55.656629, 55.652122, 55.647353), ncol=2)
p1a <- Polygon(coords1a)
p1a <- Polygons(list(p1a), ID = "p1a")
myPolys1 <- SpatialPolygons(list(p1a))
spdf2 = SpatialPolygonsDataFrame(myPolys1, data.frame(variable1 = c(2),
                                                      variable2 = c(3), row.names = c("p1a")))
proj4string(spdf2) <- CRS("+proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0")
plot(spdf2, col="yellow", add=T)

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

मैं spdf1उस के कुछ हिस्सों को काटना चाहता हूं spdf2। हालाँकि, मैं spdf1एक SpatialPolygonsDataFrame के रूप में बने रहना चाहता हूं और किसी भी जानकारी को अपने भीतर समाहित रखना चाहता हूं spdf1@data

Ive ने इस प्रकार के रूप में gDifference की कोशिश की, जो spdf1उस के कुछ हिस्सों को काटता है, जिसे इसके द्वारा काट दिया जाता है spdf2, लेकिन फिर spdf1SpatialPolygons (यानी निहित जानकारी को छोड़ना spdf1@data) में परिवर्तित कर देता है ।

gDifference(spdf1, spdf2, byid=T)

मैं में कैसे कटौती कर सकते हैं spdf1के साथ spdf2, लेकिन बना रहेगा डेटा में रखी spdf1@data? मैंने SpatialPointsDataFrame पर एक बहुभुज को ओवरले करने और SPDF डेटा को संरक्षित किए बिना इस तरह के प्रश्न की जाँच की और कोशिश की है ?

जवाबों:


9

सबसे सरल तरीका होगा

  library(raster)
  x <- spdf1 - spdf2

  # or, more formally
  y <- erase(spdf1,  spdf2)

बहुभुज ओवरले से निपटने वाले अधिक कार्यों के लिए देखें? 'रेखापुंज-पैकेज' (खंड XIV)। ये फ़ंक्शंस 'यूजर-लेवल' ('डेवलपर-लेवल' के विपरीत) फ़ंक्शंस के तहत रागों के बेस-फ़ंक्शंस का उपयोग करते हैं।


"उपयोगकर्ता-स्तर" ('डेवलपर-स्तर' के विपरीत) कार्यों से आपका क्या तात्पर्य है?
ल्यूसिआनो नो

rgeosज्यामितीय संचालन प्रदान करता है लेकिन डेटा की विशेषताओं के साथ व्यवहार नहीं करता है। इस प्रकार इन कार्यों का उपयोग करने के लिए सब कुछ एक साथ रखने के लिए बहुत काम की आवश्यकता होती है। रेखापुंज कार्य इसे सरल बनाते हैं और जीआईएस सॉफ्टवेयर में समान कार्य करते हैं,
रॉबर्ट हिजमैन

हाँ, लेकिन इस SpatialPolygonsDataFrame (PART2, एक्स @ डेटा [मैच (row.names (part2) में त्रुटि हो सकती है,: डेटा और बहुभुज आईडी की row.names मेल नहीं खाते
jebyrnes

यह एक बग होगा। क्या आप इसका एक उदाहरण दे सकते हैं?
रॉबर्ट हिजमंस

4

का संभावित हल क्लिप करने के बाद विशेषताओं को फिर से जोड़ने के लिए है, जबकि से परिवर्तित किया जाएगा SpatialPolygonsकरने के लिए SpatialPolygonsDataFrame

sp3 <- gDifference(spdf1, spdf2, byid = TRUE)
row.names(sp3) <- row.names(spdf1)

spdf3 <- SpatialPolygonsDataFrame(sp3, data = spdf1@data)

spdf3@data

   variable1 variable2
p1       232       235
p2       242       464

plot(spdf3, col="red")

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


यह मुझे एक समस्या की तरह लग रहा है, केवल मेरे विशेष उदाहरण में आउटपुट क्लिप spdf1 से पंक्तिनामों का उत्पादन करता है जो मौजूद नहीं हैं (पंक्ति में 2 अंक से छुटकारा पाने के लिए एक साधारण gsub के रूप में। नामों को rownames मैच का ध्यान रखना चाहिए, नहीं? )
जेबरनेस

SpatialPolygonsDataFrame (क्लिप, डेटा = as.data.frame (all_spdfs_t पूरी तरह से @ डेटा) में त्रुटि): ऑब्जेक्ट की लंबाई बेमेल: क्लिप में 1718 पॉलीगॉन ऑब्जेक्ट्स हैं, लेकिन as.data.frame (all_spdfs_tately @ डेटा) में 86 पंक्तियाँ हैं
jebyrnes

ज़रूर - मेरे पास समुद्र में चीजों के बहुभुजों का एक गुच्छा है। कुछ को गलत तरीके से जमीन पर रखा गया है, या जमीन के साथ ओवरलैप किया गया है। मैं चाहता हूं कि मैं इस क्षेत्र में अपनी छाप छोड़ूं। मेरे पास तुलना करने के लिए एक तटरेखा आकृति है। यहाँ कोड है - gist.github.com/jebyrnes/c2e8d2b6c82849dad3a813d952ab8bb0
jebyrnes

1
कोई बात नहीं - रेखापुंज :: मिटा समाधान काम करता है (यह कुछ अजीब कारण के लिए पहले नहीं था)
jebyrnes
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.