2017-11-01 20 views
1

나는 sfc_multipoint 개체를 가지고 있지만 st_buffer을 사용하려고하지만 다 지점 개체의 모든 단일 지점에 대해 서로 다른 거리를 사용하려고합니다. 그게 가능합니까?다른 거리의 st_buffer 다 지점

다 지점 객체는 좌표입니다. table = data

"lon"및 "lat"의 표에있는 모든 좌표 점에는 다른 크기의 버퍼가 있어야합니다. 이 버퍼 크기는 "dist"행의 테이블에 포함됩니다. 테이블을 데이터라고합니다.

내 코드입니다 :

library(sf) 
coords <- matrix(c(data$lon,data$lat), ncol = 2) 
tt  <- st_multipoint(coords) 
sfc <- st_sfc(tt, crs = 4326) 
dt  <- st_sf(data.frame(geom = sfc)) 
web <- st_transform(dt, crs = 3857) 
geom <- st_geometry(web) 
buf <- st_buffer(geom, dist = data$dist) 

그러나 (0.100)의 바로 첫 번째 DIST를 사용합니다. 결과입니다. 그냥 아주 작은 버퍼. small buffer

시각화를 위해이 그림을 참조하십시오. 이것은 버퍼가 커야한다는 것을 보여주는 단지 예입니다. example result

답변

2

나는 여기서 그 문제는 당신이 포인트 데이터 세트를 "만드는 방법"에 있다고 생각한다.

이 일을, 더미 데이터와 코드를 복제 :

library(sf) 
data <- data.frame(lat = c(0,1,2,3), lon = c(0,1,2,3), dist = c(0.1,0.2,0.3, 0.4)) 
coords <- matrix(c(data$lon,data$lat), ncol = 2) 
tt  <- st_multipoint(coords) 

당신에게 여러 지점을 제공하지 않지만, 하나의 멀티 기능 : 따라서

tt 
#> MULTIPOINT (0 0, 1 1, 2 2, 3 3) 

, 단 하나의 버퍼 거리가 될 수있다 "통과"하면 다음과 같이 표시됩니다.

plot(sf::st_buffer(tt, data$dist)) 

문제를 해결하려면 포인트 데이터 세트를 다르게 빌드해야합니다. 예를 들어, 사용 :

tt <- st_as_sf(data, coords = c("lon", "lat")) 

당신에게 제공합니다

tt 
#> Simple feature collection with 4 features and 1 field 
#> geometry type: POINT 
#> dimension:  XY 
#> bbox:   xmin: 0 ymin: 0 xmax: 3 ymax: 3 
#> epsg (SRID): NA 
#> proj4string: NA 
#> dist geometry 
#> 1 0.1 POINT (0 0) 
#> 2 0.2 POINT (1 1) 
#> 3 0.3 POINT (2 2) 
#> 4 0.4 POINT (3 3) 

당신은 tt 4 점으로 만든 간단한 기능을 수집하는 여러 거리와 것입니다 실제로 작업 버퍼링 지금 볼 :

plot(sf::st_buffer(tt, data$dist)) 

HTH!