다각형을 자르고 데이터를 유지 하시겠습니까?


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. 그러나 spdf1SpatialPolygonsDataFrame으로 유지하고에 포함 된 모든 정보를 유지하고 싶습니다 spdf1@data.

나는 gDifference를 다음과 같이 시도했는데, 이것으로 spdf1교차되는 부분을 ​​잘라 내고 SpatialPolygons spdf2로 변환 spdf1한다 (즉,에 포함 된 정보를 버림 spdf1@data).

gDifference(spdf1, spdf2, byid=T)

어떻게로 줄일 수 spdf1spdf2데이터에 포함 된 유지하지만 spdf1@data? SpatialPointsDataFrame 위에 다각형을 오버레이하고 SPDF 데이터를 보존하는 방법 없이이 비슷한 질문을 확인하고 시도 했습니까?

답변:


9

가장 간단한 방법은

  library(raster)
  x <- spdf1 - spdf2

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

다각형 오버레이를 다루는 더 많은 함수는 '래스터 패키지'(섹션 XIV)를 참조하십시오. 이러한 기능은 '사용자 수준'( '개발자 수준'과 반대) 기능에서 후드 아래의 rgeos 기본 기능을 사용합니다.


" '개발자 수준'이 아닌 '사용자 수준'기능"이란 무엇입니까?
luciano

rgeos기하 연산을 제공하지만 데이터 속성을 처리하지 않습니다. 따라서 이러한 기능을 사용하려면 모든 것을 함께 유지하기 위해 많은 작업이 필요합니다. 래스터 기능은이를 단순화하고 GIS 소프트웨어에서 유사한 기능처럼 작동합니다.
Robert Hijmans

예, 그러나 이로 인해 SpatialPolygonsDataFrame (part2, x @ data [match (row.names (part2),) : row.names 데이터와 다각형 ID가 일치하지 않습니다
jebyrnes

그것은 버그 일 것입니다. 그 예를 들어 줄 수 있습니까?
Robert Hijmans

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에서 행 이름을 생성합니다 (행의 두 번째 숫자를 제거하는 간단한 gsub로. 이름은 행 이름 일치를 처리해야합니까? )
jebyrnes

SpatialPolygonsDataFrame (clip, data = as.data.frame (all_spdfs_together @ data)) 오류 : 객체 길이 불일치 : 클립에 1718 개의 다각형 객체가 있지만 as.data.frame (all_spdfs_together @ data)에 86 개의 행이 있음
jebyrnes

물론-나는 바다에 많은 다각형이 있습니다. 일부는 땅에 잘못 놓이거나 땅과 겹칩니다. 나는 그것을 잘라서 바다에있는 지역 만 가지고 있습니다. 비교할 해안선 모양 파일이 있습니다. 코드는 다음과 같습니다 -gist.github.com/jebyrnes/c2e8d2b6c82849dad3a813d952ab8bb0
jebyrnes

1
신경 끄시 고 - 래스터 :: 삭제 솔루션 작업 (그것이 어떤 이상한 이유로 전에하지 않았다)
jebyrnes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.