2013-04-16 30 views
1

我有一個OpenLayers地圖,我使用JavaScript函數創建它。然後我有一個按鈕,當按下時調用另一個JavaScript函數,它有代碼將一個標記添加到地圖。OpenLayers不添加標記到我的地圖

由於某種原因不添加標記。

爲的OpenLayers地圖創建代碼:

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); 
    } 

代碼添加標記:

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

任何幫助是非常讚賞:)

+0

變量「標記」和「圖標」在「addMarker」函數中可見? –

+0

我不太確定:S – mrpopo

回答

2

這對我工作得很好:

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)); 
} 
+2

這是正確的。解釋它:圖標和標記是init()中的局部變量,在addMarker中不可訪問。在Maxi的代碼中,這兩個變量被移至全局範圍。 – user1702401