Как дифференцировать изменения в движении карты пользователем и функцией, используя OpenLayers - PullRequest
0 голосов
/ 06 марта 2020

У меня есть простая функция, где пользователь запускает GPS и отслеживает положение, где вид карты следует за ним. Я хочу отключить функцию слежения, когда пользователь перемещает карту, но при этом оставить функцию отслеживания положения активированной, чтобы пользователь мог перемещать карту и по-прежнему просматривать свою позицию. Я пытался использовать события карты (moveend, movestart, change), но они стреляют независимо от того, как движется карта. Я также пробовал с событием click, но это событие не вызывается при панорамировании карты, а только при быстром щелчке.

Есть ли способ проверить эту разницу?

Пример положения трека OpenLayers для справки


Я нашел несколько связанных вопросов, очень похожих на мою проблему: 1 и 2 .

Цитирую второй вопрос:

map.on('moveend', function(event) {
  var mapView = map.getView(),
      moveInitiatedProgrammatically = mapView.get('moveInitiatedProgrammatically') || false;

  mapView.unset('moveInitiatedProgrammatically');

  // evaluate moveInitiatedProgrammatically's value and behave accordingly...
});

map.getView().set('moveInitiatedProgrammatically', true);
map.getView().setCenter(coord);

Это не идеально по следующим причинам:

  1. Вводит дополнительную информацию о состоянии в представление карты.
  2. Неосторожная замена вида карты приведет к потере этой информации о состоянии.
  3. Требуется установить свойство перед изменением состояния просмотра и может быть слишком легко забыта.

Однако, это адрес моего выпуск пока что.

Ответы [ 2 ]

1 голос
/ 07 марта 2020

Используйте ol-ext ol/control/GeolocationBar. Вы можете начать новый трек. Когда вы перемещаете карту кнопкой center, вы возвращаетесь к дорожке.
См. Пример в Интернете: https://viglino.github.io/ol-ext/examples/mobile/map.control.geolocationbar.html

0 голосов
/ 06 марта 2020

Следуя решению Jonatas Walker в этом ответе , я считаю, что могу отличить одно движение от другого, используя событие pointermove, которое не запускается функцией отслеживания.

map.on('pointermove', evt => {
    if (evt.dragging){
        console.info('dragging');
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...