OpenLayers Alternativtext für Karte

Hi,
bietet OpenLayers eine Funktion, z.B. Text anzuzeigen, wenn die Karte nicht geladen werden kann (weil z.B. die Internetverbindung getrennt ist)?

Du kannst Dir mal in OpenStreetMap.js ansehen, wie “OpenLayers.Util.onImageLoadError” eingebunden ist. Das lädt dort einfach ein Bild namens “OpenLayers.Util.OSM.MISSING_TILE_URL” (dieses “OSM coming soon”) nach, aber im Prinzip kann man dort auch was anderes einbinden.

Falls Du einen statischen Text an Stelle der fehlenden Kachel haben willst: Einfach ein PNG mit Deinem Spruch drauf malen und “OpenLayers.Util.OSM.MISSING_TILE_URL” auf diese URL umbiegen.

Grüße, Max

Das hilft aber nicht für den Fall, dass keine Internetverbindung da ist. Es sei denn das Bild liegt schon im Speicher.

Eine lokale Kopie ist sowieso zu empfehlen, sonst kommen die Grafikelemente von OL und die js ja auch nicht.

Gruß,
ajoessen

Jo, zu kurz gedacht… hab jetzt nur dran gedacht, dass die Seite mit dem OL noch erreichbar ist, der Tileserver aber nicht…

Ja dann… In onImageLoadError() kein Bild laden, sondern stattdessen den Text ausgeben. An dieser Stelle wird allerdings entweder das Laden eines Bildes verlangt oder garnichts. Der Text kann also nicht statt des Bildes ausgegeben werden, sondern muss woanders hingeschrieben werden (ein div neben dem Bild, ein Layer über dem Bild, ein alert(), ein Popup…).

Die Seite liegt anscheinend in Intranet/lokal vor. ansonsten würde sie ja auch nicht angezeigt werden, wenn keine Internetverbindung besteht. Dann könnte man a) allen OL-Kram auch dort platzieren und dann ein Fehlerbild anzeigen, oder halt b) einen Fehler ausgeben, wenn er den OL-Kram nicht findet.

Hab jetzt mal die entsprechende Stelle im Skript rausgesucht, allerdings verstehe ich grad nicht wie ich den Pfad ändern kann, bzw. wo der Pfad zum Bild zu finden ist.

Das steht in der Openstreetmap.js:


/**
 * Constant: MISSING_TILE_URL
 * {String} URL of image to display for missing tiles
 */
OpenLayers.Util.OSM.MISSING_TILE_URL = "http://www.openstreetmap.org/openlayers/img/404.png";
OpenLayers.Util.OSM.originalOnImageLoadError = OpenLayers.Util.onImageLoadError;


OpenLayers.Util.onImageLoadError = function() {
    if (this.src.match(/^http:\/\/[abc]\.[a-z]+\.openstreetmap\.org\//)) {
        this.src = OpenLayers.Util.OSM.MISSING_TILE_URL;
    } else if (this.src.match(/^http:\/\/[def]\.tah\.openstreetmap\.org\//)) {
        // do nothing - this layer is transparent
    } else {
        OpenLayers.Util.OSM.originalOnImageLoadError;
    }
};

Gruß,
ajoessen

Das da wäre ein Beispiel, wo jede Kachel durch ein Smiley ersetzt wird, wenn das Internet zum Tileserver kaputt ist (oder ich den Domainnamen vom Tileserver kaputtmache):

<head>  
<script src="http://openlayers.org/api/OpenLayers.js"></script>               
<script type="text/javascript">

OpenLayers.Util.onImageLoadError=function(){
  this.src = "http://upload.wikimedia.org/wikipedia/commons/thumb/7/79/Face-smile.svg/200px-Face-smile.svg.png";
 }
  
function init(){
 map = new OpenLayers.Map('map');
 map.addControl(new OpenLayers.Control.Navigation());
 map.addControl(new OpenLayers.Control.Attribution());
 var layerMapnik = new OpenLayers.Layer.OSM("osm","http://tah.openstreetmap.KAPUTT/Tiles/tile/${z}/${x}/${y}.png");
 map.addLayers([layerMapnik]);
 map.setCenter(0,0,2);
}
</script>

</head><body onload="init()">
 <div id="map" style="width: 500; height: 500;"></div>
</body></html>

Statt “this.src = …” kannst natürlich auch “alert(“Das Internet ist kaputt”);” schreiben. Dann bekommst Du für jeden fehlgeschlagene Kachelversuch ein Popup.

vielen dank schonmal…

Da hab ich noch eine ähnliche Frage, und zwar wie man den Image-Defaultpfad (“img”) ändert?

Nahmd,

OpenLayers.ImgPath='pfad/zu/deinem/image/verzeichnis';

Wenn der Pfad relativ ist, wird er relativ zur URL der Seite ausgewertet.

Gruß Wolf

ah, vielen dank!