0

JxMapViewerをswingアプリケーションに統合しようとしています。

マップ上で2つのウェイポイントの間に線を引きました。次に、次のような機能を実装したいと思います。

マップ上のどこにいても、ズームレベルが設定されていても、ボタン(または外部イベント)をクリックするたびに、フォーカスを描画した線に移動する必要があります(つまり、2つのウェイポイントで間接的に)

次に、ズームレベルは、これら2つのウェイポイントを含むマップの部分が表示されるように設定する必要があります。

クラスgetViewportBounds内にメソッドがあることがわかります。JxMApViewer同様に、はありませんsetViewportBounds。その場合、これら2つのウェイポイントを含む長方形を計算して設定することができます。

ヒントをいただければ幸いです


既存のcalculateZoomFromメソッドを次のように変更しました:

int zoom = mainMap.getZoom();
Rectangle2D inner = generateBoundedRectangleForLine(positionSet, mainMap.getZoom());

int count = 0;
Rectangle outer = mainMap.getViewportBounds();
while(!outer.contains(inner) || (outer.contains(inner) && !(inner.getHeight() >= mainMap.getHeight() - 50))) {
    Point2D center = new Point2D.Double(
            inner.getX() + inner.getWidth()/2,
            inner.getY() + inner.getHeight()/2);
    GeoPosition px = mainMap.getTileFactory().pixelToGeo(center,zoom);
    mainMap.setCenterPosition(px);
    count++;
    if(count > 30) break;
    if(outer.contains(inner)) {
        if (!(inner.getHeight() >= mainMap.getHeight() - 50)) {
            zoom = zoom - 1;
            if(zoom < 1) {
                break;
            }
        } else {
            break;
        }

    } else {
        zoom = zoom + 1;
        if(zoom > 15) {
            break;
        }
    }

    mainMap.setZoom(zoom);
    inner = generateBoundedRectangleForLine(positionSet, zoom);
}

しかし、それは機能していません。

4

2 に答える 2

2

解決策を見つけました。解決策は、ズーム レベルを最低レベルに設定してから calculateZoomFrom メソッドを呼び出すことでした。

于 2012-06-13T06:07:57.700 に答える
1

JXMapViewer.setCenterPosition(GeoPosition geoPosition)そのためにあなたはあなたから電話することができますActionListener

適切なズーム レベルを自分で計算する必要があります (私の知る限り、JXMapViewer はそのための機能を提供していません)。ウェイポイントの座標がわかっているので、バウンディング ボックスの計算と適切なズーム レベルの設定は問題になりません。

于 2012-06-09T12:44:29.173 に答える