2016-11-29 4 views
1

Я работаю с Mapbox GL JS как нетипизированный необходимый модуль внутри одного компонента более крупного веб-приложения, используя Angular2 с помощью TypeScript. Все нормально на базовом уровне (карты загружаются, отображается правильно, реагирует на действия от плагинов, таких как геокодер и запросы от других компонентов).Сделать mapbox-gl отзывчивым на карту evented on 'pitch'

Но мне нужно реализовать пользовательские кнопки управления (они должны быть вне контейнера карты, из-за природы приложения, поэтому я не могу сгладить те, которые доступны внутри mapbox). Для этого мне нужно работать с собственными событиями Mapbox, указанными в: MB Events API (я не нашел никакого API, связанного с созданием настраиваемых элементов управления, есть некоторые более старые обсуждения, которые Mapbox Draw фактически реализовали как пользовательский элемент управления, но я не могу для сбора Mapbox Draw, чтобы узнать, как реализовать пользовательские элементы управления, и я думаю, что это другой вид контроля, когда дело доходит до Draw -> т.е. не для пользователей).

Большинство основных событий Mapbox работают для меня, но один важный (шаг) не отвечает.

Я определяю и загрузить карту в OnInit так:

ngOnInit() { 
 
    mapboxgl.accessToken = 'someToken'; 
 

 
    this.map = new mapboxgl.Map({ 
 
     container: 'someContainer', 
 
     style: 'someStyle', 
 
     center: [10, 10], 
 
     zoom: 14, 
 
     pitch: 0, 
 
     bearing: 0, 
 
    }); 
 

 
    this.map.on('load', function() { 
 
     //[1] first I am adding layers 
 
     //[2] then I work with markers and geocoder 
 
    }); 
 

 
    this.map.on(event, function(){ 
 
     // do whatever is needed on the event 
 
     // zoom, move, rotate ... 
 
     // all events apart 'pitch' seems to response 
 
    }); 
 
}

Я не думаю, что проблема заключается в том, как я реализовал MapBox GL JS, хотя я мог бы разделить мой код по частям и только инициализировать карту OnInit, оставляя другие действия для других декораторов или компонентов (потенциально используйте пользовательские типы и импортируйте Mapbox GL JS из npm). Я думаю, что проблема может заключаться в том, что «шаг» не является признанным событием.

Я нашел этот закрытый вопрос GitHub, который точно описывает, с чем я столкнулся: GH Mapbox #3391, но я не могу найти никакого разрешения. Другие связанные с этим проблемы GitHub, похоже, не позволяют решить эту проблему, и я не нашел другого значимого источника информации о том, как получить доступ к событию «pitch» (я попытался подтвердить это, пройдя код распространения Mapbox GL JS, но я не в состоянии сказать это точно). Я даже не уверен, что «pitch» - это правильный ярлык для события, которое я ищу (мне нужно прислушиваться к изменениям угла обзора).

Интересно, есть ли способ доступа к событиям Mapbox GL JS, связанным с шагом (угол обзора планировщика карты)?

Любая идея наиболее ценится. Спасибо.

+0

P.S .: Я использую версию mapbox-gl-js: 0.28.0 ... – KrNo

ответ

1

Благодаря Коллин Макджиннис @mapboxHelp, этот вопрос подтверждается ошибка:

«Эта ошибка не была адресована в v0.28.0 я бы рекомендовал продолжать отслеживать прогресс в этом вопросе в этом билете Когда он.. фиксированный, вы должны иметь возможность прослушивать изменения в шаге, используя: map.on('pitch', function(){ // specify what you want to do here }); " ... Колин написал.

Thank you Colleen.

Тем не менее, я нашел какой-то грязный трюк, чтобы обойти это, пока ошибка не будет решена. Событие «Pitch» может быть запущено и прослушиваться с помощью собственных элементов управления Mapbox -> [1] Включать элементы управления картой, как обычно. [2] Событие запускается путем отправки mousedown на элементе компаса в элементах управления. [3] Размер основного тона зависит от клиентаY до тех пор, пока событие mouseup не произойдет на документе

Фактически значение шага = document clientX - (высота клиента компаса + верхний ограничивающий прямоугольник компаса).

Элемент компаса может быть скрыт с помощью css для этой цели, он просто должен существовать в DOM в контексте карты, поэтому вы можете запускать и прослушивать «шаг» без видимости и взаимодействия с самой кнопкой компаса вообще ,

Это работает в Mapbox GL JS v0.26.0 - v0.28.0, но на самом деле не рекомендуется использовать его в производстве. Я просто использовал его для имитации действий пользователя в макете.

 Смежные вопросы

  • Нет связанных вопросов^_^