J'ai créé 2 polygones dans QGIS. En les utilisant dans R, les polygones deviennent automatiquement SpatialPolygonsDataFrame (SPDF). Je voudrais les fusionner en un seul SPDF (comme c'est très facile dans ArcGis en utilisant Tool Merge ). Je suis sûr qu'il devrait y avoir un moyen simple de compléter cela dans R, mais je ne trouve pas comment. la fonction de fusion semble fusionner uniquement data.frames, la fonction d' agrégation dissout plusieurs polygones en un seul shp, gIntersect (en tapant la fonction join) renvoie une valeur logique, pas du tout le SPDF.
les données sont disponibles ici: http://ulozto.cz/xpoo5jfL/ab-zip
library(sp)
library(raster)
library(rgeos)
library(spatstat)
library(rgdal)
library(maptools)
setwd("C:/...")
a<-readOGR(dsn=getwd(), layer="pol.a")
b<- readOGR(dsn=getwd(), layer="pol.b")
ab<-merge(a, b) # what tool if not "merge" to use??
r
spatial-analyst
merge
maptools
maycca
la source
la source
Réponses:
Si vous n'avez pas besoin de fusionner la topologie, mais simplement d'ajouter de nouveaux polygones, vous pouvez simplement utiliser:
ab <- rbind(a,b)
Si vous obtenez une erreur «Valeurs d'emplacement d'ID de polygone non uniques», cela signifie que les noms des objets sont les mêmes. Pour résoudre ce problème, vous pouvez utiliser des spChFID pour modifier les noms de domaine et les relations d'emplacement associées. Étant donné que les emplacements de l'objet utilisent les noms de domaine pour associer l'objet, vous ne pouvez pas simplement modifier row.names dans l'emplacement @data.
La fonction union (union_sp) du package raster procède ainsi et appelle gIntersects à partir de rgeos, en arrière-plan et est une fonction d'aide très pratique.
**** Edit 08-06-2018 Il existe un argument non documenté qui peut être utilisé pour ignorer le problème d'ID en double.
la source
ab <- bind(a, b)
pour éviter cette erreurSolution super facile fournie par @mdsumner:
a donné lieu à:
la source
raster::union
fonctionne aussi pour la classe SpatialLinesDataFrame!la source