Openlayers 2.11 offline Tiles

Hallo zusammen,

ich versuche aktuell verzweifelt, lokal gespeicherte Tiles in eine Karte bei OpenLayers (Version 2.11) zu laden.

Ich habe es mit zahlreichen Varianten, die ich im Netz gefunden, probiert, aber keine funzt bei mir:

z.B.

 var newLayer = new OpenLayers.Layer.OSM("New Layer", "file:///C:/OpenLayers/Maps/${z}/${x}/${y}.png", {numZoomLevels: 19});
 map.addLayer(newLayer);

Hat jemand eine Musterlösung zur Hand?

Vielen Dank vorab!

Ich würde darauf tippen, dass entweder OpenLayers gar nicht läuft, weil es auf der lokalen Platte liegt, oder die Kacheln nicht laden will. Ich tippe auf ersteres und würde auch die dort vorgeschlagene Lösung mit Tinyserver verwenden. Das löst beide Probleme.

Grüße, Max

OpenLayers selbst läuft. Ich habe testweise eine Onlinequelle für die Tiles verwendet.
Scheinbar stimmt etwas mit diesem Teil des Codes nicht:

"file:///C:/OpenLayers/Maps/${z}/${x}/${y}.png"

…aber was?

Weiß nicht ob daß die Ursache ist, aber der “C:” ist auf jeden Fall falsch, müßte “C|” heißen.

Ich verwende für lokale Tiles allerdings auch immer einen lokalen HTTP Server.

bye, Nop

-snip-

Edit: Vorschlag wieder zurückgezogen. Hatte überlesen, dass Du OpenLayers.Layer.OSM verwendest. Da dürfte meine Lösung nicht funktionieren.

Habe OpenStreetMap.js so umgebaut:

OpenLayers.Layer.OSM.Mapnik = OpenLayers.Class(OpenLayers.Layer.OSM, {
    /**
     * Constructor: OpenLayers.Layer.OSM.Mapnik
     *
     * Parameters:
     * name - {String}
     * options - {Object} Hashtable of extra options to tag onto the layer
     */
    initialize: function(name, options) {
//        var url = [
//            "http://a.tile.openstreetmap.org/${z}/${x}/${y}.png",
//            "http://b.tile.openstreetmap.org/${z}/${x}/${y}.png",
//            "http://c.tile.openstreetmap.org/${z}/${x}/${y}.png"
//        ];
        var url = [
            "local_map/${z}/${x}/${y}.png"
        ];
        options = OpenLayers.Util.extend({ numZoomLevels: 19, buffer: 0 }, options);
        var newArguments = [name, url, options];
        OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
    },

    CLASS_NAME: "OpenLayers.Layer.OSM.Mapnik"
});

dann greiffe ich auf lokale Daten zu.
local_map ist eine Unterverzeichnis des Verzeichnisses, in dem das Haupt-html steht.

@Bali05: Wenn Du mir Deine Emailadresse per PM zusendest, schicke ich Dir eine Musterlösung für OpenLayers und lokale Tiles zu, die bei mir gut funktioniert.

Edit: Datei ist kein Geheimnis, habe aber im Forum noch keine einfache Methode gefunden Dateien auszutauschen

Danke für die vielen raschen Antworten.
Aktuell bin ich noch am Ausprobieren. Ich vermute mal, dass ich mehr als einen Fehler gemacht habe.
Ich melde mich nochmal, wenn es läuft.

So, es hat zwar lange gedauert.
Aber jetzt läuft es bei mir endlich. Hatte diverse Fehler im Code (Leerzeichen im Pfadstring zuviel, etc.). Ich schiebe es einfach mal auf Konzentrationsmangel in Folge von Müdigkeit.

Vielen Dank an alle - insbesondere an Andreas, mit dessen Code ich meinen nochmal Schritt für Schritt überprüfen und so die Fehler korrigieren konnte.