web-dev-qa-db-ja.com

ポリゴン分析のポイントのsp :: over()

「ind_adm」という名前のシェープファイルと「pnts」というSpatialPointsDataFrameがあります。 「pnts」にはランダムに生成されたポイントが含まれ、一部のポイントはポリゴンと重複しています。下の図を参照してください。 enter image description here

次に、ポリゴン分析でポイントを実行します。つまり、インドの境界を表す灰色のポリゴンの内側にあるポイントを確認します。このため、spライブラリのover()関数を使用しています。

pt.in.poly <- sp::over(ind_adm, pnts, fn = mean) #do the join

しかし、私が得ている出力は

    >pt.in.poly
    values
    0 6.019467

実際には、ポリゴンの「中に」あるポイントのインデックスを取得する必要があります。

どこがいけないの?

31
DotPi

関数を指定しないでください。ポイントの属性値をポリゴンのジオメトリに集約しています(つまり、返される数値は、ポリゴン内にあるポイントの属性のmeanです)。さらに、xyが、やりたいことに対して間違った方法で行われています。する必要があります...

over( pnts , ind_adm , fn = NULL) 
23
Simon O'Hanlon

以上の簡潔で直感的な構文を見つけました:

   pnts[ind_adm,] 

from this 紹介ドキュメント

20
Arto Pihlaja

point.in.poly fom spatialEcoパッケージを使用できます。 「ポイントおよびポリゴンフィーチャクラスと交差し、ポリゴン属性をポイントに追加します」。

library(spatialEco)

new_shape <- point.in.poly(pnts, ind_adm)
7
rafa.pereira

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)

0
Kostas_k84