質問
ShapeFilesで作業しています r, 、1つはpoint.shpです。もう1つはpolygon.shpです。さて、ポイントをポリゴンと交差させたいと思います。つまり、ポリゴンからのすべての値をPoint.shpの表に取り付ける必要があります。
Package SPでOverlay()とSprbindを試してみましたが、期待したことは何もありませんでした。
誰かが私にヒントを与えることができますか?
解決
もし、するなら overlay(pts, polys)
PTSがSpatialPointSDataFrameオブジェクトであり、PolysはSpatialPolygonsDataFrameオブジェクトである場合、Polygonsデータフレームの行を与えるポイントと同じ長さのベクトルを取り戻します。したがって、ポリゴンデータをポイントデータフレームに組み合わせるために必要なことは、次のとおりです。
o = overlay(pts, polys)
pts@data = cbind(pts@data, polys[o,])
でも!ポイントのいずれかがすべてのポリゴンの外に落ちた場合、オーバーレイはNAを返します。これにより、ポリス[o、]が失敗するため、すべてのポイントがポリゴン内にあることを確認するか、別の方法を割り当てる方法を考えなければなりません。ポリゴン外のポイントの値...
他のヒント
新しいものと SF パッケージこれは、高速かつ簡単になりました:
library(sf)
out <- st_intersection(points, poly)
追加オプション
ポリゴンのすべてのフィールドがポイント機能に追加されたくない場合は、電話するだけです dplyr::select()
以前のポリゴン機能について:
library(magrittr)
library(dplyr)
library(sf)
poly %>%
select(column-name1, column-name2, etc.) -> poly
out <- st_intersection(points, poly)
問題が発生した場合は、ポリゴンが有効であることを確認してください。
st_is_valid(poly)
いくつか見たら FALSE
ここの出力は、それを有効にするようにしてください:
poly <- st_make_valid(poly)
これらの「有効」関数は sf
コンパイルされたインストール liblwgeom
.
これを1行で行います point.in.poly
fom spatialEco
パッケージ。
library(spatialEco)
new_shape <- point.in.poly(pts, polys)
ドキュメントから: point.in.poly
「ポイントとポリゴンの特徴クラスを交差させ、ポイントにポリゴン属性を追加します」。