Openlayers: Marker verschwinden nach Event

Hallo,

bin gerade dabei bestimmte Orte mittels Marker auf eine Karte darzustellen. Die einzelnen Marker sind anklickbar, wodurch ein Event ausgelöst wird. Durch das Auslösen wird der div-Bereich mit der ID: ‘viewer’ im Html-tag geändert und bestimmte Informationen zum Ort angezeigt. Dies alles funktioniert auch soweit wunderbar, jedoch kann ich den Marker nur einmal anklicken und beim darauf folgenden eventuellen zoomen wandert dann mein Marker zu lon/lat=0/0 :frowning: .

die vollständige Seite gibts hier: Click.

Event-Methode:


marker.events.register('click', lMarker, function(evt){    
        var ll = evt.object.lonlat.transform(map.getProjectionObject(), new OpenLayers.Projection("EPSG:4326")); 
        for each (var item in hochschule){                
                //if (ll.lon==item.lon && ll.lat==item.lat){
                if (Math.abs(ll.lon-item.lon) < 0.00001 && Math.abs(ll.lat-item.lat) < 0.00001){
                        document.getElementById("viewer").innerHTML = 
                                '<a href="'+item.web+'" target="_blank" >'+item.uni+'</a>'+'<br>'+item.str+'<br>'+item.plz;
                }
        }                
        OpenLayers.Event.stop(evt);        
});    

bin momentan ratlos wie ich diesen versetzen entgegenwirken könnte. Hat wer vlt. hierfür eine Erklärung oder einen Rat?

MfG PeiD

Hi,

so auf verdacht würde ich mal die Zeile:
OpenLayers.Event.stop(evt);

testweise entfernen, da hier das click-event verloren gehen müsste.
das würde dann auch noch dein lon,lat 0 erklären.

Hy,

danke für Tipp. hab ich auch gleich ausprobiert :smiley: (siehe hier). aber leider keinerlei Veränderung zum vorhergehenden verhalten. :cry:

Ich würde dies er dynamisch laden, da du so nur ca. 60 POI’s darstellen solltest.(performance)
Wenn du aber mehr haben möchtest, solltest du dir mal quältext ; ) reinziehen.
Link
oder Openlayer - Dynamic text layer

Habe da mal grob was gebastelt(ungetestet):


<html><body onload="init()">
  <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
  <script>
function destroyoutput(feature){
    //document.getElementById("viewer").innerHTML = '';
}

function createoutput(feature){
    //document.getElementById("viewer").innerHTML = '<a href="'+feature.attributes.title+'" target="_blank" >'+feature.attributes.description+'</a>'+'<br>'+feature.attributes.str+'<br>'+feature.attributes.plz;
}

function init(){
    var lon = 10.44768;
    var lat = 51.163375;
    var zoom = 5;
    var feature;
    map = new OpenLayers.Map("map");
    map.addLayer(new OpenLayers.Layer.OSM());
 
    //Set start centrepoint and zoom    
    var lonLat = new OpenLayers.LonLat( lon, lat)
          .transform(
            new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
            map.getProjectionObject() // to Spherical Mercator Projection
          );
     
var pois=new OpenLayers.Layer.Vector("POI", {strategies: [new OpenLayers.Strategy.BBOX({resFactor: 1.1})],protocol: new OpenLayers.Protocol.HTTP({url: "poi.txt",format: new OpenLayers.Format.Text()})});

    selcontrol=new OpenLayers.Control.SelectFeature(pois,{onSelect: createoutput,onUnselect: createoutput});
    map.addControl(selcontrol);
    selcontrol.activate();
    map.addLayer(pois);
    map.setCenter (lonLat, zoom);
}    
  </script>
<div id="map">map</div><!-- map -->
<div id="viewer">viewer</div><!-- viewer -->
</body></html>

So in etwa, dein Array wird dann die Textdatei:


lat    lon    title    description     icon
49.4819200    10.9830100    text    Beschreibung    http://wiki.openstreetmap.org/w/images/e/e7/Ol_icon_blue_example.png
49.477078    10.990049    text    Beschriebung2    http://wiki.openstreetmap.org/w/images/e/e7/Ol_icon_blue_example.png

Wichtig ist hier die Tab-trennung und am Schluss Return

Vielen Dank soweit, hab dein Code jedoch leider nicht zum laufen bekommen :wink:
konnte aber mittlerweile mein Problem lösen.

sehr aufschlussreich war hierbei folgendes Beispiel: http://dev.openlayers.org/releases/OpenLayers-2.10/examples/select-feature-multilayer.html

MfG PeiD

Hi PeiD,

also bei mir geht es immer noch nicht? (Firefox 4)
Dein Beispiel kannte ich bis jetzt noch nicht : ), ist eig. das was ich dir gezeigt habe (OpenLayers.Layer.Vector, SelectFeature).

Nachteil ist halt hier, dass deine Pins nicht dynamisch geladen werden.
Aber wenn du nicht mehr hast, ist das völlig ausreichend : ).

VG