質問

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 「ポイントとポリゴンの特徴クラスを交差させ、ポイントにポリゴン属性を追加します」。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top