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();
}
}
问题:
我有一个边界框{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();
}
}