Próbuję wyświetlić dwa markery na mapie, którą już zapisałem w tablicy. Chcę, aby markery były dynamicznie wyświetlane iz oknem wyskakującym dla każdego. Oto kod, który napisałem i edytowany z mojego ostatniego pytania. Dostaję nic na mapie, czy ktoś może naprawić problem? Próbowałem wiele rzeczy, ale nic nie działa. Naprawdę jestem nowicjuszem do map.

/* open street map newest version */
var map = new ol.Map({
    target: 'map', // the div id
    layers: [
        new ol.layer.Tile({
        source: new ol.source.OSM()
        })
    ],
    view: new ol.View({ 
        center: ol.proj.fromLonLat([4.35247, 52.520008]),
        zoom: 6,
        minZoom: 3
    })
});

//create an empty vectorSrc
var vectorSource = new ol.source.VectorSource();

var layer = new ol.layer.Vector({
    source: vectorSource,
    style: new ol.style.Style({
        image: new ol.style.Icon({
        src: 'https://wiki.openstreetmap.org/w/images/0/0c/Hgv.png', //
        scale: 0.4 // set the size of the vehicle on the map
        })
    })
});
for(var i=0; i < arrayPos.length; i++) {
    var long = arrayPos[i][0]
    var lat = arrayPos[i][1];
    var batteryCharge = arrayPos[i][3];
    
    // create a new feature with the positon values from the array
    var feature = new ol.Feature({
        geometry: new ol.geom.Point(ol.proj.fromLonLat([long, lat]))
    })

    //Batterycharge value is going to be printed in the Pop-up window
    feature.set('batteryCharge', batteryCharge);
    vectorSource.add(feature);
}
map.addLayer(layer);

//initialize the popup
var container = document.getElementById('popup');
var content = document.getElementById('popup-content');

var overlay = new ol.Overlay({
    element: container,
    autoPan: true,
    autoPanAnimation: {
        duration: 250
    }
});
map.addOverlay(overlay);

//display the pop with on mouse over event
map.on('pointermove', function (event) {
    if (map.hasFeatureAtPixel(event.pixel) === true) {  
        var coordinate = event.coordinate;
        const features = event.target.getFeatures();
        const batteryCharge  = features.get(0).get('batteryCharge');

        //simple text written in the popup, values are just of the second index
        content.innerHTML = event.traget+'<br><b>Batteriestatus: </b>'+batteryCharge;
        overlay.setPosition(coordinate);
    }
    else {
        overlay.setPosition(undefined);
    }
});
-1
unkown53 20 październik 2020, 16:04

1 odpowiedź

Najlepsza odpowiedź

event.target.getFeatures() służy do wybierania interakcji. Dla pointermove na mapie Spróbuj zastępować

if (map.hasFeatureAtPixel(event.pixel) === true) {  
    var coordinate = event.coordinate;
    const features = event.target.getFeatures();
    const batteryCharge  = features.get(0).get('batteryCharge');

Z

const features = map.getFeaturesAtPixel(event.pixel);
if (features.length > 0) {
    var coordinate = event.coordinate;
    const batteryCharge = features[0].get('batteryCharge');
0
Mike 20 październik 2020, 14:05