6

我想使用 zoomToBoundingBox 方法将地图缩放到特定的边界框。
该方法只在缩放级别 0 上显示地图。

在 mapView.java 源代码中我发现了这个:

/** * 缩放地图以包围指定的边界框,尽可能靠近。* 必须在显示布局完成后调用,否则屏幕尺寸未知,并且 * 将始终缩放到缩放级别 0 的中心。 * 建议:检查 getScreenRect(null).getHeight() > 0 */

我检查了一下getScreenRect(null).getHeight() > 0,它给了我错误的信息。

如何以编程方式完成显示布局?
我该怎么做才能使上述谓词使我正确?

4

1 回答 1

2

我有同样的问题。我通过在 onLayout() 方法结束时调用 zoomToBoundingBox() 来解决它。

我有自己的 MapView 子类,用于将我与地图库选择隔离开来。这个类有一个 clearPoints / addPoint / layoutPoints 风格的界面。在 layoutPoints() 方法中,我从点集合创建逐项叠加层,并创建存储在类的实例方法中的边界框。

public class MyMapView extends MapView {

// The bounding box around all map points
// Used to determine the correct zoom level to show everything
private int minLat = Integer.MAX_VALUE;
private int minLon = Integer.MAX_VALUE;
private int maxLat = Integer.MIN_VALUE;
private int maxLon = Integer.MIN_VALUE;

private BoundingBoxE6 boundingBox;

我的 onLayout() 覆盖有:

/* (non-Javadoc)
 * @see org.osmdroid.views.MapView#onLayout(boolean, int, int, int, int)
 */
@Override
protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {
    super.onLayout(arg0, arg1, arg2, arg3, arg4);

    // Now that we have laid out the map view,
    // zoom to any bounding box
    if (this.boundingBox != null) {
        this.zoomToBoundingBox(this.boundingBox);
    }
}

我不确定这是否是最好的方法,但它似乎对我有用(除了缩放似乎有点太远了,但这是另一个问题)。

于 2013-03-30T21:14:42.903 回答