OSMdroid:zoomToBoundingBox 缩放到错误的边界框

OSMdroid: zoomToBoundingBox zooms to wrong bounding box

问题:

我有一个边界框{N:53.2219112; E:-6.1409208; S:53.1953286; W:-6.1784236} 我想关注一下。

我在那个边界框上调用 MapView.zoomToBoundingBox,出于某种原因它在 {N:54.9918; 上调用 zooms/centers; E:-8.3993; S:54.9651; W:-8.4716}(粗略地说,我是根据 OpenStreetMap.org 上的查看和显示区域估算的)。

奇怪的是,当我调用 MapView.getBoundingBox 时,我得到 {N:78.34941069014627; E:28.125; S:7.01366792756663; W:-50.625},这跟什么都没有关系。

考虑:

1)我的 MapView 只占据了屏幕的一部分 - 只是顶部,如下所示,所以可能没有正确计算正确的视图尺寸?

2)当我手动缩放并以 boundingBox.getCenterWithDateLine() 为中心时,视图以边界框的中心为中心 - 因此输入的边界框是正确的。

3) 我正在使用我自己的 'ExtendedMapView' class 扩展 MapView,作为将所有 MapView 功能保存在一个地方的方法,我无法想象这是导致问题的原因,但这是值得的注意。

4) 我按照此线程中的建议在 onLayout 中调用 zoomToBoundingBox:https://github.com/osmdroid/osmdroid/issues/236

5) 我正在使用 OSMdroid 6.0.1

代码:

在 ExtendedMapView 中调用:

 @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);

         if(boundingBox != null){
             zoomToBoundingBox(boundingBox, true);
             //output: N:53.2219112; E:-6.1409208; S:53.1953286; W:-6.1784236
             Log.d(Constants.SkiCompanionDebug, "Required BB: "+boundingBox.toString());

             //output: N:78.34941069014627; E:28.125; S:7.01366792756663; W:-50.625
             Log.d(Constants.SkiCompanionDebug, "Actual BB: "+getBoundingBox().toString());
         }
    }

折腾了几天,我找到了解决办法。当您将 animate 设置为 TRUE 时,zoomToBoundingBox 存在错误。我通过将 animate 设置为 FALSE 并随后调用 invalidate() 解决了这个问题。

@Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);

         if(boundingBox != null){
             zoomToBoundingBox(boundingBox, false);
             invalidate();
         }
    }