kachel Dateiname

Hallo Forum,

Leider habe ich nichts im Netz gefunden.
Ich will, dass beim cklick auf eine Kachel die Dateiname der Kachel angezeigt wird. (Alert)

Für jeden Hinweis bedanke ich mich im voraus

<script language="javascript">

document.onclick = function(objEvt){
  var objEvt = (window.event)? window.event: objEvt;
  var objSrc = (objEvt.target)? objEvt.target : objEvt.srcElement;
  alert(objSrc.src);
}

</script>

Edit:

  1. Willkommen im Forum.
  2. JS Ergebnis ist zu 90% von Google [1]

Moin,

das kann man mit OL machen:
http://openlayers.org/dev/examples/click.html

Musst nur die Formel ändern:
http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Lon…2Flat._to_tile_numbers

LG,

-moenk

Falls dich mehr die Berechnung der Kachelnummer aus der Koordinate interessiert als das Popup, hätte ich da was in der Wühlkiste: http://geo.dianacht.de/tests/kachelnummer.html

maxbe genau das habe ich gesucht! Mal ein riesen Lob an dich!

und nu? was hast du eigentlich vor?

wget * aus einem bestimmten Bereich?

Gruss
walter

genau das!
nur, dass es nicht abgeschrieben wird, sondern auch was für die Zukunft gelernt wird. Könntest du bitte kurz erklären wie auf die Kachelname zugegriffen wird?

Das Erstellen der Kacheln erfordert relativ viel Rechenleistung, weshalb die meisten Kacheln nur erstellt werden, wenn sie angefragt werden. Wenn nun jemand alle Kacheln eines Gebietes herunterlädt – wo fast immer welche dabei wären, die normalerweise nie jemand ansehen würde – werden also unnötigerweise Kacheln erzeugt, wodurch der Server sehr langsam bis (für alle!) unbenutzbar wird. Aus diesem Grund gibt es die Tile Usage Policy, die ein automatisches Herunterladen der Kacheln untersagt.

Du kannst alternativ die Rohdaten herunterladen und die Kacheln selbst erstellen, wobei du das Aussehen dieser auch nach deinen Wünschen anpassen kannst. Hierzu gibt es viele Möglichkeiten. Wenn du genauer beschreibst, was du erreichen möchtest helfen wir dir dabei gerne weiter.

Die Kacheln werden auf meinem Rechner Local erzeugt.

Im Prinzip will ich Openlayers etwas missbrauchen :smiley:

Also erreicht soll folgendes:

Will Kacheln-Namen als Koordinaten nutzen nur XY Achsen. Keine GeoKarte nur als interaktiver Fotoalbum.

Soll positionieren können aber nicht anhand Koords sondern Kachelnnamen also XY

Was die Kacheln betrifft brauchst du 3 Werte:

  • Zoomstufe
  • Horizontal (West-Ost)
  • Vertikal (Nord-Süd)

Ohne Zoomstufe ist unklar welche Kacheln gemeint sind.
Nur in dem Fall, dass du immer eine definierte Zoomstufe verwendest, kannst du die fest ins Programm reinschreiben. Die Ordnerstruktur ist entsprechend ausgelegt: //. Dabei entsprechen die Zoomstufe und der X-Wert Ordnernamen, der Y-Wert ist dann der Dateiname.

PS: Herzlich willkommen im Forum

Edbert (EvanE)

Nun denn, man wird doch mal fragen dürfen :wink:

Hatten auch schon Anwender, die sich mal ganz flott einen Tile-Loader schreiben und damit ein ganzes Bundesland auf Zoomlevel 18 runterladen wollten. Oder auch eine App, die gleiches den Anwendern “verkauft” hatte. (Mobile Creator?)

Weiterhin viel Spass und Erfolg bei deinem Projekt

Walter

ne wie loader oder auch Tile-Server genannt funktoniert ist mit klar.
die Anwendung ist DB gestützt, hat aber nichts mit GeoDaten oder GeoKarten zu tun.

Die Kacheln haben festen ZoomWert, in meinem Fall 12. Da ich ca. 2000x2000 Kacheln benötige
Für jedes Kachel wird ein festes Bild vergeben, (Kachelgrösse 128x128px)

Wie kann ich z.B. direkt auf Kachel mit Positin x156 / y200 zentrieren?

Ich probiers mal…

Das wichtige steht im oben schon von Moenk verlinkten Wiki-Beitrag. Nur kannst Du die ganze Mathe überspringen, wenn Du Dir das von Openlayers abnehmen lässt. Der ganze code für die Nummernausgabe sieht so aus:

