आर का उपयोग करके दूसरे से एक बहुभुज का प्रतिच्छेद हटाना?


9

मैं Poly1 पर Poly2 से प्रतिच्छेदन को हटाने की कोशिश कर रहा हूं। नीचे 2 बहुभुजों के तार हैं।

> coords1
          [,1]     [,2]
 [1,] 992.0161 7462.531
 [2,] 950.1962 7413.532
 [3,] 902.3632 7421.207
 [4,] 706.1985 7472.378
 [5,] 654.0139 7711.760
 [6,] 657.5960 7726.950
 [7,] 786.2667 7844.380
 [8,] 789.5935 7842.925
 [9,] 981.7046 7498.659
[10,] 983.4246 7493.271
[11,] 990.6680 7469.888
[12,] 992.0161 7462.531
> coords2
         [,1]     [,2]
[1,] 930.3464 7607.313
[2,] 979.3528 7502.470
[3,] 865.8662 7484.337
[4,] 850.5665 7594.947
[5,] 930.3464 7607.313

Poly1<-Polygon(coords1)
Poly2<-Polygon(coords2)

2 बहुभुज इस तरह दिखते हैं यहां छवि विवरण दर्ज करेंजो मैं अंत में प्राप्त करना चाहता हूं वह हल्के नीले (Poly2) क्षेत्र के बिना गहरे नीले बहुभुज (Poly1) है, नए पूर्वी निर्देशांक।

जवाबों:


7

प्रयास करें gDifferenceसे समारोह rgeos पैकेज:

coords1 <- as.matrix(read.table(textConnection("
992.0161 7462.531
950.1962 7413.532
902.3632 7421.207
706.1985 7472.378
654.0139 7711.760
657.5960 7726.950
786.2667 7844.380
789.5935 7842.925
981.7046 7498.659
983.4246 7493.271
990.6680 7469.888
992.0161 7462.531
")))

coords2 <- as.matrix(read.table(textConnection("
930.3464 7607.313
979.3528 7502.470
865.8662 7484.337
850.5665 7594.947
930.3464 7607.313
")))

library("sp")
poly1 <- Polygon(coords1)
poly2 <- Polygon(coords2)
# create SpatialPolygons objects
p1 <- SpatialPolygons(list(Polygons(list(poly1), "p1")))
p2 <- SpatialPolygons(list(Polygons(list(poly2), "p2")))

library("rgeos")
res <- gDifference(p1, p2)
plot(res, col="blue")

gDifference परिणाम


5

उपयोग करने वाला समाधान rgeos::gDifferenceबहुत तेज़ है, लेकिन यह एक साधारण SpatialPolygonsवस्तु देता है ।

यदि आप दो SpatialPolygonsDataFrameएस के साथ काम कर रहे हैं और आप डेटाफ्रेम जानकारी रखना चाहते हैं, तो आप बस ऐसा कर सकते हैं, और परिणाम एक होगा SpatialPolygonsDataFrame:

library(raster)

res <- p1 - p2

इस समाधान का उपयोग करते हुए, मुझे त्रुटि मिलती है: "बाइनरी ऑपरेटर के लिए गैर-संख्यात्मक तर्क"
ऐशे

@Ashe, class(my_obj)यह जांचने के लिए टाइप करें कि क्या आपकी दोनों वस्तुएं हैंSpatialPolygonsDataFrame
rafa.pereira

दरअसल, मैं SpatialPolygonsDataFrameकक्षा के रूप में मिलता हूं ।
ऐशे

हम्म्म अजीब है। मुझे यकीन नहीं है कि ऐसा क्यों होगा। शायद आपको एक नया सवाल खोलना चाहिए कि डेटा की जानकारी रखते समय दो SpatialPolygonsDataFrames का अंतर कैसे निकालें
rafa.pereira

1
मैंने मुद्दा तय कर दिया है। मुझे rasterकाम करने के लिए इस समाधान के लिए पुस्तकालय स्थापित करने की आवश्यकता थी । इसके अतिरिक्त उत्तर सहायक होगा। इसके अलावा, इस जवाब का श्रेय: gis.stackexchange.com/a/169597/93643
ऐश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.