问题
I'm unable to simplify a shapefile in R
Shapefile from here: https://geoportal.statistics.gov.uk/Docs/Boundaries/Local_authority_district_(GB)_2014_Boundaries_(Generalised_Clipped).zip
library(tmap)
library(maptools)
library(ggmap)
England <- readOGR(dsn = "...")
#works fine
print(qtm(England, "LAD14CD", borders = NA, fill.title = "A-Level" ))
# simplify the polygons
England<-gSimplify(England,tol=0.01, topologyPreserve=TRUE)
print(qtm(England, "LAD14CD", borders = NA, fill.title = "A-Level" ))
Gives an error of:
Error in process_fill(data, g$tm_fill, gborders, gt, gf, z = z + which(plot.order == :
Fill argument neither colors nor valid variable name(s)
If you look at the UK dataobject you can see that it has changed from a Large Spatial polygonDataFrame to Large Spatial Polygons and dropped the @data
Instead, if you try to only simplify the polygons in the Shapefile:
England@polygons<-gSimplify(England@polygons,tol=0.01, topologyPreserve=TRUE)
It says that:
Error in gSimplify(England@polygons, tol = 0.01, topologyPreserve = TRUE) :
cannot get a slot ("proj4string") from an object of type "list"
How can I simplify the polygons from a shapefile?
回答1:
The return from gSimplify is just the geometry, not the attributes, so you have to construct a new SpatialPolygonsDataFrame with the simplified geometry and the attribute data from the original:
> England2 <-gSimplify(England,tol=0.01, topologyPreserve=TRUE)
> England3 = SpatialPolygonsDataFrame(England2, data=England@data)
I think the polygons are guaranteed to be in the same order, unless anything has been simplified away. Check length(England2) has the same number of rows as England, or match up the rows on an ID.
来源:https://stackoverflow.com/questions/34827043/gsimplify-not-simplifying-shapefile-in-r