2012-01-11 2 views
6

Je suis en train de déterminer comment faire une intersection (Spatial Join) entre un point et des polygones à partir de fichiers de formes. Mon idée est d'obtenir les points les plus proches et les points qui correspondent complètement à l'intérieur des polygones. Dans ARGIS, il existe une fonction pour l'option de correspondance nommée CLOSEST, définie comme suit: "La fonction dans les entités jointes la plus proche d'une entité cible est mise en correspondance Il est possible que deux entités de jointure ou plus soient à la même distance de la cible Lorsque cette situation se produit, l'une des fonctionnalités de jointure est sélectionnée au hasard comme fonction correspondante. " J'ai une fonction pour croiser des points en polygones, il a été aimablement contribué par Lyndon Estes à la liste r-sig-geo et le code fonctionne très bien quand tous les polygones ont rempli toute la zone. Le second cas est connu sous le nom de distance de jointure spatiale et dans ArcGIS est appelé INTERSECT lorsque match_option est CLOSEST, comme le fait ArcGIS. Ainsi, vous pouvez modifier la distance minimale entre le point et le polygone lorsque la zone n'est pas remplie par tous les polygones.Comment ramasser les informations pour le polygone associé le plus proche de points en utilisant R?

est ici les données et la fonction de la première 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([email protected])) == "FALSE") { 
    [email protected] <- [email protected] 
    } 
    return(x2) 
} 


test<-IntersectPtWithPoly (xy.map,manzana.map) 

partage quelques idées avec Lyndon, il m'a dit ceci:


Je pense que la meilleure chose à faire serait de placez un tampon autour de chacun des points (vous pouvez spécifier 50 m s'il est en coordonnées projetées), convertissez-les en polygones, puis votre tâche devient une intersection de deux objets polygones différents.

Je n'ai pas fait ce type d'opération en R, mais je soupçonne que vous pourriez trouver votre réponse avec les fonctions suivantes:

library(sp) 
?over 

library(rgeos) 
?gBuffer 
?gIntersects 

Je suggère de mettre en place un sous-ensemble de vos données illustrant le problème, et alors peut-être que quelqu'un d'autre qui a une meilleure idée sur polygones à intersections polygones/superpositions pourrait suggérer la méthode.

doit être fait dans le rayon des points qui sont dans le fichier de formes afin de les faire entrer dans le polygone le plus proche.

Je sais que ces fonctions pourraient aider à l'accomplir.

library(sp) 
?over 

library(rgeos) 
?gBuffer 
?gIntersects 

Je travaille là-dessus, de sorte que tout commentaire ou de l'aide, serait très aprécié!

+2

Permuté à http://gis.stackexchange.com/questions/18726/spatial-distance-join-between-polygon-and-points-using-r. Cela semble être un choix valable, mais cela signifie, Pantaleon, que nous attendons de vous que vous fassiez l'effort de résumer les réponses des * deux * sites dans les discussions que vous avez commencées sur * chaque * site. – whuber

+0

Ok, merci. Je suis assez nouveau dans ça !!! –

Répondre

1

J'ai compris qu'il est possible de faire des superpositions de polygones à polygones en utilisant sp et rgeos. Vous auriez besoin de charger des rgeos après le chargement de sp.

library(rgeos) 
over(polygon1, polygon2) 
+2

Peut-être pourriez-vous ajouter un lien à la question sur gis.stackexchange? Je suppose que là vous avez ces réponses ... –

Questions connexes