Mehrere Icons einbinden Openstreetmap/Openlayers

Hallo,

ich würde gerne auf dieser karte verschiedene Icons einbinden:
http://christopherstark.de/extern/karte-test.htm

Das Problem: Ich weiß nicht wie es geht, bzw. wie ich einen neuen Layer für andere Icons hinzufüge, ohne daß der Javascript-text “kaputt” geht.

die Icon-Datei liegt in der utils.js unter
var icon = makeIcon(‘/extern/steinkohle.png’, 32, 32);

Der entsprechende Layer heißt kohlekraftwerke

Kann mir da jemand von Euch helfen?

Viele Grüße Christopher

Das könnte etwas damit zu tun haben, dass du laut Dokumentation Icons nur einmal nehmen darfst:
http://dev.openlayers.org/docs/files/OpenLayers/Marker-js.html
Im Beispiel dort wird “icon.clone()” verwendet , um mehrere gleiche Icons zu benutzen.

Könnte ich denn einfach einen komplett neuen Layer mit eigener js-Datei anlegen, in welchem auf eine andere Icondatei verwiesen wird`? Es wäre echt gut, wenn es möglich wäre, mehrere verschiedene Icons auf einer Seite anzuzeigen.

Vielleicht geht es so:

utils.js - zusätzlicher Übergabeparameter “icon”:

function addMarker(layer, lon, lat, popupContentHTML, icon)

Diese Zeile aus utils.js löschen:

var icon = makeIcon('/extern/steinkohle.png', 32, 32);

und in markers-test.js oder direkt in der html-Datei

var icon1 = makeIcon('/extern/steinkohle.png', 32, 32);
var icon2 = makeIcon('/extern/braunkohle.png', 32, 32);

usw. vor dem jeweiligen addMarker-Aufruf einfügen und dabei icon1 usw. als zusätzlichen Übergabeparameter anhängen:

addMarker(layer1, lon1, lat1, popupContentHTML1, icon1);
addMarker(layer2, lon2, lat2, popupContentHTML2, icon2);

Hm, das scheint leider nicht zu klappen.

Das Problem hierbei scheint mir auch zu sein, daß “layer1” in keiner anderen Datei erwähnt wird, oder?

http://christopherstark.de/extern1/karte-marker4.htm

Für “layer1” gibts du bei dir “layer_local” ein. Falls du verschiedene Layer hast, gibt du immer den Namen des Layers ein, zu dem der entsprechende Marker gehören soll; für “lon1, lat1” jeweils die zum Marker gehörenden Koordinaten, für “popupContentHTML1” den dazugehörenden HTML-Text, und dann die dazu gehörende icon-Variable.

Hallo,
möchtest Du so etwas wie auf:
http://www.hoogstede.de/hoogstede/hoogstede.htm ?
Dann könnte ich Dir helfen!
Luccass

@Luccass

nee, diese Methode mit der txt-Datei möchte ich nicht verwenden, weil man da die Größe der Popupboxen nicht verändern kann und die Dinger keine Knöpfe zum schließen haben. Ich versuche das jetzt lieber mit der openlayers-Methode.

@railsnail:

Ok, habe Deine vorgeschlagenen Änderungen durchgeführt, aber einen zweiten Layer bekomme ich gerade nicht hin. Ich habe zwar zum layer_local noch den layer-braun hinzugefügt:

und

Aber dennoch erscheint beim Kreuz oben in der Karte nicht der Braunkohle-Layer…

PS OK, der “Braunkohle” Layer wird zwar angezeigt, aber es tut sich nichts, wenn ich ihn ein- und ausschalte.

Wie sieht denn createMarkers() jetzt aus? Was ist die aktuelle html-Datei?

Ist es richtig, dass dort “layer_braun = new OpenLayers.Layer.Markers1” und nicht “Markers” steht?

Danke für Deine Hilfe!!

Hm, ich habe Markers1 jetzt in Markers geändert.
Es geht leider noch nicht richtig. Es wird ausschließlich die eine Sorte der Icons angezeigt (immerhin wird schon was angezeigt!)

http://christopherstark.de/extern/karte-funktioniert-mi-marker.htm

Irgendwo scheint noch ein Fehler drin zu sein…

Hey.

Irgendwas passt auch mit dem Verschieben nicht, das ist inicht gleich der Mausbewegung der Maus.

Gruß

Ja, das mit dem Verschieben kenn ich schon:

http://forum.openstreetmap.org/viewtopic.php?id=5599

konnte das Problem hier aber noch nicht lösen. Ich habe leider keine Ahnung von Javascript - nur von “reverse-programming”

Für “function addMarker(layer, lon, lat, popupContentHTML, icon)” fehlt in function createMarkers() wahrscheinlich der Aufrufparameter für icon:
addMarker(layer_local, 6.615796,51.03779,‘…’);
(Den Text für popupContentHTML habe ich wegen der Übersichtlichkeit einmal durch Punkte ersetzt.)

Sollte wohl so aussehen

  1. für jedes Bild die Variable icon vorbesetzen:
    var icon1 = makeIcon(‘/extern/steinkohle.png’, 32, 32);
    var icon2 = makeIcon(‘/extern/braunkohle.png’, 32, 32);
  2. alle addMarker- Aufrufe zum Schluss in iconX ergänzen:
    addMarker(layer_local, 6.615796,51.03779,‘…’, icon1);
    addMarker(layer_local, 6.615796,51.03779,‘…’, icon2);

Hm, nein, das hatte ich bereits genau so gemacht.
Siehe auch hier:
http://christopherstark.de/extern/markers-final-do-marker.js

und hier
http://christopherstark.de/extern/karte-funktioniert-do-marker.htm

Hallo,

  • markers-final-do-marker.js ist in der Html-Datei nicht eingebunden
  • createMarkers() nur einmal zum Schluss aufrufen, nachdem alle map.addLayer() -Aufrufe fertig sind.

Hallo,

iin welcher Datei soll createMarkers am Ende aufgerufen werden? in der JS-Datei, oder html?

Das Problem mit dem Verschieben hat sich lustigerweise gelöst:
http://christopherstark.de/extern/karte-funktioniert-do-marker5.htm

Es wird aber nach wie vor auf der Karte beim Plus oben auch nur ein marker-Layer angezeigt

PS, ich bin gerade am überlegen, ob ich die Karte nicht so machen sollte (siehe ganz unten im Post):
http://forum.openstreetmap.org/viewtopic.php?pid=49112#p49112

Vielleicht weißt Du mir ja da helfen ? :slight_smile:

In der HTML-Datei sollte es etwa so aussehen:

layer_local = new OpenLayers.Layer.Markers("Kohlekraftwerke", { visibility: true });
map.addLayer(layer_local);
layer_braun = new OpenLayers.Layer.Markers("Braunkohle", { visibility: true });
map.addLayer(layer_braun);
createMarkers();

Außerdem sehe ich gerade, dass in der verwendeten utils.js die function addMarker(layer, lon, lat, popupContentHTML) ohne den letzten Übergabeparameter “icon” ist.

Hast du meine Mail vom 11.12. bekommen?

Nein, eine Email?

Meine Adresse ist hier:
http://christopherstark.de/epost.htm

Viele Grüße Christopher