【发布时间】:2020-08-04 02:36:16
【问题描述】:
我在 react 应用程序中使用 mapbox-gl 来呈现交互式地图。在地图加载时,我想将地图以用户位置为中心,同时保持当前的缩放级别。 geolocate.trigger(); 以用户位置为中心可以正常工作,但地图会自动缩小到大陆级别。这是应用程序地图组件的简化版本。我首先在纽约设置一个硬编码的中心点,它工作正常,然后当 trigger() 运行时,它会被缩小。我试过摆弄 geolocate 对象的所有属性,但它们都对 trigger() 的缩放没有任何影响,而且 trigger 似乎没有任何参数。请注意,出于安全原因,我必须删除我的 mapboxgl.accessToken。
作为旁注,我也试图摆脱较大的蓝色位置置信圈,但尽管设置了 showAccuracyCircle: false,我似乎也无法做到这一点。有什么 mapbox 提示吗?
反应组件:
import React from 'react';
import mapboxgl from 'mapbox-gl';
import './map.css';
mapboxgl.accessToken = 'ACCESS_TOKEN_STRING_GOES_HERE';
export class Map extends React.Component {
constructor(props) {
super(props);
this.state = {
lng: -73.9392,
lat: 40.8053,
zoom: 17.5
};
}
componentDidMount() {
const map = new mapboxgl.Map({
container: this.mapContainer,
style: 'mapbox://styles/mapbox/streets-v11',
center: [this.state.lng, this.state.lat],
zoom: this.state.zoom
});
const geolocate = new mapboxgl.GeolocateControl({
container: this.geolocateContainer,
positionOptions: {enableHighAccuracy: true},
fitBoundsOptions: {linear: true, maxZoom: 10},
trackUserLocation: true,
mapboxgl: mapboxgl,
showAccuracyCircle: false
})
map.on('load', () => {
geolocate.trigger();
});
map.addControl(geolocate);
}
render() {
return (
<div>
<div ref={element => this.geolocateContainer = element} className='mapButtons' />
<div ref={el => this.mapContainer = el} className='mapContainer' />
</div>
)
}
}
这是我放在一起的代码笔,它说明了如果您插入自己的 mapboxgl.accessToken 会出现的问题。如果您仔细观察,当页面加载时,默认视图会以 this.state 中提供的坐标和缩放级别显示。但随后它立即以用户的位置为中心(这是所需的行为)并缩小(我不想缩小)。您需要授予 codepen 页面访问您的位置的权限才能查看此内容。
【问题讨论】:
-
你真的不需要太强调隐藏你的访问令牌。您可以为此目的创建一个新的公共文件,甚至将其锁定到 codepen。在绝对最坏的情况下,有人会使用您一个月的免费使用量。不过,这从未发生在我身上。