Tengo un shapefile de polígonos de rango. Cada conjunto de polígonos coloreados representa un grupo diferente de especies/géneros/lo que sea.
A continuación superpongo una cuadrícula de 5x5 a este mapa. Y luego uso atributos de unión por ubicación para encontrar el número de cuadrículas que intersecan cada polígono
El resultado final me da una columna en la tabla de atributos COUNT que indica el número de cuadrículas intersecadas por los polígonos.
EDIT: En otras palabras, me da la ocupación del sitio de cada especie.
################## FASE SIGUIENTE
Quiero duplicar este mismo proceso completamente dentro de R. Primero cargo el mismo shapefile de polígonos de rango en R usando el paquete rgdal.
RangeShape<-readOGR(".","overflowExample07162015")
A continuación, genero una cuadrícula análoga de 5x5 en R utilizando la siguiente función y el paquete raster.
# Generate lat/lng grid for use with mammals dataset
generateGrid<-function(XMin=-180,XMax=180,YMin=-90,YMax=90,BinSize=5) {
LatitudeRows<-length(seq(YMin,YMax,BinSize))
LongitudeColumns<-length(seq(XMin,XMax,BinSize))
Grid<-raster(extent(matrix(c(XMin,YMin,XMax,YMax),nrow=2)),nrow=LatitudeRows,ncol=LongitudeColumns,crs="+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")
Grid[]<-1:ncell(Grid)
Grid<-as(Grid,"SpatialPixelsDataFrame")
return(Grid)
}
# Create a GridShape object
GridShape<-generateGrid(XMin=-180,XMax=180,YMin=-90,YMax=90,BinSize=5)
A continuación intento superponerlos utilizando la función over() del paquete sp con la siguiente función.
# Find Occupancy of taxa using shapefile
shapeOccupancy<-function(RangeShape,GridShape) {
Occupancies<-vector("numeric",length=nrow(RangeShape))
for (i in 1:nrow(RangeShape)) {
Intersect<-over(GridShape,RangeShape[i,])
Present<-apply(is.na(Intersect),1,all) # identify grids that do not intersect range polygons
Occupancies[i]<-nrow(Intersect[Present!=TRUE,])
}
return(Occupancies)
}
Occupancy<-shapeOccupancy(RangeShape,GridShape)
################## El problema
Las cuentas dadas por mi proceso R no son ni siquiera cerca de las cuentas dadas por el proceso QGIS. Podría entender ligeras diferencias, pero estas son bastante grandes.
# Sample of differences
RResults QGISResult
Abrothrix 7 23
Alouatta 31 69
Aplodontia 1 6
Artibeus 47 88
Ateles 24 48
Avahi 1 7
Balantiopteryx 3 17
Mi mejor suposición actualmente es que esto es un resultado del hecho de que algunos de los polígonos de rango son discontinuas y R tiene un tiempo difícil manejar eso, pero no estoy seguro. Basándome en algunas comprobaciones manuales (es decir, contando manualmente las intersecciones de cuadrículas y polígonos en el mapa), los resultados de QGIS parecen ser precisos y son los resultados de R los que están equivocados.
EDIT: Un subconjunto de los polígonos de rango se incluye en el siguiente repositorio github. https://github.com/aazaff/StackOverflowExamples/