首页 > 解决方案 > 如何在 GeolocateControl 触发时不更改相机中心?

问题描述

我有一个 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() 成为一种被动体验而不是重新定位地图,只需将用户的位置添加到其中?

标签: mapbox-gl-js

解决方案


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)

这通过用_updateCameranoop 替换内部方法来工作: - https://github.com/mapbox/mapbox-gl-js/blob/2693518e8d042b3120c33f08433abbc3b114d25c/src/ui/control/geolocate_control.js#L187


推荐阅读