Rgeos는 다각형을 교차 할 때 관련 값을 삭제합니다


11

두 개의 SpatialPolygonsDataFrames를 교차시키고 결과로 SpatialPolygonsDataFrame을 얻으려고합니다. 불행히도 (다각형을 교차시키기 위해 매우 빠르게 작동하는) gIntersectionfrom 함수를 사용 rgeos하면 관련 데이터 프레임을 검색 할 수 없습니다. 다음 예제를 고려하십시오.

> fracPoly <- gIntersection( toSingle, fromSingle )
> class(toSingle)
[1] "SpatialPolygonsDataFrame"
> class(fromSingle)
[1] "SpatialPolygonsDataFrame"
> class(fracPoly)
[1] "SpatialPolygons"

의 전송을 처리하는 래퍼 함수를 ​​작성할 수는 data.frames있지만 모든 검사를 올바르게 수행하는 것은 약간의 고통이 될 것입니다. 관련 gIntersection)을 유지할 수 있습니다 data.frames.

최신 정보

더 자세히 살펴보면 이는에 의해 매우 의도적 인 동작 일 수 있습니다 gIntersection. 결국, 두 개의 SPDF 중 어느 data.frame을 전달합니까? 따라서 둘을 병합하는 래퍼를 작성해야 할 수도 있습니다.


1
Polgyon을 어떻게로드합니까-readShape * 또는 readOGR? SPDF를로드하는 데 사용한 라이브러리에 따라 gIntersection에 이상한 동작이 발생합니다.
Simbamangu

@Simbamangu 재미있는. 나는 있습니다 .... data.frame에 병합 후 readShapePoly를 사용하고 있습니다
아리 B. 프리드먼

gIntersection은 중첩 영역에 대해 병합 된 data.frames를 제공해야합니다. QGIS에서 Vector | Geoprocessing | Intersect를 실행하면 출력은 중첩에 대해 병합 된 속성 세트이며 QGIS는 같은 GEOS 라이브러리를 공간 연산에 사용하지 않습니다 이?
Simbamangu

글쎄요. data.frames를 손으로 병합하고 다시 병합하기 위해 이미 코드를 다시 작성했기 때문에 더 이상 시간을 소비하지 않을 것입니다. 그러나 shapefile에서 읽는 함수가 중요하다는 힌트가 도움이됩니다.
Ari B. Friedman

1
이것은 분명히 대답은 아니지만 의견을 남길만한 충분한 포인트가 없습니다 ... Ari, rgeos 오버레이 함수에 따라 변수를 추출하기 위해 코드 덩어리를 공유할지 궁금합니다. gUnion과 같은 다양한 rgeos 작업에서 원래 다각형 ID를 유지하는 좋은 방법으로 머리를 감싸는 데 문제가 있습니다 ...
jed.a.long

답변:


2

일부 프로젝트의 경우 같은 요구가있었습니다. 를 유지하는 것 이상으로 data.frame, 출력 지오메트리 유형을 관리하기위한 코드를 추가로 배치하고 완전한 교차 지오 프로세스를 갖기 위해 약간의 정리 (예 : 클린 지오메트리 컬렉션)를 진행해야했습니다. 여전히 R에서 이러한 작업을 수행해야하는 경우 RFigisGeo 패키지를 사용해 볼 수 있습니다 .

#install RFigisGeo
require(devtools) 
install_github("RFigisGeo", "openfigis")
require(RFigisGeo)

#compute intersection
result <- getIntersection(features1, features2)

귀하와 @berndv의 답변은 모두 내 문제를 해결하는 것처럼 보입니다. 감사! 처음 나온 이후로 표시합니다.
Ari B. Friedman

10

gIntersection의 동작은 의도적으로 교차 데이터를 전달하지 않아야합니다.

교차 공간 객체간에 일반적인 일치 항목이 없으므로 속성에 대한 임의의 작업에는 알 수없는 사용자 의도에 대한 가정이 필요합니다. 이것이 데이터 슬롯을 통과하지 않아야하는 이유입니다 ...

... gIntesection ()의 디자인은 본질적이지 않습니다. 왜냐하면 사용자 만이 지오메트리가 변경된 엔티티의 속성으로 무엇을해야하는지 알 수 있기 때문입니다. 사용자마다 다른 가정을 할 수 있지만 row.names () 메커니즘에서와 같이 교차하는 기하학의 ID를 통과하는 것 외에는 일반적인 해결책이 없습니다.

놀랍게도 래스터 패키지에는 교차 기능이있어 데이터와 교차하고 넘겨줍니다.

래스터 패키지에는 속성 데이터도 처리하여 rgeos를 확장하는 몇 가지 기능이 있습니다. 이 경우 raster :: intersect를 참조하십시오. 여기에 기능 목록이 있습니까?? "래스터 패키지"(섹션 XIV)

내가 얻은 전체 정보 : http://r-sig-geo.2731867.n2.nabble.com/Intended-usage-of-gIntersection-td7587120.html


0

위의 답변이 효과가없는 사람들을 위해, 여기 링크는 래스터의 교차로이 정확한 일을 할 수 있다고 설명합니다.

R에서 두 개의 다각형을 클리핑 할 때 모든 속성 데이터를 유지하려면 어떻게합니까?

나는 이것을 SpatialPolygons shapefile로 SpatialPointsDataFrame을 자르기 위해 사용했다; 원본 데이터를 유지하면서 잘라낸 / 잘린 버전의 SpatialPointsDataFrame을 작성합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.