1

I have an OpenLayers map and I create it using a JavaScript function. I then have a button which when pressed calls another JavaScript function which has code to add a marker to the map.

For some reason the marker is not added.

Code for OpenLayers map creation:

function init()
    {
        var map, baseLayer;
        var options = {numZoomLevels: 5, isBaseLayer: true,};

        map = new OpenLayers.Map('map');            
        baseLayer = new OpenLayers.Layer.Image("My map","map.png", 
        new OpenLayers.Bounds(-2000, -2000, 1000, 1000),
        new OpenLayers.Size(1500,1500), options);
        map.addLayer(baseLayer);
        var center = new OpenLayers.LonLat(-100,-100);
        map.setCenter(center ,0);  
        map.addControl(new OpenLayers.Control.LayerSwitcher());
        map.addControl(new OpenLayers.Control.MousePosition());
        var size = new OpenLayers.Size(21,25);
        var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
        var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png',size,offset);
        var markers = new OpenLayers.Layer.Markers( "Marker" );
        map.addLayer(markers);
    }   

Code for adding marker:

function addMarker(x, y)
    {    
        markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(x, y),icon));
    }

Any help is much appreciated :)

1
  • variables "markers" and "icon" are visible inside the function "addMarker"? Commented Apr 16, 2013 at 18:44

1 Answer 1

2

This works fine for me :

var markers,icon;
function init(){
    var map, baseLayer;
    var options = {numZoomLevels: 5, isBaseLayer: true,};

    map = new OpenLayers.Map('map');            
    baseLayer = new OpenLayers.Layer.Image("My map","map.png", 
    new OpenLayers.Bounds(-2000, -2000, 1000, 1000),
    new OpenLayers.Size(1500,1500), options);
    map.addLayer(baseLayer);
    var center = new OpenLayers.LonLat(-100,-100);
    map.setCenter(center ,0);  
    map.addControl(new OpenLayers.Control.LayerSwitcher());
    map.addControl(new OpenLayers.Control.MousePosition());
    var size = new OpenLayers.Size(21,25);
    var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
    //instance the icon
    icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png',size,offset);
    //instance the marker layer
    markers = new OpenLayers.Layer.Markers( "Marker" );
    map.addLayer(markers);
}

function addMarker(x, y){    
    markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(x, y),icon));
}
Sign up to request clarification or add additional context in comments.

1 Comment

That's correct. To explain it: icon and markers were local variables in init() and were not accessible in addMarker. In Maxi's code, those two variables are moved to global scope.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.