OSMdroid: zoomToBoundingBox увеличивает неправильную ограничивающую рамку - PullRequest
0 голосов
/ 25 мая 2018

ПРОБЛЕМА:

У меня есть ограничительная рамка {N: 53.2219112;E: -6,1409208;S: 53.1953286;W: -6.1784236}, на котором я хочу сосредоточиться.

Я называю MapView.zoomToBoundingBox на этой ограничительной рамке, и по какой-то причине это увеличивает / центрирует {N: 54.9918;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, который расширяет MapView, чтобы сохранить все функции MapView в одном месте. Не могу представить, что это вызывает проблему, но этоСтоит отметить.

4) Я звоню zoomToBoundingBox в onLayout, как предлагается в этой теме: https://github.com/osmdroid/osmdroid/issues/236

5) Я использую OSMdroid 6.0.1

enter image description here

КОД:

Вызывается в 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());
         }
    }

1 Ответ

0 голосов
/ 27 мая 2018

После нескольких дней дурачиться, я нашел решение.Есть ошибка с zoomToBoundingBox, когда вы устанавливаете animate в TRUE.Я исправил проблему, установив для 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();
         }
    }
...