Eigener Tileserver - Tiles werden mit Slippymap nicht angezeigt

Hallo,

ich habe mithilfe der Doku einen eigene Tileserver eingerichtet was auch recht gut geklaptt hat.

Server ist von Ext. Erreichbar. auch die automatisch erzeugte Slippymap arbeitet mit Local Tiles.

Nun habe ich folgendes Problem wenn ich die Slippy Map von einem anderen Ort aus ausführe bleiben die Tiles Rosa und werden nicht angezeigt. Über Grafik anzeigen kann ich mir die gerenderten Tiles aber anzeigen lassen.

Hast Du vielleicht in Deinem OpenLayers-Code noch irgendwo ein ‘localhost’ drinstehen, als Quelle für die Tiles?

EDIT: Hm, wenn du die Tiles einzeln anzeigen kannst, scheint es daran nicht zu liegen…

Daran kann es nicht liegen die Tiles sind da und von ext. abrufbar.
Wenn ich in der html der Slippymap meine IP mit a.tile.openstreetmap.org ersetze kann ich die Slippymap auch direkt vom Desktop aus starten und bekomme Tiles. Evtl Fehler in Zugriffsrechten ?

Anbei mal die Entscheidende Stelle der Slippymap

var newLayer = new OpenLayers.Layer.OSM("Local Tiles", "http://91.250.84.11/osm/${z}/${x}/${y}.png", {numZoomLevels: 19});
            map.addLayer(newLayer);

sowie die Statistik nach dem Aufruf:

NoResp200: 937
NoResp304: 0
NoResp404: 0
NoResp503: 0
NoResp5XX: 0
NoRespOther: 0
NoFreshCache: 916
NoOldCache: 0
NoFreshRender: 21
NoOldRender: 0
NoRespZoom00: 0
NoRespZoom01: 0
NoRespZoom02: 0
NoRespZoom03: 30
NoRespZoom04: 30
NoRespZoom05: 0
NoRespZoom06: 0
NoRespZoom07: 60
NoRespZoom08: 90
NoRespZoom09: 228
NoRespZoom10: 211
NoRespZoom11: 60
NoRespZoom12: 60
NoRespZoom13: 30
NoRespZoom14: 30
NoRespZoom15: 48
NoRespZoom16: 30
NoRespZoom17: 30
NoRespZoom18: 0
NoRes200Layer/osm/: 937
NoRes404Layer/osm/: 0

Kannst Du mal versuchen, folgende Option hinzuzufügen:


    tileOptions : {
        crossOriginKeyword : null
    }, 

also


var newLayer = new OpenLayers.Layer.OSM("Local Tiles", "http://91.250.84.11/osm/${z}/${x}/${y}.png", {
    tileOptions : {
        crossOriginKeyword : null
    }, 
    numZoomLevels: 19
});
map.addLayer(newLayer);

Ok Danke hat funktioniert.

ikonor, kannst du vielleicht etwas genauer erläutern, was diese Option genau bewirkt?

Danke, gis_jam

In den 2.12 Release Notes ist das kurz erklärt: OSM and Bing Layers (mittlerer Abschnitt). Alternativ zu Layer.OSM kann auch Layer.XYZ verwendet werden, dort ist die Option nicht nötig.

Also, so ganz bin ich noch nicht durchgestiegen, was wann warum benötigt wird, aber ich verstehe das so (ohne Garantie):

Mit 2.12 wurde die Möglichkeit eingeführt, Tile Images zu HTML5 Canvas zu konvertieren, siehe Release Notes: Tile Canvas. Da der Canvas auch manipuliert werden kann, sind wohl aus Sicherheitsgründen entsprechende Berechtigungen erforderlich, wenn die Tiles von einem fremden Server stammen (Stichwort CORS). Details siehe Kommentare zu verlinktem Pull Request (Suche nach “crossOrigin”).

openstreetmap.org unterstützt CORS, deshalb wird für Layer.OSM das crossOriginKeyword immer gleich mitgesendet, auch wenn es eigentlich nur für die getCanvasContext Funktion benötigt wird. Andere Server, die CORS nicht unterstützen, liefern zwar die angefragten Tiles aus, der Browser verweigert dann aber wegen fehlendem Access-Control-Allow-Origin Header generell den Zugriff.

Gruß,
Norbert

Merci, sehr anschaulich!

gis_jam