Suite

Dissoudre des polygones en utilisant R/joindre des polygones spécifiques


J'ai des données au format shapefile :: UK_boundaries Je suis également nouveau sur R et les données spatiales, j'essaie de joindre certaines zones pour qu'elles soient une zone sans ligne(s) entre elles. Sur la base de ma recherche, je comprends que unionSpatialPolygones la fonction dissout les polygones mais lorsque j'ai essayé de l'utiliser, j'ai eu une erreur : Erreur: TopologyException : L'entrée geom 0 n'est pas valide : Auto-intersection au niveau ou à proximité du point 162544.73551388 516922.55880385998 à 162544.73551388 516922.55880385998

libs <- c("rgdal", "maptools", "gridExtra", "rgeos", "raster") lapply(libs, require, character.only = TRUE) LA <- readOGR(dsn = ".", layer = "infuse_dist_lyr_2011_clipped") ID <- LA$geo_code ID[ID %in% c("95DD","95II","95QQ","95EE","95RR","95UU","95TT","95CC", "95BB")] <- c("95AA","95GG","95HH","95JJ","95JJ","95JJ","95KK","95OO","95XX") LA_new <- unionSpatialPolygons( LA, identifiants)

En résumé, je veux que les zones de la même couleur montrée ici soient jointes.

Une aide s'il vous plait ?


Je peux reproduire votre erreur. Une solution de contournement actuelle consiste à utiliser gpclib (gratuit pour une utilisation non commerciale) au lieu de géos:

# install.packages("gpclib") library("gpclib") gpclibPermit() # [1] TRUE # Message d'avertissement : # Dans gpclibPermit() : # le support de gpclib sera retiré de maptools à la prochaine version majeure LA_new <- unionSpatialPolygons(LA, IDs, AvoidGEOS=TRUE)

On dirait que j'ai un an de retard, mais je veux toujours publier la réponse afin que cela puisse peut-être aider les autres plus tard.

Le message d'erreur est explicite - il y a une erreur de topologie (Auto-intersection) dans votre fichier de formes. Vous pouvez utilisergEstValide()fonction dansgéospour reproduire l'erreur et détecter toute autre erreur de topologie dans votre shapefile.

En ce qui concerne le correctif, je suggérerais de supprimer l'erreur de topologie en modifiant le fichier de formes à l'aide de QGIS ou d'ArcMap.


Un moyen intéressant d'éviter/réparer les erreurs TopologyException a été proposé par @hrbrmstr ici : forcer un tampon de largeur nulle. Alors essayez ceci avant de postulerunionSpatialPolygones. Dans l'exemple donné de @Iman, peut-être quelque chose comme : (je ne l'ai pas testé)

LA_2 <- gBuffer(LA, byid=TRUE, width=0) LA_new <- unionSpatialPolygons(LA_2, IDs)


Voir la vidéo: Angles des polygones réguliers (Octobre 2021).