आर में रिवर्स कतरन (मिटा)?


15

एक रिवर्स क्लिप आपकी स्थानिक वस्तु के केवल उस हिस्से को बचाता है जो किसी अन्य ऑब्जेक्ट की सीमा के बाहर है, एक नियमित क्लिप के विपरीत जो उन हिस्सों को बचाता है जो अन्य ऑब्जेक्ट के अंदर हैं ।

ArcMap में रिवर्स क्लिप प्रदर्शन? दिखाता है कि इसे आर्कपेक में कैसे करना है।

मैं आर में यह कैसे करूं?

उदाहरण के लिए (लिनक्स मशीनों पर)

system("wget 'https://github.com/Robinlovelace/Creating-maps-in-R/archive/master.zip' -P /tmp/")
unzip("/tmp/master.zip", exdir = "/tmp/master")
uk <- readOGR("/tmp/master/Creating-maps-in-R-master/data/", "ukbord")
lnd <- readOGR("/tmp/master/Creating-maps-in-R-master/data/", "LondonBoroughs")
plot(uk)
plot(lnd, add = T, col = "black")

मुझे यहां जो करना है वह लंदन को छोड़कर पूरे ब्रिटेन को बचाना है । नेत्रहीन, मैं परिणामी छवि में एक छेद के रूप में काला आकार चाहता हूं।

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

जवाबों:


5

सरल सुविधाओं के लिए उत्तर:

sf पैकेज ज्योमेट्री इंजन ओपन सोर्स पर खींचता है, और जैसे कि कमांडों की सूची तक पहुँच सकता है जैसे कि st_within आदि।

ऐसा एक आदेश, st_difference, कार्य करेगा:

require(sf)

# make a square simple feature
s <- rbind(c(1,1), c(1,5), c(5,5), c(5,1), c(1,1))
s.sf <-st_sfc(st_polygon(list(s)))
s.pol = st_sf(ID = "sq", s.sf)

# make a smaller triangle simple feature
s2 <- rbind(c(2,2), c(3,4), c(4,2), c(2,2))
s2.sf <-st_sfc(st_polygon(list(s2)))
s2.pol = st_sf(ID = "tr", s2.sf)

# find the 'difference', i.e. reverse of st_intersection
t <- st_difference(s.pol,s2.pol)

plot(t)

# have a look at the new geometry, a well known text format with exterior followed by hole
st_geometry(t)[[1]]
POLYGON((1 1, 1 5, 5 5, 5 1, 1 1), (2 2, 4 2, 3 4, 2 2))

इस लेख के नीचे की ओर भी देखें

St_as_sf के साथ Sp को coercing करके भी किया जा सकता है। विशेषताओं के रूप में चेतावनी को प्रबंधित करने के लिए मुश्किल हो सकता है!


14

पैकेज gDifferenceसे एक सरल अनुप्रयोग लगता है rgeos:

> require(rgeos)
> ukhole = gDifference(uk, lnd)
Warning message:
In RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, "rgeos_difference") :
  spgeom1 and spgeom2 have different proj4 strings
> plot(ukhole)

प्रक्षेपण चेतावनी है क्योंकि LondonBoroughsआकृति .prjफ़ाइल में फ़ाइल नहीं है ।

बस यह सुनिश्चित करने के लिए कि एक छेद और एक रूपरेखा या अन्य ठोस बहुभुज नहीं है:

> gArea(lnd) + gArea(ukhole) - gArea(uk)
[1] 0

सू सरल, तेजी से प्रतिक्रिया के लिए धन्यवाद। हुड के तहत क्या हो रहा है, यह देखने के लिए इन कार्यों के स्रोत कोड को देखने में दिलचस्पी होगी।
रॉबिनवेल्स

नीचे वे सिर्फ GEOS कहते हैं, जो ज्यामिति कार्यों के एक सी-कोड पुस्तकालय है trac.osgeo.org/geos
Spacedman

रुचिकर - और यह समझाने में मदद करता है कि यह यथोचित उपवास क्यों है। इस पृष्ठ के आधार पर, ऐसा लगता है कि यह सक्रिय रूप से विकसित नहीं हो रहा है, क्या कोई इसकी पुष्टि / खंडन कर सकता है? svn.osgeo.org/geos/branches/3.4/ChangeLog
RobinLovelace

1
निश्चित रूप से यह विकसित है। समयरेखा देखें trac.osgeo.org/geos/timeline या मेलिंग सूची अभिलेखागार lists.osgeo.org/pipermail/geos-devel
user30184

5

पार्टी के लिए थोड़ा देर से, लेकिन 'उलटा' तर्क का उपयोग करके मुखौटा के साथ ऐसा करने का एक सरल तरीका है;

ukhole <- mask(uk, lnd, inverse = TRUE)

रैस्टर पैकेज से। और किसी भी विचारों से sf?
रॉबिनवेल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.