Como selecionar as informações do polígono associado mais próximo aos pontos usando R?

Estou descobrindo como fazer uma interseção (junção espacial) entre ponto e polígonos de shapefiles. Minha idéia é obter os pontos mais próximos e aqueles que correspondem completamente dentro dos polígonos. No ARGIS, existe uma função para a opção de correspondência denominada CLOSEST e eles foram definidos por: "O recurso nos recursos de junção mais próximo de um recurso de destino é correspondido. É possível que dois ou mais recursos de junção estejam à mesma distância do alvo. Quando essa situação ocorre, um dos recursos de junção é selecionado aleatoriamente como o recurso de correspondência. "

Eu tenho uma função para cruzar pontos em polígonos, foi gentilmente contribuído por Lyndon Estes na lista r-sig-geo e o código funciona muito bem quando todos os polígonos preenchem toda a área. O segundo caso é conhecido como distância de junção espacial e no ArcGIS é conhecido como INTERSECT quando a opção match_option é a CLOSEST, como o ArcGIS faz. Portanto, você pode modificar a distância mínima entre o ponto e o polígono quando a área não for preenchida por todos os polígono

Aqui estão os dados e a função do primeiro 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)

Compartilhando algumas idéias com Lyndon, ele me disse isso:

Acho que a coisa mais fácil a fazer seria colocar um buffer em torno de cada um dos pontos (você poderia especificar 50 m se estiver nas coordenadas projetadas), convertê-los em polígonos, e então sua tarefa se tornará uma interseção de dois objetos poligonais diferentes .

Não realizei esse tipo de operação no R, mas suspeito que você possa encontrar sua resposta com as seguintes funções:

library(sp)
?over

library(rgeos)
?gBuffer
?gIntersects

Sugiro colocar um subconjunto de seus dados ilustrando o problema e, talvez, alguém que tenha uma idéia melhor sobre interseções / sobreposições de polígono a polígono possa sugerir o métod

deve ser feito no raio dos pontos que estão no arquivo shapefile para fazê-los chegar ao polígono mais próxim

Sei que essas funções podem ajudar a alcançá-l

library(sp)
?over

library(rgeos)
?gBuffer
?gIntersects

Estou trabalhando nisso, então qualquer comentário ou ajuda seria muito apreciada!

questionAnswers(1)

yourAnswerToTheQuestion