シェープファイルのポイントとポリゴンの間で交差 (空間結合) を行う方法を考えています。私の考えは、最も近いポイントと、ポリゴン内で完全に一致するポイントを取得することです。ARGIS には、CLOSEST という名前の一致オプションの関数があり、次のように定義されています。この状況が発生すると、結合フィーチャの 1 つが一致するフィーチャとしてランダムに選択されます。
ポイントを多角形に交差させる関数があります。これは、r-sig-geo リストの Lyndon Estes によって親切に提供されたもので、すべての多角形がすべての領域を埋め尽くすと、コードは非常にうまく機能します。2 番目のケースは空間結合距離と呼ばれ、ArcGIS では、ArcGIS のように match_option が CLOSEST の場合に INTERSECT と呼ばれます。そのため、領域がすべてのポリゴンで埋められていない場合は、ポイントとポリゴンの間の最小距離を変更できます。
最初の INTERSECT のデータと関数は次のとおりです。
library(rgeos)
library(sp)
library(maptools)
library(rgdal)
library(sp)
xy.map <- readShapeSpatial("http://www.udec.cl/~jbustosm/points.shp")
manzana.map <- readShapeSpatial("http://www.udec.cl/~jbustosm/manzanas_from.shp" )
IntersectPtWithPoly <- function(x, y) {
# Extracts values from a SpatialPolygonDataFrame with SpatialPointsDataFrame, and appends table (similar to
# ArcGIS intersect)
# Args:
# x: SpatialPoints*Frame
# y: SpatialPolygonsDataFrame
# Returns:
# SpatialPointsDataFrame with appended table of polygon attributes
# Set up overlay with new column of join IDs in x
z <- overlay(y, x)
# Bind captured data to points dataframe
x2 <- cbind(x, z)
# Make it back into a SpatialPointsDataFrame
# Account for different coordinate variable names
if(("coords.x1" %in% colnames(x2)) & ("coords.x2" %in% colnames(x2))) {
coordinates(x2) <- ~coords.x1 + coords.x2
} else if(("x" %in% colnames(x2)) & ("x" %in% colnames(x2))) {
coordinates(x2) <- ~x + y
}
# Reassign its projection if it has one
if(is.na(CRSargs(x@proj4string)) == "FALSE") {
x2@proj4string <- x@proj4string
}
return(x2)
}
test<-IntersectPtWithPoly (xy.map,manzana.map)
リンドンといくつかのアイデアを共有すると、彼は私にこう言いました:
最も簡単な方法は、各ポイントの周りにバッファーを配置し (投影座標の場合は 50 m を指定できます)、それらをポリゴンに変換すると、タスクは 2 つの異なるポリゴン オブジェクトの交点になると思います。
私は R でこの種の操作を行ったことはありませんが、次の関数を使用して答えを見つけることができると思います。
library(sp)
?over
library(rgeos)
?gBuffer
?gIntersects
問題を示すデータのサブセットを提示することをお勧めします。その後、ポリゴンからポリゴンへの交差/オーバーレイについてより良いアイデアを持っている他の誰かがその方法を提案する可能性があります。
それらを最も近いポリゴンに入れるために、シェープファイルにあるポイント半径で作成する必要があります。
この機能がそれを達成するのに役立つことを私は知っています。
library(sp)
?over
library(rgeos)
?gBuffer
?gIntersects
私はそれに取り組んでいるので、コメントやヘルプは非常に高く評価されます!