2012-02-13 31 views
0

マップ座標(EPSG:900913)のバウンディングボックスと画像の幅/高さを計算する必要があります。バウンディングボックスと画像の幅と高さのスケールを計算する

これは非常に基本的なWMSサーバーを実装していますが、特定の瞬間にはイメージの規模を知る必要があります。

単純な要求は次のようになります。これを計算する

var optionsGmap = { 
projection: new OpenLayers.Projection("EPSG:900913"), 
units: "m", 
sphericalMercator: true, 
numZoomLevels: 16, 
maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34), 
scales : [110936068.185464,55468034.0927321,27734017.0463661,13867008.523183,6933504.26159152, 
    3466752.13079576,1733376.06539788,866688.03269894,433344.01634947,216672.008174735,108336.004087367,54168.0020436837,27084.0010218419, 
    13542.0005109209,6771.00025546046,3385.50012773023], 
maxResolution: "auto" }; 

theresの式:

wms.exe?LAYERS=all&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fjpeg&SRS=EPSG%3A900913&BBOX=-7810029.800979,-2298920.0623849,-7809724.0528659,-2298614.3142718&WIDTH=256&HEIGHT=256 

その要求は、このパラメータを使用して構成されたウェブページにopenlayer成分に由来しますか?バックエンドではpostgres + posgisにアクセスできますが、私はCコードで自分自身で計算を行う方が好きです。

+0

これはプログラミングよりも数学的な問題ですか? – Clifford

答えて

1

次のように直交する地理的エリアの各辺の長さがある:それはCの中でどのような三角関数であるので南東、西、北は、ラジアン長い/緯度の角度であること

lengthEastWestNorth = (east - west) * ((equatorial_circumference * cos(north))/(2*pi)) ; 
lengthEastWestSouth = (east - west) * ((equatorial_circumference* cos(south))/(2*pi)) ; 
lengthNorthSouth = (north - south) * (polar_circumference/(2*pi)) ; 

注必要とする。度からラジアンへの変換は単純にr = pi/180.0です。結果の単位は、円周に使用する単位です。南北の長さは等しく、東西寸法は緯度および南北の長さによって異なり、したがって2つまたは4つの3つの値ではない。

スケールを計算するには、おそらくこれらの値のうちの1つだけが必要です。私はの値を提案します。これは三角関数を必要としないため、ラジアンに変換しません(この場合は2 * piではなく360で割る)。

画像の対応する辺の長さで割った片側の長さが尺度を生成します。

地理的な計算は必然的に近似しており、地図投影にはさまざまな円周値が使用される可能性があります。は、に最も近いスケールを決定する必要があります。最小のアブソリュート(符号を削除)の最小値を持つスケールを決定するために、それぞれの好ましいスケールから計算されたスケールを順に引きます。

+0

ありがとう、それは数学的な質問のようなものです、それのためのサイトのようなstackoverflow theres? (この後にグーグル)、この式を試してみると、それは私に3385.50012773023のスケールを与える必要がある、小規模のための要求であるので、 "スケール"の属性にある同じ値を私に与えるべきです。 – alter

+0

@alter:確かに、結果の精度について警告することで注意してください。さらに、たとえ近似でなくても、ある計算/変換された浮動小数点値を等価と別の計算値と比較することは、数学的に同じであっても成功する可能性は低い。私はあなたが数パーセント以内になることは幸運だと思う。 – Clifford

+0

数学に関しては、地図がおそらく地理的なlong/latと直交しているので、むしろ単純です。あなたが必要とするN-S距離は、360度で約407.763キロメートル(WGS84参照)の極限円周のほんの一部です。東西距離はより複雑ですが、高校三角法以上のものではありません。余弦は特定の緯度円上の円周を計算します。距離はそれに比例します。 – Clifford

関連する問題