Hallo,
ich stehe ein bisschen auf dem Schlauch.
Habe auf der Arbeit ein OSM-Projekt vorgesetzt bekommen, das sich im Aufbau befindet.
Das Problem ist, dass die Popups sich zwar öffnen.
Aber wenn sich ein neuer Popup öffnet, dann bleiben die alten ebenfalls geöffnet.
Allerdings sollen offene Popups geschlossen werden.
Das ist mein Problem. Ich habe mich schon ein bisschen eingelesen, aber ich fürchte, ohne Hilfe komme ich nicht weiter.
Wenn ich es richtig gesehen habe, dann kommt der mir vorgesetzte Code großenteils auch aus Anleitungen und Tutorials. Ich bin also guter Hoffnung, dass irgendwer den Code kennt.
Aus dieser Anleitung: http://wiki.openstreetmap.org/wiki/Die_JavaScript_Dateien wurde das tom.js eingebunden.
Im HTML-Template wird dann im Javascript ein Array mit den Standort-Infos eingebunden (Code ist vereinfacht, da die genauen Koordinaten und Daten nichts zur Sache tun):
var varParcs=[["8.858356","54.129056","Titel","ein paar Daten mehr"]["1,"2","Titel","ein paar Daten mehr"]["3","4","Titel","ein paar Daten mehr"]["5","6","Titel","ein paar Daten mehr"]];
//Dann kommt der interessante Teil, auch hier werde ich vereinfachen, um die Hilfe zu erleichtern:
OpenLayers.Lang.setCode('de');
// Position und Zoomstufe der Karte
var lon = 10.426025;
var lat = 51.781436;
var zoom = 6;
map = new OpenLayers.Map('map', {
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
controls:
[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.PanZoomBar()
],
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34, 20037508.34),
numZoomLevels: 18,
maxResolution: 156543,
units: 'meters'
});
var mapnik = new OpenLayers.Layer.OSM(); //Kartenlayer erzeugen
map.addLayer(mapnik);
/* Es werden noch ein paar mehr Layers angelegt
var layerParks = .......
*/
jumpTo(lon, lat, zoom);
// Die folgenden Variablen sind mir - bis auf die Icons - nicht ganz klar. Aber ich glaube nicht, dass die mit dem Schließen der Popups etwas zu tun haben.
var size = new OpenLayers.Size(21, 25);
var sizeHaupt= new OpenLayers.Size(26, 42);
var sizeWind= new OpenLayers.Size(58, 69);
var sizeWald = new OpenLayers.Size(39, 52);
var sizeBeratung = new OpenLayers.Size(42, 30);
var sizeService = new OpenLayers.Size(43, 40);
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
var middleWind = new OpenLayers.Pixel(-(sizeWind.w/2), -sizeWind.h/2);
var middleWald = new OpenLayers.Pixel(-(sizeWald.w/2), -sizeWald.h/2);
var middleService = new OpenLayers.Pixel(-(sizeService.w/2), -sizeService.h/2);
var middleBeratung = new OpenLayers.Pixel(-(sizeBeratung.w/2), -sizeBeratung.h/2);
var icon = new OpenLayers.Icon('http://www.openstreetmap.org/openlayers/img/marker.png',size,offset);
var iconHaupt = new OpenLayers.Icon('bilder/osm/thron.png',sizeHaupt,offset);
var iconWind = new OpenLayers.Icon('bilder/osm/wind-orange.png',sizeWind,middleWind);
var iconWald = new OpenLayers.Icon('bilder/osm/baum.png',sizeWald,middleWald);
var iconBeratung = new OpenLayers.Icon('bilder/osm/telefon.png',sizeBeratung,middleBeratung);
var iconService = new OpenLayers.Icon('bilder/osm/service.png',sizeService,middleService)
/******************************/
var x = 0;
var y = 0;
// Dann werden für jeden Eintrag im Array die Inhalte in eine vorläufige Variable geschrieben und in String umgewandelt, um beim addMarker darauf zuzugreifen
for(var i = 0; i < varParcs.length; i++) {
x = varParcs[i][0];
y = varParcs[i][1];
y = parseFloat(y);
x = parseFloat(x);
var bez = varParcs[i][2];
/* Noch einige Variablen mehr
var typ = ...
...
*/
bez = String(bez);
/* Noch einige Umwandlungen mehr
typ = String( ...
...
*/
// Eigentlich findet der addMarker-Aufruf mithilfe viele if-Abfragen statt, um den Popup mit den richtigen Angaben auf das richtige Layer zu bekommen.
// Statt dessen zeige ich einen beispielhaften Aufruf.
addMarker(layerParks, x, y, "<b>Windpark<br>" + bez + "</b><br>Anlagentyp: " + typ + "<br>WEA-Anzahl: "+ anz + "<br>Nennleistung: " + nen + "<p><img src=\"wind-farm.png\"></p>", iconWind.clone());
}
Ich hoffe, jemand kann mir helfen.
Immerhin arbeiten fast alle OSM-Projekte, die ich gesehen habe, so wie ich es will
Lieben Gruß
Chricken