Çokgen kırpılsın ve veriler korunsun mu?


13

Şu iki çokgenim var:

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)

resim açıklamasını buraya girin

Ben bölümlerini kesip istediğiniz spdf1kesişen olduğunu spdf2. Ancak, spdf1bir SpatialPolygonsDataFrame olarak kalmak ve içerdiği bilgileri korumak istiyorum spdf1@data.

Ben spdf1kesişen parçaları keser spdf2, ama sonra spdf1SpatialPolygons (yani içerdiği bilgileri atarak spdf1@data) dönüştürür gDifference aşağıdaki gibi denedim .

gDifference(spdf1, spdf2, byid=T)

İçinde bulunan verileri nasıl kesebilirim spdf1, spdf2ancak bu verileri nasıl saklayabilirim spdf1@data? Ben kontrol ve SpatialPointsDataFrame üzerinde bir çokgen yerleşimi ve SPDF verileri koruyarak bu benzer soru denedim ?

Yanıtlar:


9

En basit yaklaşım

  library(raster)
  x <- spdf1 - spdf2

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

Çokgen yer paylaşımı ile ilgili daha fazla işlev için bkz.? 'Tarama paketi' (bölüm XIV). Bu işlevler, "kullanıcı düzeyinde" ("geliştirici düzeyinde" aksine) başlık altındaki rgeo'ların temel işlevlerini kullanır.


"Kullanıcı düzeyinde" ("geliştirici düzeyinde" işlevlerin aksine) işlevleriyle "ne demek istiyorsun?
luciano

rgeosgeometrik işlemler sağlar ancak verilerin nitelikleriyle ilgilenmez. Bu nedenle, bu işlevleri kullanmak, her şeyi bir arada tutmak için çok çalışma gerektirir. Raster fonksiyonları bunu basitleştirir ve CBS yazılımında benzer fonksiyonlar gibi davranır,
Robert Hijmans

Evet, ancak bu SpatialPolygonsDataFrame (part2, x @ data [match (row.names (part2),: row.names verileri ve Polygons ID'leri eşleşmiyor)
Hataya neden olabilir

Bu bir hata olurdu. Buna bir örnek verebilir misiniz?
Robert Hijmans

4

Geçici çözüm, klibi yaptıktan sonra ile arasında dönüşüm yaparken nitelikleri yeniden eklemek SpatialPolygonsolacaktır 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")

resim açıklamasını buraya girin


Bu benim sahip olduğum bir sorun gibi görünüyor, sadece benim özel örnekte çıkış klibi var olmayan spdf1 rownames üretir (satırda 2. basamaktan kurtulmak için basit bir gsub olarak. İsimler rownames maç ilgilenmelidir, hayır? )
jebyrnes

SpatialPolygonsDataFrame hatası (klip, data = as.data.frame (all_spdfs_together @ data)): Nesne uzunluğu uyuşmazlığı: klibin 1718 Çokgen nesnesi var, ancak as.data.frame (all_spdfs_together @ data) 86 satır
içeriyor

Tabii - Okyanusta bir sürü çokgen var. Bazıları karaya yanlış yerleştirilmiş veya kara ile örtüşmüştür. Bunu kırpmak istiyorum, bu yüzden sadece okyanustaki alanlara sahibim. Karşılaştırma yapabileceğim bir sahil şeridi şekil dosyası var. İşte kod - gist.github.com/jebyrnes/c2e8d2b6c82849dad3a813d952ab8bb0
jebyrnes

1
nevermind - raster :: silme çözüm işleri (daha önce garip bir sebepten ötürü
yoktu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.