Как НЕ изменять центр камеры при запуске GeolocateControl?

#mapbox-gl-js

#mapbox-gl-js

Вопрос:

У меня есть карта веб-приложения Mapbox, к которой я хочу добавить местоположение пользователя, но карта НЕ будет автоматически повторно центрироваться на местоположении пользователя. Пример кода здесь https://docs.mapbox.com/mapbox-gl-js/example/locate-user / отлично работает, я просто не хочу, чтобы карта повторно центрировалась на пользователе.

Это именно тот код, который я использую:

 // GEO LOCATE USER! 
const  geolocate  = new   mapboxgl.GeolocateControl({
    positionOptions: {
        enableHighAccuracy: false
    },
    trackUserLocation: false
});
map.addControl(geolocate,"bottom-left");
geolocate.trigger();
 

Есть ли способ сделать geolocate.trigger() пассивным и не повторно центрировать карту, просто добавить к ней местоположение пользователя?

Комментарии:

1. Вы пытались передать fitBoundsOptions параметр? docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol

Ответ №1:

Mapbox-GL не предоставляет официальный API для отключения автоматического отслеживания местоположения пользователя с помощью камеры, но вы можете исправить его, чтобы выполнить то, что вы хотите:

 const locate = new mapboxgl.GeolocateControl({
    positionOptions: { enableHighAccuracy: true },
    trackUserLocation: true
})
// hacky workaround for the fact that mapbox doesn't let you disable camera auto-tracking
locate._updateCamera = () => {}
this.map.addControl(locate)
 

Это работает путем замены внутреннего _updateCamera метода на noop:
https://github.com/mapbox/mapbox-gl-js/blob/2693518e8d042b3120c33f08433abbc3b114d25c/src/ui/control/geolocate_control.js#L187