範囲、解像度などのパラメーターを使用して現在のズームレベルのスケールを計算する方法


8

次のパラメーターを取得しました。

Width and height of Map: 450px, 560px

units : 'meters'

maxExtent : new OpenLayers.Bounds(806677.9759,802420.9858,8876817.5647,853497.8186405064)

resolutions: [199.51887828322785, 99.75943914161392, 49.87971957080696, 
24.93985978540348, 12.46992989270174, 6.23496494635087, 3.117482473175435, 
1.5587412365877176, 0.7793706182938588, 0.3896853091469294, 0.1948426545734647, 
0.09742132728673235, 0.048710663643366174, 0.024355331821683087, 0.012177665910841544,
0.006088832955420772, 0.003044416477710386, 0.001522208238855193]

numZoomLevels: 18

OpenLayers.DOTS_PER_INCH = 90.71428571428572;

現在のズームレベルのスケールを計算する方法を教えてくれたのは誰ですか?

回答:


14

マップの縮尺は、の比率として定義されdisplayed units / measured unitsます。実世界のユニットに到達するために2つのスケールと2つの異なるユニットをトラバースする必要があるため、具体的なケースは少し難しいです。

水平方向のスケールが垂直方向のスケールと同等であると仮定して、最初に水平方向のピクセル解像度を調べます。これにより、表示された単位ピクセルを見つけようとしています。

scale = display / measured

      = feature / pixels

      = |(806677m - 876817m)| / 450px // I'm assuming you've made a typo with 8876817

      = 70140 / 450

      = 166.66 metres per pixel (inversely 0.006 pixels per metre)

次に、ピクセルスケールを変換して、ピクセルあたりの画面距離を求めます。

      = real distance / pixel distance

      = 2.54cm (1 inch) / 90 pixels

      = 0.028 ~0.03

すべてをまとめる:

   0.028 cm per pixel = 166.66 metres / x

   x * 0.028 = 166.66

   x = 166.66 / 0.028

   x = 5952.1

したがって、マップの縮尺はおおよそ1:6000です。


あなたの非常に詳細な説明に大いに感謝します。あなたのやり方に従って計算します。ありがとう。
ブレイディ、

問題ない。スケールを繰り返し計算している場合は、方程式を凝縮することができます。単純化のために、レイヤー化しました。
nagytech 2012

はは、はい!実際、スケール値「1:3500」のズームレベルを知りたいのですが。現在の縮尺が「1:3500」より大きい場合にのみ、マップの一部のレイヤーが表示されるためです。ところで、私はGISの新人です。
ブレイディ、

1
(もちろん)正しいピクセル距離を取得することへの強い依存があります。そのため、ノートブックと接続されているプロジェクターで同じ「スケール」になることはありません。
BradHards 2012

4
nagytechの答えには誤りがあります。彼はピクセルあたりのmをピクセルあたりのcmと比較しているからです。最初は0.028cmをメートルに換算する必要があります!したがって、0.00028メートルとx = 166.66 / 0.00028 = 595214のスケールがあります!
マルセル2014年

9

ピーター・ロビンスのウェブサイトには、openlayersを簡単に使用できるようにするための役立つ情報があります。

解像度が表すスケールを見つけるには、ピクセルの大きさを知る必要があります。OLは確かにそれを知りませんが、いくつかの合理的な仮定を行います。Util.jsを見てgetScaleFromResolution()を検索すると、2つの定数INCHES_PER_UNITとDOTS_PER_INCHが使用されており、計算は「解像度* OpenLayers.INCHES_PER_UNIT [units] * OpenLayers.DOTS_PER_INCH」です。度数の場合、これは解像度* 4374754 * 72(314,982,288)であるため、最大スケールは1:442,943,843です。メートル単位での最大スケールは156543.0339 * 39.3701 * 72(2,834.6472)または1:443,744,273です。

だから式:

 map.getResolutions * OpenLayers.INCHES_PER_UNIT[units] * OpenLayers.DOTS_PER_INCH

お役に立てば幸いです...


OpenLayersを2.14は map.getResolutions私のために働くが、ベース層の解像度を取得していなかったでした:map.baseLayer.resolutions。ただし、これにより、ズームレベルよりも多くの値が得られる可能性があることに
注意してください
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.