「ind_adm」という名前のシェープファイルと「pnts」というSpatialPointsDataFrameがあります。 「pnts」にはランダムに生成されたポイントが含まれ、一部のポイントはポリゴンと重複しています。下の図を参照してください。
次に、ポリゴン分析でポイントを実行します。つまり、インドの境界を表す灰色のポリゴンの内側にあるポイントを確認します。このため、spライブラリのover()関数を使用しています。
pt.in.poly <- sp::over(ind_adm, pnts, fn = mean) #do the join
しかし、私が得ている出力は
>pt.in.poly
values
0 6.019467
実際には、ポリゴンの「中に」あるポイントのインデックスを取得する必要があります。
どこがいけないの?
関数を指定しないでください。ポイントの属性値をポリゴンのジオメトリに集約しています(つまり、返される数値は、ポリゴン内にあるポイントの属性のmean
です)。さらに、x
とy
が、やりたいことに対して間違った方法で行われています。する必要があります...
over( pnts , ind_adm , fn = NULL)
point.in.poly
fom spatialEco
パッケージを使用できます。 「ポイントおよびポリゴンフィーチャクラスと交差し、ポリゴン属性をポイントに追加します」。
library(spatialEco)
new_shape <- point.in.poly(pnts, ind_adm)
sf
パッケージの_st_intersection
_関数を使用することもできます。
library(sf)
ind_adm <- st_as_sf(ind_adm)
(24047はインドのEPSGコードです)
pnts <- st_as_sf(pnts) %>% st_set_crs(., 24047)
kept_points <- st_intersection(ind_adm, pnts)