2016-09-08 5 views
3

私のJavaアプリケーションではJmapViewerを使用しています。マップはjPanelに描画されます。現在のズームレベルに対応するマップスケールを取得できますか?マップは、周知のメルカトル図法に基づいている:JMapViewer、OSMマップスケール、Javaを取得

X = R * lon * cos(lat1); 
Y = R * log(tan(lat/2 + 45)), lat1 = 0; 

投影共形であるため、ローカルリニアスケールは、方向とは無関係です。私のアイデアは、同じ平行を共有する2つの点を使用しています:

Point p1 = new Point(0,0); 
Point p2 = new Point(100,0); 

final double dlon = getPosition(p2).getLon() - getPosition(p1).getLon(); 
final double scale = 6380000 * abs(dlon) * PI/180/100; //scale = (R * dlon)/||p1-p2|| 

改善点:初期点p1はビューの中心になることがあります。

Point p1 = new Point(jPanel1.width()/2,jPanel1.height()/2); 
Point p2 = new Point(jPanel1.width()/2 + 100, jPanel1.height()/2); 

ピクセル座標は「メートル」で評価されます。式は、画素サイズ...

+0

あなたはロン/緯度座標とメルカトル図法を持っていて、幅DXと高さDYのピクセルボックスへの射影を計算するJava、JMapViewer、のJPanelなどの独立したアルゴリズムの質問として、それを再投稿。質問にズームのアスペクトを追加します。ズームの中心点と倍率があります。残りは無関係です。現在のフォームでは、賢明な答えを得ることはほとんどありません。 –

答えて

3

現在のズームレベルでのピクセルあたりのメートル数を返すgetMeterPerPixel()JMapViewer方法を欠いています。 「spherical law of cosinesを使用して距離を取得します」というTileSource::getDistanceが使用されます。 org.openstreetmap.gui.jmapviewer.Demoでは、値がズームと逆にどのように変化するかを見ることができます。レベル10と98.5メートル/ピクセルは以下の通りです。典型的な実装については、OsmMercator::getDistanceを参照してください。

map image

+1

@ trashgod:有益な答えをありがとうございます... – justik

関連する問題