2

オブジェクトがsfc_multipointあり、使用したいのですst_bufferが、マルチポイント オブジェクトの各ポイントの距離が異なります。それは可能ですか?

マルチポイント オブジェクトは座標です。 テーブル = データ

すべての座標点 (「経度」と「緯度」のテーブル内) には、異なるサイズのバッファーが必要です。このバッファ サイズは、行 "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 のみを使用します。これが結果です。本当に小さなバッファです。 小さなバッファ

視覚化については、この写真を参照してください。これは、バッファーが大きくなる必要があることを示す単なる例です。例の結果

4

1 に答える 1

4

ここでの問題は、ポイント データセットを「作成」する方法にあると思います。

次のようにして、ダミー データを使用してコードを複製します。

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)

複数のポイントを提供するのではなく、単一の MULTIPOINT 機能を提供します。

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)

4 つのポイントで構成される単純なフィーチャ コレクションであることがわかります。このttフィーチャでは、複数の距離を使用したバッファリングが実際に機能します。

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

チッ!

于 2017-11-01T21:04:13.843 に答える