HereMaps JS getZoom () возвращает 0 после пинча для масштабирования

1

Мы разрабатываем приложение для Android (ориентированное на API 19 и выше) с использованием С# и инфраструктуры Xamarin. Центральным компонентом является карта, которая живет внутри WebViewClient - эта карта - это карты, которые отображаются с помощью API-интерфейсов здесь Maps JS v3 (а не Android Maps SDK для Android).

Проблема: map.getZoom() возвращает 0 после того, как пользователь выполнил операцию " щепотку"

В качестве теста мы проверили следующие события: "mapviewchangestart", "mapviewchange", "mapviewchangeend", "sync", а затем в обработчике с именем map.getZoom() - за исключением "sync", где мы ссылались на e.newValue. увеличить. Также приложение может вызвать map.getZoom() напрямую без какого-либо связанного события карты. В каждом случае, однако, после действия pinch-to-zoom, getZoom() возвращает 0.

Думая, что это может быть проблемой асинхронного действия, мы ожидали несколько секунд (apx 30) для завершения всех событий/обработчиков до вызова map.getZoom() - он вернул 0.

Однако при нажатии на карту на карте (например, + -) для масштабирования или установки уровня масштабирования программным способом функция getZoom(), как и ожидалось, возвращает правильный уровень масштабирования. Возможная подсказка: при достижении максимального зума и максимального уровня масштабирования (т.е. 20) map.getZoom() корректно отражает 20.

Кто-нибудь испытал что-то подобное? Любые мысли или идеи (пусть и незначительные) были бы оценены - спасибо.

  • 0
    Это не обычная установка. Мы можем попытаться проанализировать это немного дальше со стороны JS API: • map.getZoom () возвращает 0, означает ли это, что карта переходит на неправильный уровень масштабирования? • Используете ли вы модуль mapevents для взаимодействия с картой, или это что-то разработанное заказчиком? • Какую версию API вы используете именно? • Если вы используете модуль «mapevents» из библиотек, дает ли приведенный ниже код правильный результат? map.addEventListener ('mapviewchangeend', () => {// печатает правильный уровень масштабирования? console.log (map.getZoom ());}); var vm = map.getViewModel (); vm.startControl (ноль, 100, 100); //
Теги:
xamarin
here-api
pinchzoom

1 ответ

1
Лучший ответ

После работы с нашим партнером по составлению карт и пересмотра кода примера, который они предоставили, мы смогли убедиться, что проблема была вызвана неправильным допущением с нашей стороны:

getZoom() не возвращает целое число, а скорее float

В нашей оболочке С# мы неправильно предположили, что она вернула целое число и поэтому всякий раз, когда значение не было неявно конвертируется в целое число (например, когда оно не было 3.0, 4.0, 5.0 и т.д.) И вместо этого было десятичной частью (например, 3.462), это было преобразован в ноль (0) на С#.

Интересно отметить, что всякий раз, когда используются кнопки управления масштабированием карты (+ -), значение всегда увеличивается/уменьшается до следующего целого целого числа (например, 3,462 будет 3,0 или 4,0), но когда прижимается к зуму происходит событие, значения обычно содержат десятичную часть.

Мы также предположили, что существует 21 уровень масштабирования (от 0 до 20), но это также представляется неправильным предположением - если кто-нибудь знает какую-либо документацию, которая будет посвящена этому, это было бы полезно.

В любом случае, я думаю, это, по сути, случай, когда нужно более внимательно относиться к RTFM и переоценивать предположения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню