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

时间:2018-05-25 18:27:24

标签: java android zoom osmdroid bounding-box

问题:

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

我在该边界框上调用SELECT sum(name is not null) as cnt FROM profile; ,由于某种原因,它是缩放/居中{N:54.9918; E:-8.3993; S:54.9651; W:-8.4716}(粗略地说,我从OpenStreetMap.org的观察和显示区域估计了这个)。

奇怪的是,当我打电话给MapView.zoomToBoundingBox时,我得到{N:78.34941069014627; E:28.125; S:7.01366792756663; W:-50.625},这与任何事都无关。

考虑:

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

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

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

4)我在onLayout中调用zoomToBoundingBox,如此线程所示:https://github.com/osmdroid/osmdroid/issues/236

5)我正在使用OSMdroid 6.0.1

enter image description here

CODE:

在ExtendedMapView中调用:

boundingBox.getCenterWithDateLine()

1 个答案:

答案 0 :(得分:0)

经过几天的愚弄,我找到了解决方案。将动画设置为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();
         }
    }