2011-04-20 2 views
8

고도에 따라 다각형 레이어를 두 부분 (상단 및 하단)으로 자르고 싶습니다. 다각형은 볼록하거나 오목 할 수 있으며 절단 할 위치는 서로 다를 수 있습니다. 등고선은 5m의 간격을 가지고 있습니다. 즉, 1m 간격과 같이 많은 응축 된 등고선이있는 등고선을 생성해야 할 수도 있습니다. ArcGIS 또는 R에서 더 잘 수행 할 수있는 방법에 대한 아이디어가 있습니까? 사전에다각형 레이어 아래에 등고선을 사용하여 폴리곤 잘라 내기

library(sp) 
library(raster) 
r<-raster(ncol=100,nrow=100) 
values(r)<-rep(1:100,100) 
plot(r) ### I have no idea why half of the value is negative... 
p1<-cbind(c(-100,-90,-50,-100),c(60,70,30,30,60)) 
p2<-cbind(c(0,50,100,0),c(0,-25,10,0)) 
p1p<-Polygons(list(Polygon(p1,hole=T)),"p1") 
p2p<-Polygons(list(Polygon(p2,hole=T)),"p2") 
p<-SpatialPolygons(list(p1p,p2p),1:2) 
plot(p,add=T) 
segments(-90,80,-90,20) ##where the polygon could be devided 
segments(50,20,50,-30) ## 

감사 만약 내가 제대로 이해 ~

마르코

+2

http://cran.r-project.org/web/views/Spatial.html을보세요 –

+0

고마워요 ~ 로마 ~ 그걸 들여다 보겠습니다 – Marco

+0

장난감 예를 들어 주시겠습니까? 사용중인 개체/패키지를 알려주는 것도 좋습니다. 여러 가지 가능성이 있습니다. –

답변

7

, 당신은 R.

rgeos 패키지 및 관련 공간 도구를 사용할 수 있습니다 : 아래 는 Q의 실행 예이다

교차 선을 버퍼링 한 다음이 사이트에서 "차이"다각형을 생성하는 트릭을 수행했습니다.

예제 래스터 및 위에있는 다각형을 생성하십시오. 지금

vdata <- list(x = 1:nrow(volcano), y = 1:ncol(volcano), z = volcano) 

## raw polygon data created using image(vdata); xy <- locator() 

xy <- structure(list(x = c(43.4965355534823, 41.7658494766076, 36.2591210501883, 
25.560334393145, 13.7602020508178, 18.7949251835441, 29.179041644792, 
40.6645037913237, 44.2832110429707, 47.272577903027, 47.5872480988224 
), y = c(30.0641086410103, 34.1278207016757, 37.6989616034726, 
40.900674136118, 32.7732500147872, 27.4781100569505, 22.5523984682652, 
22.7986840476995, 24.5226831037393, 29.3252519027075, 33.8815351222414 
)), .Names = c("x", "y")) 

## close the polygon 
coords <- cbind(xy$x, xy$y) 
coords <- rbind(coords, coords[1,]) 

library(sp) 

## create a Spatial polygons object 
poly <- SpatialPolygons(list(Polygons(list(Polygon(coords, hole = FALSE)), "1"))) 


## create a contour line that cuts the polygon at height 171 
cl <- contourLines(vdata, levels = 171) 

## for ContourLines2SLDF 
library(maptools) 

clines <- ContourLines2SLDF(cl) 

는 라인과 교차 다각형, 다시 다각형 갖는 멀티 폴을주는 약간의 차이 라인 버퍼.

library(rgeos) 
lpi <- gIntersection(poly, clines) 

blpi <- gBuffer(lpi, width = 0.000001) 

dpi <- gDifference(poly, blpi) 

원본 데이터를 플롯하고 공간 객체에서 수동으로 추출한 다각형 반을 만듭니다.

par(mfrow = c(2,1)) 

image(vdata) 
plot(poly, add = TRUE) 

plot(SpatialPolygons(list(Polygons(list([email protected][[1]]@Polygons[[1]]), "1"))), 
    add = TRUE, col = "lightblue") 

image(vdata) 
plot(poly, add = TRUE) 
cl <- contourLines(vdata, levels = 171) 

plot(SpatialPolygons(list(Polygons(list([email protected][[1]]@Polygons[[2]]), "2"))), 
    add = TRUE, col = "lightgreen") 

이 간단한 경우에는 효과가 있습니다. 시나리오에 유용 할 수 있습니다.

+0

고마워요 @ mdsumner ~~ 나는 내 경우에 그것을 테스트합니다 :) – Marco