2017-12-12 25 views
0

指定されたバウンディングボックスでマップを中央に配置しようとしています。 OpenLayers FAQにも(swissProjectionを使って)その例がありますが、うまくいきません。いくつかのフォーラムで見て、それを動作させる方法を理解できません。openlayers - バウンディングボックスでマップを中央に揃える方法

多分誰かが知っています。ここで

はコードです:

var extent = [-9022321.0707,3022167.2243,-8849726.2608,3148441.1951]; 

var projection = new ol.proj.Projection({ 
    code: 'EPSG:3857', 
    extent: extent, 
    units: 'm' 
}); 
ol.proj.addProjection(projection); 

var map = new ol.Map({ 
    layers: [ 
    new ol.layer.Tile({ 
     source: new ol.source.OSM() 
    }) 
    ], 
    target: 'map', 
    view: new ol.View({ 
    projection: projection, 
    center: [0,0], 
    zoom: 0 
    }) 
}); 

答えて

1

あなたのコードが正しいですが、中心はあなたの範囲の範囲外です。それを修正するには2つの方法があります。

まず、有効なビューの中心とレベルを設定します。

例えば)

view: new ol.View({ 
    projection: projection, 
    center: [-8936023.66575, 3085304.2097], // guess it's the center of extent 
    zoom: 8 // whatever you want. 
}) 

次に、代わりProjectionextent設定View.fitを使用します。

var projection = new ol.proj.Projection({ 
    code: 'EPSG:3857', 
    //extent: extent, 
    units: 'm' 
}); 
... 
map.getView().fit(extent); 
+0

問題を解決し、投影からエクステントオプションを削除するのは、単にline map.getView()。fit(extent)でした。私はそれをテストし、オプションのズームとセンターは、ビューの新しいフィットが境界ボックスによって完全に定義されているため、設定する必要はありません。それは私が最初にゼロに設定した理由です。回答の上部を削除または編集し、解決済みとマークします。ありがとうございました! – krashennikov

+0

いずれかを選択できます。第一と第二の解決策の両方を行う必要はありません。 –

関連する問題