var mlonlat=new OpenLayers.LonLat(lon,lat).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
var mx=mlonlat.lon;
var my=mlonlat.lat;
var z=map.getZoom();
var kx=Math.floor((20037508.34+mx)/(20037508.34*2)*Math.pow(2,z));
var ky=Math.floor((20037508.34-my)/(20037508.34*2)*Math.pow(2,z));
var text="Kachel:/"+z+"/"+kx+"/"+ky+".png";

OSM hat seine Kachelnummerierung von Google abgeschaut, weil Google setzt Standards. Andere Tile-Server haben ein anderes Numerierungsschema und wie die Daten auf den Festplatten der Server liegen ist wieder eine ganz andere Geschichte.

Google bildet die Erdkugel so ab, dass sie zu einem Quadrat wird. Das erreicht man durch Mercatorprojektion (“EPSG:900913” oder “EPSG:3857”) und Abschneiden an den Polen, bis ein Quadrat rauskommt. Die Koordinaten in diesem System laufen von -20037508,… bis +20037508,… an der x-Achse in Ostrichtung und ebenso an der y-Achse in Nordrichtung (die roten Zahlen im Bild unten). Jede dieser Kacheln ist 256x256 Pixel gross, was einfach Festlegung ohne tiefere technische Bedeutung ist.

Die Umrechnung von Längengrad/Breitengrad in “Mercatorkoordinaten” erledigt OpenLayers mit

var mlonlat=new OpenLayers.LonLat(lon,lat).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
var mx=mlonlat.lon;
var my=mlonlat.lat;

Man hat dann in mx und my diese “Mercatorkoordinaten” und hat sich die Sinüsse und Cosinüsse aus dem Artikel erspart.

Der Tileserver zerlegt die Welt in 1x1 Kachel für Zoomlevel 0, 2x2 Kacheln im Zoom 1, 4x4 Kacheln im Zoom 2 … 1024x2024 im Zoom 10… also in (2^Zoomlevel)x(2^Zoomlevel) Kacheln oder in Javascript “Math.pow(2,zoomlevel)”

Die Umrechnung der Koordinaten in Kacheln geht mit

var kx=Math.floor((20037508.34+mx)/(20037508.34*2)*Math.pow(2,z));

für die X-Achse. “(20037508.34+mx)/(20037508.34*2)” liefert ein Ergebnis zurück, das zwischen 0 am linken Rand der Karte und 1 am rechten Rand der Karte liegt. Das ganze wird mit der maximalen Anzahl der Kacheln multipliziert “*Math.pow(2,z)” und abgerundet “Math.floor(…)”, weil die Kachelnummern am linken Rand mit 0 starten.

Analog geht es mit der y-Koordinate. Nur dass dort “20037508.34**-**my” steht, weil Google sich dazu entschlossen hat, die Kacheln von oben nach unten zu zählen, also entgegen der Richtung der Y-Achse.

Der Pfad zur Kachel wird dann einfach mit Zoom/X-Nummer/y-Nummer.png gebildet.

Grüße, Max

Also auch nichts mit OpenStreetMap im weitesten Sinne?

In deinem Koordinatensystem springst du auf die Position x=linkerrrand+(156/(2^12))(Ausdehnung-in-x-Richtung) und y=obererrand+(200/(2^12))(Ausdehnung-in-y-Richtung). Vielleicht noch eine halbe Kachelgröße dazu, damit du in der Mitte landest…

maxbe vielen Dank!

Nein. es hat nichts mit OpenStreetMap oder GEO Daten zu tun. nicht mal annähernd.

Dank dir habe ich mehr oder weniger verstanden wie OpenLayers funzt.

mein Prob habe ich so gelöst, ob es klug ist k.A.:
habe mir new OpenLayers.Bounds( 0.0, -2500.0, 2500.0, 0.0 ) angelegt.
als maxResolution: 1 wert angegeben.
Zoom angegeben

und schon funzt wie bestellt.

das Problem ist nur mit dem Mausrad. Wie kann ich Zoom Funktion abstellen?

In dem Du

OpenLayers.Control.PanZoomBar()

nicht einbindest. Ist dieses Element nicht vorhanden, zeigt auch das Mausrad keine Wirkung mehr.

habe ich auch nicht eingebunden, dennoch ist Mausrad aktiv.

Du hast Dich vermutlich gar nicht um controls gekümmert und hast die default-controls. Binde doch mal die Karte ganz ohne controls ein

map=new OpenLayers.Map('...',{ ..., ..., ..., controls: []})

und nimm die dazu, die Dir gefallen:

map.addControl(new OpenLayers.Control.MousePosition());
 map.addControl(new OpenLayers.Control.Navigation());

Was es alles gibt, steht in der Gebrauchsanweisung von Openlayers, wenn man das fettgedruckte “Control” links aufklappt. Bei einigen, z.B. OpenLayers.Control.Navigation() gibts auch noch Optionen, z.B. “zoomWheelEnabled”. Damit würde ich anfangen.

Grüße, Max