mapbox-gl-js - 如何在 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 没有公开官方 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
推荐阅读
- java - Firebase 实时数据库的隐形后台服务
- javascript - 网络请求在反应本机获取中失败
- stm32 - QSPI 协议中 DDR 与 SDR 相比有何优势?
- awk - 将一个数字与一列文本文件相乘
- sql - 在 BigQuery 中每天计算帐户余额
- android - 无法在单个 appium xml 文件中运行多个类
- javascript - Firestore:通过复杂的fieldPath(where函数)获取多个文档
- c# - 如何避免从 LINQ to Entities 中的多个线程从 SQL 数据库中读取相同的记录
- database - 用 TCL 合并内存数据库上的几个 SQLite 数据库
- android - 如何在数字上打开输入类型文本