摇摆JXMapViewer的:焦点对象上,并设置相应的缩放级别(Swing JxMapViewer:

2019-07-29 19:27发布

我试图使用JXMapViewer融入我的Swing应用程序。

我画双向点之间的地图上线。 现在我想实现像一个功能:

不管我在哪里的地图,无论缩放级别设置,每当我点击一个按钮(或某个外部事件)上,重点应转移到我行已制定(即间接地对两个航点)

其次,缩放级别应设置含有这两种路点的映射的,使得部分应该是可见的。

我看到我们有getViewportBounds内部方法JxMApViewer类。 同样,我们没有setViewportBounds 。 在这种情况下,我们可以计算出它涵盖这两个航点,并设置一个矩形。

任何暗示将不胜感激


我已经修改现有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);
}

但它不工作。

Answer 1:

您可以拨打JXMapViewer.setCenterPosition(GeoPosition geoPosition)从你ActionListener了点。

你将不得不自己计算适当的缩放级别(JXMapViewer的不提供任何事,据我所知)。 既然你知道航点的坐标,计算边界框并设置适当的缩放水平不应该是一个问题。



Answer 2:

我找到了解决办法。 解决办法是设置缩放级别最低的一个,然后调用calculateZoomFrom方法。



文章来源: Swing JxMapViewer: focus on a object and set corresponding zoom level