2013-03-30 167 views
1

我是Openlayers的新手,所以不確定是什麼錯誤。我可以在更改選擇下拉菜單和單擊地圖時添加標記。當我放大地圖時,問題就出現了,標記消失了。Openlayers:縮放時標記消失

我意識到標記不會消失,他們只是移動到另一個地方,到達0,0點。

這是代碼

(function($) { 
$().ready(function() {   
    var ZOOM_LEVEL_PROVINCE = 12; 

    var projection = new OpenLayers.Projection("EPSG:4326"); 

    var map; 
    var markerLayer; 

    var initMap = function() { 

     map = new OpenLayers.Map ("map", { 
      controls:[ 
       new OpenLayers.Control.Navigation(), 
       new OpenLayers.Control.PanZoomBar(), 
       new OpenLayers.Control.Permalink(), 
       new OpenLayers.Control.ScaleLine({geodesic: true}), 
       new OpenLayers.Control.Permalink('permalink'), 
       new OpenLayers.Control.MousePosition(),      
       new OpenLayers.Control.Attribution()], 
      //maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34), 
      maxResolution: 156543.0339, 
      numZoomLevels: 19, 
      units: 'm', 
      projection: new OpenLayers.Projection("EPSG:4326"), 
      displayProjection: new OpenLayers.Projection("EPSG:4326") 
     }); 

     layer = new OpenLayers.Layer.OSM("Simple OSM Map"); 
     map.addLayer(layer); 

     var point = getLonLatProvince('san-jose'); 
     map.setCenter(point.transform(projection, map.getProjectionObject()), ZOOM_LEVEL_PROVINCE); 
    } 

    var initMakerLayer = function(){ 
     markerLayer = new OpenLayers.Layer.Markers("MarkerLayer"); 
     markerLayer.id = "MarkerLayer"; 
     map.addLayer(markerLayer); 
    } 

    var showMarker = function(province){ 
     var point = getLonLatProvince(province); 
     var location = point.transform(projection, map.getProjectionObject()); 
     showMarkerPosition(location); 
    } 

    var showMarkerPosition = function(location){ 
     markerLayer.clearMarkers(); 
     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); 

     markerLayer.addMarker(new OpenLayers.Marker(location,icon.clone())); 

     var newPoint = location.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326")); 

     $("#edit-plonlat").val(newPoint); 
    } 

    var getLonLatProvince = function(province){ 
     ... 
    } 

    initMap(); 
    initMakerLayer(); 
    showMarker('san-jose'); 

    map.events.register("click", map, function(e) { 
     var location = map.getLonLatFromPixel(e.xy); 
     showMarkerPosition(location); 
    }); 


    $('#edit-pprovinces').change(function() { 
     var selectedPronvince = $(this).val(); 
     var point = getLonLatProvince(selectedPronvince); 
     showMarker(selectedPronvince); 
     map.setCenter(point.transform(projection, map.getProjectionObject()), ZOOM_LEVEL_PROVINCE); 
    }); 
}); 

})(jQuery的);

回答

0

我認爲你對map.getLonLatFromPixel(e.xh)的調用是在WGS84(EPSG:4326)中獲取一個位置,因爲那是地圖的投影。然後你在你的「click」處理程序中調用showMarkerPosition。在showMarkerPosition中,您將該位置從Google轉換爲WGS84投影,這會將米的大經緯度變爲以度爲單位的更小的緯度/經度。

如果你已經開始測量這個米到度的轉換度,那麼我認爲你的最終經緯度非常接近非洲西海岸的0,0。

投影轉換問題是當我看到0,0 lat/lon's時我總是開始尋找的地方。