[R-sig-Geo] Projection problem (epsg 3857 - maybe not R-related)

Jon Olav Skoien jon.skoien at jrc.ec.europa.eu
Wed May 2 16:39:48 CEST 2012


Hi,

We are having a problem with projections that we dont know the source of 
(bugs in software or lack of understanding). The problem might not be 
related to R, but I hope someone can still help. We have a set of data 
(polygons and rasters) that are all supposed to be in projection 
epsg:3857 (WGS 84 / Pseudo-Mercator, often referred to as web mercator 
as it is used in web services such as Google Maps). However, they do not 
appear to be the same when using them in R. Below is an example that 
starts with a hypothetical polygon somewhere in Europe, and then 
transforming it with the three different proj4strings we got from the 
different objects :

cords = matrix(c( 650000, 700000, 700000, 650000, 650000, 5600000, 
5600000, 5700000, 5700000, 5600000), ncol = 2)
pol = 
SpatialPolygonsDataFrame(SpatialPolygons(list(Polygons(list(Polygon(cords)), 
ID = "1")),
     proj4string = CRS("+init=epsg:3857")), data = data.frame(test = 1))
proj4string(pol)
# [1] " +init=epsg:3857 +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 
+lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"
# This is the proj4string that R creates from this epsg code

# Below are the proj4strings that we got from the imported objects
# 1 is from an export and transformation from a postgis database of 
polygons (latlong) with ogr2ogr and target crs epsg:3857
# 2 is an export from the same data base with psql2shape
# the same proj4strings were also generated from the .prj-files when 
transforming with QGIS.
# 3 is from a geoTIFF, and practically identical to the proj4string that 
R generated from epsg:3857
projs = list()
projs[[1]] = " +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 
+units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"
projs[[2]] = " +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 
+b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
projs[[3]] = " +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 
+x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"

# Here we print the y-coordinate of the original polygon (centroid) 
together with the y-coordinate
# of the reprojected polygon. In addition we write the result to a 
shapefile:
pols = list()
for (i in 1:3) {
   pols[[i]] = spTransform(pol, CRS(projs[[i]]))
#  writeOGR(pols[[i]], "e:/temp/Rtmp/polygons", paste("pol", i, sep = 
""), driver = "ESRI Shapefile")
   print(paste(i, coordinates(pol)[,2], coordinates(pols[[i]])[,2]))
}
#[1] "1 5650000 5619680.01465088"
#[1] "2 5650000 5619663.0232111"
#[1] "3 5650000 5650000"

The writeOGR call above is to also be able to examine the .prj files. 
The last two of these are:
pol2.prj
PROJCS["Mercator",GEOGCS["GCS_unnamed ellipse",DATUM["D_unknown", 
SPHEROID["Unknown",6378137,0]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]], 
PROJECTION["Mercator"],PARAMETER["central_meridian",0],PARAMETER["false_easting",0], 
PARAMETER["false_northing",0],PARAMETER["standard_parallel_1",0.0],UNIT["Meter",1]] 


pol3.prj
PROJCS["Mercator_2SP",GEOGCS["GCS_unnamed ellipse",DATUM["D_unknown",  
SPHEROID["Unknown",6378137,0]],PRIMEM["Greenwich",0], 
UNIT["Degree",0.017453292519943295]], 
PROJECTION["Mercator_2SP"],PARAMETER["standard_parallel_1",0], 
PARAMETER["central_meridian",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1]]

The only differences between these two are the PROJCS and PROJECTION 
parameters, which are "Mercator" and "Mercator_2SP", respectively, and 
the order of some parameters; the last one puts 
PARAMETER["standard_parallel_1",0] before meridian and false easting and 
northing, whereas the first one puts it after. The parameters are 
otherwise the same.

The questions are therefore:
Are the differences due to the use of "Mercator" and "Mercator_2SP"?
Can it be correct that we get different coordinates for the same epsg-code?
If not, which version should we trust, or how can we make sure that the 
same epsg-code refers to the same projection?

Thanks,
Jon

BTW:
 > sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: x86_64-pc-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United 
States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] rgdal_0.7-8 sp_0.9-98

loaded via a namespace (and not attached):
[1] grid_2.15.0    lattice_0.20-6
 > getPROJ4VersionInfo()
[1] "Rel. 4.7.1, 23 September 2009, [PJ_VERSION: 470]"

-- 
Jon Olav Skøien
Joint Research Centre - European Commission
Institute for Environment and Sustainability (IES)
Land Resource Management Unit

Via Fermi 2749, TP 440,  I-21027 Ispra (VA), ITALY

jon.skoien at jrc.ec.europa.eu
Tel:  +39 0332 789206

Disclaimer: Views expressed in this email are those of the individual and do not necessarily represent official views of the European Commission.



More information about the R-sig-Geo mailing list