[OpenLayers-Dev] LikeGoogle

Mikel Maron mikel_maron at yahoo.com
Mon Nov 13 11:16:30 EST 2006


Thanks for #openlayers help on Friday, updating the OpenStreetMap slippy map [http://www.openstreetmap.org/index.html]
At our next stage, we'll be looking at the MetaCarta TileCache, for integration with mapnik, and live requests

The tiles were generated in the Google Maps style (based off old code for generating tiles in the GMaps API).
This is almost exactly the same as TMS Global Profile 2, except that the Origin is in the Upper Left,
and tile number increases South-East. 

(Slightly concerning, it seems that TMS could not theoretically be applied to Google Tiles, since the Origin is always Lower Right.
I wonder if this has been discussed? if it's a concern?)


The code to implement the Google Maps style tiling in OL was pretty easy, based off crschmidt's refractions class.
LikeGoogle.js is at 

    http://brainoff.com/osm/mapnik/OpenLayers-2.1/lib/OpenLayers/Layer/LikeGoogle.js

if it's useful to OL generally.


The tiling scheme also requires the correct bounds, projection, resolution, etc for the map..

    map = new OpenLayers.Map( "map",
                {maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34), maxResolution:156543, units:'meters', projection: "EPSG:41001"} );
    layer = new OpenLayers.Layer.LikeGoogle( "OSM", "http://artem.dev.openstreetmap.org/osm_tiles/", {type:'png'} );

This does mean that all map coordinates are in northing/easting, which required us to convert to lat/lon for integration in other parts of OSM
Perhaps this could be a useful small addition to OpenLayers, as it's likely the most common projection conversion people will want.

Degrees to Mercator
	 lon = lon * 20037508.34 / 180;
         lat = Math.log(Math.tan( (90 + lat) * PI / 360)) / (PI / 180);
         lat = lat * 20037508.34 / 180;

Mercator to Degrees

         lon_deg = (lonlat.lon / 20037508.34) * 180;
         lat_deg = (lonlat.lat / 20037508.34) * 180;
         lat_deg = 180/PI * (2 * Math.atan(Math.exp(lat_deg * PI / 180)) - PI / 2);

-Mikel




More information about the Dev mailing list