OpenLayers:解像度の代わりにスケールを使用する


8

OpenLayersソースコードをあちこちと見てみると、ズームレベルに関連するすべてが解像度を使用して行われているようです。これは画面スペースに直接関係しているので、十分に公平です。

ただし、代わりにスケールを使用し、さらに許可されたスケールをさらに明示的に定義したいと思います。
-これは可能ですか?

これまでのところ、解像度に変換する一連のスケールを作成しました。

var scales = [500, 1000, 2000, 4000, 10000, 25000, 50000];
var resolutions = [];
for(var i = 0; i < scales.length; i++) {
    resolutions.push(OpenLayers.Util.getResolutionFromScale(scales[i], units));
}

map = new OpenLayers.Map('', {                        
    ...
    minScale: scales[scales.length - 1],
    maxScale: scales[0],        
    resolution: resolutions,
    numZoomLevels: scales.length,
    ...
});

私の問題は、最初と最後のスケールが尊重されることですが、スケールに変換された現在の解像度の間に、指定した解像度の中にありません。
-私は何を逃したのですか?

回答:


18

マップで縮尺を使用するには:

  • 'scales'オプションのみを設定します。maxResolution、minResolution、maxScale、minScale、numZoomLevels、またはその他のスケール関連のプロパティは設定しないでください。スケール分母(またはスケール)の配列に設定します。
  • 単位を設定します。メートルの場合、これは「m」、度、「度」などにする必要があります。
  • maxExtentを設定できます。minExtentを設定しないでください。

これを実行したら、縮尺をマップで使用する必要があります。(それらは、最もズームアウトされたもの-最高のスケールの分母-から最もズームインされたもの-最小のスケールの分母に並べられることに注意してください。)

あなたの場合、これは正確に次のようになります:

map = new OpenLayers.Map('map', {                        
  scales: scales,
  units: 'm' // or whatever       
});

次に、レイヤーを追加します。

レイヤーベースの解像度オプションはマップを「制御」することに注意してください。通常、これらの指定は、マップまたはレイヤーの両方ではなく、マップでのみ行う必要があります。

ベースレイヤーがマップの全体的な縮尺を制御することに注意してください。オーバーレイは、ベースレイヤーによって完全に制御されます。

OpenLayersは72のDPI仮定を使用することに注意してください。このDPI設定を制御するには、マップを作成する前にOpenLayers.DOTS_PER_INCHを設定できます。一般的な値(SLD仕様で使用される)は異なるため、この仮定が重要な場合は、この構成パラメーターをサーバーに一致するように変更する必要があります。


1
@Christopher:ありがとうございます。それはまさに私が探していたものであり、それは魅力のように機能していました:) scalesソースまたはドキュメントのいずれかでパラメータを見つけることができません:dev.openlayers.org/docs/files/OpenLayers/Map-js.html
チャウ

1
 var options = { scales: [50000000, 30000000, 10000000, 5000000],
                resolutions: [1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125],
                minScale: 50000000,
                maxResolution: "auto",
                maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90),
                maxResolution: 0.17578125,
                maxScale: 10000000,
                minResolution: "auto",
                minExtent: new OpenLayers.Bounds(-1, -1, 1, 1),
                minResolution: 0.0439453125,
                numZoomLevels: 5,
                units: "degrees"
              };
map = new OpenLayers.Map( $('map') , options);

単位を設定する必要があります: 単位:「度」

文字列-レイヤーを表示する単位。

これは、スケール解像度の計算に影響します。

公式ソース:http : //trac.openlayers.org/wiki/SettingZoomLevels

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.