[R-sig-Geo] Problem aggregating municipalities

Brigitte Hogan brigittehogan at gmail.com
Sun Sep 30 22:56:43 CEST 2012


I am having a problem with unionSpatialPolygons() in
library(maptools). I am working with a shapefile of Mexico
municipalities found here:
http://mapserver.inegi.org.mx/data/mgm/
under Marco Geoestadístico Municipal 2009 Versión 4.1,  Áreas
Geoestadísticas Municipales (38.8 Mb).

I need to combine the "Federal District" municipalities into one
polygon. I am a new user of the sp and rgeos packages, running R
version 2.13 under Windows 7. When I try to combine the districts, I
get an error similar to one in the archive:
https://stat.ethz.ch/pipermail/r-sig-geo/2011-August/012445.html

I tried to run checkPolygonsHoles() as suggested, but I cannot figure
out how to convert the SpatialPolygonsDataFrame or SpatialPolygons
object into a Polygons object.  The solution to the error in the
archive was to reset the significant digits. However, when I tried, I
still ended up with the same error message. An excerpt from my code is
below.


## Original Code
library(maptools)
library(rgdal)
library(rgeos)
file3 <- "C:/Desktop/MUNICIPIOS"
vM.spdf <- readShapePoly(file3, IDvar=NULL)
class(vM.spdf)
               # SpatialPolygonsDataFrame
vM.spdf at data[which(vM.spdf at data$CVE_ENT=="09"),]
v.id <- vM.spdf at data$CVE_ENT=="09"                               # IDs
which rows to merge
newM <- unionSpatialPolygons(vM.sp, IDs=v.id)                  # merge

# Returns the error:
# Error in TopologyFunc(groupID(spgeom[ids[[i]]], id[ids[[i]]]),
names(ids)[i],  :
# TopologyException: found non-noded intersection between LINESTRING
(3.47895e+006 551354,
# 3.479e+006 551323) and LINESTRING (3.479e+006 551323, 3.479e+006
551364) at 3.479e+006 551323

## Trying checkPolygonsHoles()
checkPolygonsHoles(vM.spdf)                                        #
Error ... not a Polygons object
vM.sp <- SpatialPolygons(vM.spdf at polygons, vM.spdf at plotOrder,
proj4string=vM.spdf at proj4string)
vM.p   <- Polygons(vM.sp)
# Error in as.list.default(X) : no method for coercing this S4 class
to a vector
vM.p  <- Polygons(list(vM.sp))
vM.p <- Polygons(vM.sp at polygons)                             # Error
in Polygons(list(vM.sp)) : srl not a list of Polygon objects

## Trying to reset sig difs
getScale()
                  # returns '1e+08'
setScale(1e+09)
newM <- unionSpatialPolygons(vM.sp, IDs=v.id)                  # same error



Thanks for any help you can give me.

Brigitte



More information about the R-sig-Geo mailing list