2012-02-13 308 views
3

我使用的是Patrick Wied的OpenLayers Heatmap圖層,但只適用於英國的地點。如何在OpenLayers中設置初始地圖區域?

如何預設初始地圖顯示區域以顯示英國?

下面是我在一個ASPX頁面

var map, layer, heatmap; 
    function init() { 
    var testData = <asp:literal id="cLtMapData" runat="server" />  
    var transformedTestData = { max: testData.max, data: [] }, 
     data = testData.data, 
     datalen = data.length, 
     nudata = []; 
    // in order to use the OpenLayers Heatmap Layer we have to transform our data into 
    // { max: <max>, data: [{lonlat: <OpenLayers.LonLat>, count: <count>},...]} 
    while (datalen--) { 
     nudata.push({ 
     lonlat: new OpenLayers.LonLat(data[datalen].lon, data[datalen].lat), 
     count: data[datalen].count 
     }); 
    } 
    transformedTestData.data = nudata; 
    map = new OpenLayers.Map('heatmapArea'); 
    layer = new OpenLayers.Layer.OSM(); 

    // create our heatmap layer 
    heatmap = new OpenLayers.Layer.Heatmap("Heatmap Layer", map, layer, { visible: true, radius: 10 }, { isBaseLayer: false, opacity: 0.3, projection: new OpenLayers.Projection("EPSG:4326") }); 
    map.addLayers([layer, heatmap]); 
    map.zoomToMaxExtent(); 
    //maxExtent: new OpenLayers.Bounds(-1*b, -1*b, b, b); 
    map.zoomIn(); 
    heatmap.setDataSet(transformedTestData); 
    } 

這幾乎完全一樣帕特里克演示頁面中使用的代碼,但是有一個區別 - VAR TESTDATA =(一個asp字面) - 這樣我就可以使用動態爲用戶選擇的數據,並通過將英國郵政編碼轉換爲經度和緯度的存儲過程從SQL數據庫中檢索。

回答

0

我會在地圖初始化中做到這一點。事情是這樣的:

map = new OpenLayers.Map({ 
     projection: new OpenLayers.Projection("EPSG:900913"), 
     units: "m", 
     numZoomLevels: 18, 
     maxResolution: 156543.0339, 
     maxExtent: new OpenLayers.Bounds(
      -20037508.34, -20037508.34, 20037508.34, 20037508.34 
     ), 
     layers: [ 
      new OpenLayers.Layer.OSM("OpenStreetMap", null, { 
       transitionEffect: 'resize' 
      }) 
     ], 
     center: new OpenLayers.LonLat(-10309900, 4215100), 
     zoom: 4 
    }); 
+0

這看起來有用,我只是想知道這行代碼「中心:新OpenLayers.LonLat(-10309900,4215100),」 - 和LonLat單位是什麼?他們是「正常的」長/ lat x 10^6? – 2012-02-14 15:03:06

+0

我必須做一些錯誤的...如果我試試這個,「VAR LAT = 52; \t \t VAR LON = -1; \t \t VAR變焦= 3; map.setCenter(新OpenLayers.LonLat(LON, lat),縮放);「它放大了,但是地圖集中在西非,而不是英國 – 2012-02-14 15:25:03

+0

LonLat在地圖的投影中。因此,在這種情況下使用米的Web墨卡託。您需要獲得您所在地區的網站mercator座標(和中心)或進行投影。 – 2012-02-14 15:47:47

0
var lat = -3.841867446899414; 
     var lon = 43.466002139041116; 
     var zoom = 0; 


     var fromProjection = new OpenLayers.Projection("EPSG:28992"); // EPSG:4326Transform from WGS 1984 
     var toProjection = new OpenLayers.Projection("EPSG:900913"); // to Spherical Mercator Projection 
     var position = new OpenLayers.LonLat(lon, lat).transform(fromProjection, toProjection); 



     var options = { 

      controls: [ 
     new OpenLayers.Control.Navigation(), 
     new OpenLayers.Control.MousePosition(), 

     new OpenLayers.Control.PanZoomBar(), 
     new OpenLayers.Control.Permalink() 

     ] 
     }; 

     map = new OpenLayers.Map("basicMap", options); 
     var mapnik = new OpenLayers.Layer.OSM(); 
     map.addLayer(mapnik);   
     map.setCenter(position, zoom);