2017-02-22 40 views
0

私はBingでOpenLayers2を使用しています。私の顧客は地図とやりとりするために、より深いズームレベルが必要です。現在、getZoom()関数でテストした最大ズームレベルは19です。私はマップコンストラクタの "numZoomLevels"を高い数値に設定しようとしましたが、Bing/OLはそれを無視しているようです。私はタイルをより低いズームレベルに強制する方法があるのか​​、それとも細かい部分がぼやけても大きな画像を見ることができるように既存のタイルを単純に拡大することができるかどうか疑問に思っていました。しかし、正確な緯度/経度値を持つことが顧客の機能にとって最重要であるため、私は投影を変更しないことが重要です。OpenLayers 2でタイルを拡大するか、歪みのない投影で歪みのないMaxZoomを増やす

map = new OpenLayers.Map('map', { 
    allOverlays: false, 
    numZoomLevels: 20, 
    controls: [ 
     new OpenLayers.Control.Navigation({ 
      dragPanOptions: { 
       enableKinetic: true 
      } 
     }), 
     new OpenLayers.Control.LayerSwitcher(), 
     new OpenLayers.Control.Zoom({ 
      zoomInId: "customZoomIn", 
      zoomOutId: "customZoomOut" 
     }) 
    ]}); 

var aerial = new OpenLayers.Layer.Bing({ 
    name: "Aerial", 
    key: apiKey, 
    type: "Aerial" 
}); 

私はOL3 magnify exampleに遭遇しましたが、それはOL3と私はズームレベルだけでなく、コンテキスト・オーバーレイとして埋め込まれる拡大]オプションを必要とするので、私が変換できる範囲を超えてビットのために書かれています。また、私はキャンバスに数多くの経験はありません。どんな助けもありがとう!

答えて

0

私はそれを理解しましたが、実際は非常に簡単です。まず、numZoomLevelsはマップレベルではなく、マップレベルであったはずです。あなたはビングがあなたを提供するものを超えてズームインすることができるようにしたい場合は、以下のように、あなたはtrueにfractionalZoomを設定する必要があります。

map = new OpenLayers.Map('map', { 
    allOverlays: false, 
    fractionalZoom: true, 
    controls: [ 
     new OpenLayers.Control.Navigation({ 
      dragPanOptions: { 
       enableKinetic: true 
      } 
     }), 
     new OpenLayers.Control.LayerSwitcher(), 
     new OpenLayers.Control.Zoom({ 
      zoomInId: "customZoomIn", 
      zoomOutId: "customZoomOut" 
     }) 
    ]}); 

次に、それぞれの層の上に、あなたは、解像度の配列を設定する必要があります。 numZoomLevelsの下にリストする各ズームレベルの値を作成する必要があります。私は22のズームレベルが必要でした。 OpenLayers.Layer.Bingのソースコードで

var aerial = new OpenLayers.Layer.Bing({ 
     name: "Aerial", 
     key: apiKey, 
     type: "Aerial", 
     numZoomLevels: 22, 
     resolutions: bingResolutions, 
     serverResolutions: bingServerResolutions, 
     transitionEffect: 'resize' 
    }); 

既にでそれらの値にマッピングする定義された解像度のブロックを有していた:サーバ解像度はビング自体からタイルの解像度であるhttps://msdn.microsoft.com/en-us/library/aa940990.aspx

var bingResolutions = [156543.03390625, 78271.516953125, 39135.7584765625, 
19567.87923828125, 9783.939619140625, 4891.9698095703125, 
2445.9849047851562, 1222.9924523925781, 611.4962261962891, 
305.74811309814453, 152.87405654907226, 76.43702827453613, 
38.218514137268066, 19.109257068634033, 9.554628534317017, 
4.777314267158508, 2.388657133579254, 1.194328566789627, 
0.5971642833948135, 0.29858214169740677, 0.14929107084870338, 
0.07464553542435169]; 

var bingServerResolutions = [156543.03390625, 78271.516953125, 39135.7584765625, 
19567.87923828125, 9783.939619140625, 4891.9698095703125, 
2445.9849047851562, 1222.9924523925781, 611.4962261962891, 
305.74811309814453, 152.87405654907226, 76.43702827453613, 
38.218514137268066, 19.109257068634033, 9.554628534317017, 
4.777314267158508, 2.388657133579254, 1.194328566789627, 
0.5971642833948135]; 

。追加の解像度(0.29858214169740677, 0.14929107084870338, 0.07464553542435169)は、レイヤ19のタイルを拡大するだけの分数ズームレベルです。

Hereは、OSMレイヤのOpenLayersの作業例です。

これは他の人に役立つことを願っています!

関連する問題