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


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)

어떻게로 줄일 수 spdf1와 spdf2데이터에 포함 된 유지하지만 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.