En R, j'ai un seul objet SpatialPolygons
(c'est-à-dire multi-polygones) contenant plusieurs centaines de polygones. Je voudrais diviser cet objet SpatialPolygons
en une liste de Polygons
(c'est-à-dire que les trous doivent rester attachés au polygone parent).Partage de polygones d'un seul objet SpatialPolygons
Une idée de comment faire cela?
ÉDITÉ:
En utilisant l'exemple suivant fourni dans le package sp
:
# simple example, from vignette("sp"):
Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Sr3 = Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5)))
Sr4 = Polygon(cbind(c(5,6,6,5,5),c(4,4,3,3,4)), hole = TRUE)
Srs1 = Polygons(list(Sr1), "s1")
Srs2 = Polygons(list(Sr2), "s2")
Srs3 = Polygons(list(Sr3, Sr4), "s3/4")
SpP = SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3)
ensuite en cours d'exécution out = lapply([email protected], slot, "Polygons")
. J'obtiens une liste de trois Polygons
(c'est-à-dire Srs1
, Srs2
, Srs3
).
Cependant, le cas que j'essaie de résoudre est un peu différent de cet exemple. L'objet SpatialPolygons
que j'essaie de scinder est le résultat d'une union géométrique effectuée avec la fonction gUnaryUnion
(dans le package RGEOS
). Si j'applique out <- lapply([email protected], slot, "Polygons")
, j'obtiens une liste unique d'objets Polygon
(ne pas une liste d'objets Polygons
). En d'autres termes, chaque polygone est séparé de son ou ses trous.
Courir topol <- sapply(unlist(out), function(x) [email protected])
je reçois:
> length(topol)
[1] 4996
> sum(topol, na.rm=TRUE)
[1] 469
Selon le RGEOS
v0.3-2 manuel (http://cran.r-project.org/web/packages/rgeos/rgeos.pdf):
Pour RGeoS fonctionne correctement, il est nécessaire que tous les trous dans une géométrie POLYGON ou MULTIPOLYGON donnée doivent appartenir à un polygone spéci fi que . L'implémentation de la classe SpatialPolygons n'inclut pas actuellement cette information dans . Pour contourner cette limitation rgeos utilise un attribut de commentaire supplémentaire sur la classe Polygons qui indique quel trou appartient à quel polygone. Sous l'actuelle implémentation , ce commentaire est une chaîne de texte de nombres séparés par espaces où l'ordre des nombres correspond à l'ordre des objets Polygon dans l'emplacement Polygones de l'objet Polygones. Un 0 implique que l'objet Polygone est un polygone, un nombre différent de zéro implique que l'objet Polygone est un trou avec la valeur indiquant l'index du polygone qui "possède" le trou.
Ainsi la fonction createSPComment()
dans RGEOS
est susceptible d'être une solution de contournement à trous et réagréger Polygones.