I've seen this problem on some Spherical Mercator maps, but generally they should line up. I notice that in Singapore, Google Satellite and Bing street are out by a large amount that looks like a failure to apply the WGS84 datum when calculating degrees lat lon.
If the problem is a datum shift, it might be possible to correct it by converting the coordinates from Spherical degrees to WGS84 degrees. I do this in a static map generator, where the formulae I was using gave spherical degrees instead of real WGS degrees. I converted the spherical degrees back to metres (i.e. 900913 projection), using the reverseMercator formulae from the OL SphericalMercator source file. Then I converted the metres to proper WGS84, using the Proj4 library. This might be kludgy, but it works. (If anyone knows a more elegant way of doing it, I'd be grateful.) However, just one thing - you have the units defined as 'ft' in your map global options. I think this should be 'm'. Rohan Parkes From: [email protected] [mailto:[email protected]] On Behalf Of B. Heath Robinson Sent: Sunday, 15 August 2010 06:38 To: [email protected] Subject: [OpenLayers-Users] Spherical Mercator 4326 Layers do not line up I am having a problem with a WMS layer lining up on top of a Google map. It appears to be about 15mi south of were it needs to be. I am assuming this is because of the fact that spherical mercator ignores the fact the earth is an ellipse. Anyway, I have included my openlayers code and my mapfile as after spending hours search seems to be helpful. I get the same results using either a shapfile or postgis data each with a different projection. I am using what I believe to be the best method. If I use "reproject:true" the map does line up, but that causes other known problems and is deprecated. Any help would be greatly appreciated. ---------Open Layers--------- function init(){ var options = { projection: "EPSG:900913", units: "ft", maxResolution: 156543.0339, maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508) }; map = new OpenLayers.Map('map', options); var gmap = new OpenLayers.Layer.Google( "Google Streets", {'sphericalMercator': true} );
_______________________________________________ Users mailing list [email protected] http://openlayers.org/mailman/listinfo/users
