2017-11-01 6 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!

関連する問題