3

私の Java アプリケーションでは、JmapViewer を使用しています。マップはjpanel上に描画されます。現在のズーム レベルに対応する地図縮尺を取得することは可能ですか? マップは、よく知られたメルカトル図法に基づいています。

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);

ピクセル座標は「メートル単位」で評価されます。式にピクセルサイズがありません...

4

1 に答える 1

3

このJMapViewerメソッドgetMeterPerPixel()は、現在のズーム レベルでのピクセルあたりのメートル数を返します。これは、「余弦の球面法則をTileSource::getDistance使用して距離を取得する」を使用します。では、値がズームに反比例して変化する様子を確認できます。レベル 10 と 98.5 メートル/ピクセルを以下に示します。一般的な実装については、を参照してください。org.openstreetmap.gui.jmapviewer.DemoOsmMercator::getDistance

地図画像

于 2016-09-09T02:44:37.477 に答える