[Talk-de] Die Bilder auf openstreetmap.org....

Frederik Ramm frederik at remote.org
Fr Sep 21 20:08:19 UTC 2007


Hallo,

 > aber woher hole ich mir lat/lon aus
> der URL: http://tile.openstreetmap.org/15/17294/10588.png

Das kann man ganz einfach ausrechnen (15 ist der Zoomlevel, danach kommt 
die X-Koordinate, dann Y):

+ package org.openstreetmap.josm.data.projection;
+
+ /**
+  * Class that handles conversion between unprojected co-ordinates and
+  * slippy map tile co-ordinates.
+  *
+  * All methods take a zoom level as their first argument, specifying
+  * the slippy map zoom level. The slippy map divides the world into
+  * an equal number (2 ^ (zoom-1)) of rows and columns. See
+  *
+  * http://wiki.openstreetmap.org/index.php/Slippy_map_tilenames
+  *
+  * for details.
+  *
+  * @author Frederik Ramm <frederik at remote.org>
+  */
+ public class SlippyMap {
+ 	
+ 	public static int latToTileY(int zoom, double lat) {
+ 		if ((zoom < 3) || (zoom > 18)) return -1;
+ 		double l = lat / 180 * Math.PI;
+ 		double pf = Math.log(Math.tan(l) + (1/Math.cos(l)));
+ 		return (int) ((1<<(zoom-1)) * (Math.PI - pf) / Math.PI);
+ 	}
+ 	
+ 	public static int lonToTileX(int zoom, double lon) {
+ 		if ((zoom < 3) || (zoom > 18)) return -1;
+ 		return (int) ((1<<(zoom-3)) * (lon + 180.0) / 45.0);
+ 	}
+ 	
+ 	public static double tileYToLat(int zoom, int y) {
+ 		if ((zoom < 3) || (zoom > 18)) return Double.MIN_VALUE;
+ 		return Math.atan(Math.sinh(Math.PI - (Math.PI*y / (1<<(zoom-1))))) * 
180 / Math.PI;
+ 	}
+ 	
+ 	public static double tileXToLon(int zoom, int x) {
+ 		if ((zoom < 3) || (zoom > 18)) return Double.MIN_VALUE;
+ 		return x * 45.0 / (1<<(zoom-3)) - 180.0;
+ 	}
+ }

Das ist jetzt Java, ich habs auch noch irgendwo in Perl rumliegen, aber 
eigentlich sollte das ja einfach in jede Sprache uebersetzbar sein. Bei 
den tileTo...-Methoden kommt immer die obere linke Ecke des Tiles raus; 
um die untere rechte zu kriegen, musst Du einfach zu x/y eins addieren.

Bye
Frederik

-- 
Frederik Ramm  ##  eMail frederik at remote.org  ##  N49°00.09' E008°23.33'




Mehr Informationen über die Mailingliste Talk-de