[OSM-dev] strange OpenLayers longitude and latitude

Steve Coast steve at asklater.com
Thu Aug 30 23:02:59 BST 2007


Chris (and openlayers) don't believe in Mercator (every other tile  
API does), but then Mercator doesn't believe in Chris.

There should be functions in the OSM JS to get you back to lat/lng,  
it should be relatively simple.

On 30 Aug 2007, at 18:20, Christopher Schmidt wrote:

> OSM tiles are projected. Displaying them in an unprojected map will  
> not
> work at all how you expect.
>
> -- Chris
>
> On Thu, Aug 30, 2007 at 09:06:58PM +0400, Vladimir Elistratov wrote:
>> Hi!
>>
>> I added the option to see the longitude and latitude for the TMS  
>> Layer
>> http://tile.openstreetmap.org
>> It is well known line:
>> map.addControl(new OpenLayers.Control.MousePosition());
>>
>> The longitude and latitude seem to be quite strange. Say, the
>> longitude for London is around 90.
>>
>> What is the problem about! How is it possible to get "normal"
>> longitude and latitude?
>>
>> I attach the small file for you to see how it happens.
>>
>> The related Javascript code:
>>     <script type="text/javascript">
>>         var lon = 90;
>>         var lat = 29;
>>         var zoom = 6;
>>         var map, layer;
>>
>>         function init(){
>>             map = new OpenLayers.Map( 'map',
>> {maxResolution:1.40625/2} );
>>
>> 		var mapnik = new OpenLayers.Layer.TMS("Mapnik",
>> "http://tile.openstreetmap.org/",
>>                                          { type: 'png', getURL:
>> getTileURL, displayOutsideMaxExtent: true });
>>
>>             map.addLayer(mapnik);
>>
>>             map.addControl(new OpenLayers.Control.LayerSwitcher());
>> 		map.addControl(new OpenLayers.Control.MousePosition());
>>             map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
>>         }
>>
>> 	function getTileURL(bounds) {
>> 		var res = this.map.getResolution();
>> 		var x = Math.round((bounds.left - this.maxExtent.left) /
>> 		(res * this.tileSize.w));
>> 		var y = Math.round((this.maxExtent.top - bounds.top) / (res
>> 		* this.tileSize.h));
>>    		var z = this.map.getZoom();
>> 		var limit = Math.pow(2, z);
>>
>> 		if (y < 0 || y >= limit)
>> 		{
>> 			return OpenLayers.Util.getImagesLocation() +
>> 			"404.png";
>>    		}
>> 		else
>> 		{
>> 			x = ((x % limit) + limit) % limit;
>> 			return this.url + z + "/" + x + "/" + y + "." +
>> 			this.type;
>> 		}
>> 	}
>>
>>     </script>
>>
>> Thank you for any advice!
>>
>
>> <html xmlns="http://www.w3.org/1999/xhtml">
>>   <head>
>>
>>     <script src="http://www.openlayers.org/api/OpenLayers.js"></ 
>> script>
>>     <script type="text/javascript">
>>         var lon = 90;
>>         var lat = 29;
>>         var zoom = 6;
>>         var map, layer;
>>
>>         function init(){
>>             map = new OpenLayers.Map( 'map', {maxResolution: 
>> 1.40625/2} );
>>
>> 		var mapnik = new OpenLayers.Layer.TMS("Mapnik", "http:// 
>> tile.openstreetmap.org/",
>>                                          { type: 'png', getURL:  
>> getTileURL, displayOutsideMaxExtent: true });
>>
>>             map.addLayer(mapnik);
>>
>>             map.addControl(new OpenLayers.Control.LayerSwitcher());
>> 		map.addControl(new OpenLayers.Control.MousePosition());
>>             map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
>>         }
>>
>> 	function getTileURL(bounds) {
>> 		var res = this.map.getResolution();
>> 		var x = Math.round((bounds.left - this.maxExtent.left) / (res *  
>> this.tileSize.w));
>> 		var y = Math.round((this.maxExtent.top - bounds.top) / (res *  
>> this.tileSize.h));
>>    		var z = this.map.getZoom();
>> 		var limit = Math.pow(2, z);
>>
>> 		if (y < 0 || y >= limit)
>> 		{
>> 			return OpenLayers.Util.getImagesLocation() + "404.png";
>>    		}
>> 		else
>> 		{
>> 			x = ((x % limit) + limit) % limit;
>> 			return this.url + z + "/" + x + "/" + y + "." + this.type;
>> 		}
>> 	}
>>
>>     </script>
>>   </head>
>>   <body onload="init()">
>>     <div id="map"></div>
>>   </body>
>> </html>
>
>> _______________________________________________
>> dev mailing list
>> dev at openstreetmap.org
>> http://lists.openstreetmap.org/cgi-bin/mailman/listinfo/dev
>
>
> -- 
> Christopher Schmidt
> MetaCarta
>
> _______________________________________________
> dev mailing list
> dev at openstreetmap.org
> http://lists.openstreetmap.org/cgi-bin/mailman/listinfo/dev
>

have fun,

SteveC | steve at asklater.com | http://www.asklater.com/steve/






More information about the dev mailing list