I am working with shapefiles for UK police force boundaries published by the police, defined in WGS84. Some of the boundary shapefiles are invalid (due to self-intersections of the boundary). When I reproject the shapefiles to the British National Grid (OSGB 1936), they are valid.
I would like to understand why this is the case. Is this simply a case of the police using projected shapefiles and uploading WGS84 shapefiles without checking for validity? In other words, is this simply an artefact of reprojecting? Or does it indicate that the original projection definition of the shapefiles is not correct?
R code to reproduce this problem is below: The force boundaries can be downloaded here: https://data.police.uk/data/boundaries/force_kmls.zip
The invalid shapefiles are "derbyshire.kml" and "greater-manchester.kml".
library(rgeos) library(rgdal) # read in shapefile derby <- readOGR("../force_kmls/derbyshire.kml") # show object summary(derby) Object of class SpatialPolygonsDataFrame Coordinates: min max x -2.034083 -1.166476 y 52.696521 53.540456 Is projected: FALSE proj4string : [+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0] Data attributes: Name Description :1 :1 # check for validity of polygon rgeos::gIsValid(derby)  FALSE Warning message: In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") : Self-intersection at or near point -1.31360199 53.164194000000002 # reproject derby derby_proj <- spTransform(derby, CRS("+init=epsg:27700")) summary(derby_proj) Object of class SpatialPolygonsDataFrame Coordinates: min max x 397829.5 455677.1 y 311055.2 404875.1 Is projected: TRUE proj4string : [+init=epsg:27700 +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +datum=OSGB36 +units=m +no_defs +ellps=airy +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894] Data attributes: Name Description :1 :1 # check for validity of polygon rgeos::gIsValid(derby_proj)  TRUE