如何在不点击控制按钮的情况下定位用户?(MapBox API,JavaScript)
我试图在网站完全加载时找到用户。 我正在使用最新的MapBox API(JavaScript) 不需要用户点击地图右上角的按钮就可以做到这一点吗如何在不点击控制按钮的情况下定位用户?(MapBox API,JavaScript),javascript,geolocation,gps,mapbox,locate,Javascript,Geolocation,Gps,Mapbox,Locate,我试图在网站完全加载时找到用户。 我正在使用最新的MapBox API(JavaScript) 不需要用户点击地图右上角的按钮就可以做到这一点吗 var map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [0,0], zoom: 15 // starting zoom }); // Add geolocate control
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [0,0],
zoom: 15 // starting zoom
});
// Add geolocate control to the map.
map.addControl(new mapboxgl.GeolocateControl({
positionOptions: {
enableHighAccuracy: true
},
trackUserLocation: true
}));
试试这个
navigator.geolocation.getCurrentPosition(position => {
const userCoordinates = [position.coords.longitude, position.coords.latitude];
map.addSource("user-coordinates", {
type: "geojson",
data: {
type: "Feature",
geometry: {
type: "Point",
coordinates: userCoordinates
}
}
});
map.addLayer({
id: "user-coordinates",
source: "user-coordinates",
type: "circle"
});
map.flyTo({
center: userCoordinates,
zoom: 14
});
});
试试这个
navigator.geolocation.getCurrentPosition(position => {
const userCoordinates = [position.coords.longitude, position.coords.latitude];
map.addSource("user-coordinates", {
type: "geojson",
data: {
type: "Feature",
geometry: {
type: "Point",
coordinates: userCoordinates
}
}
});
map.addLayer({
id: "user-coordinates",
source: "user-coordinates",
type: "circle"
});
map.flyTo({
center: userCoordinates,
zoom: 14
});
});
试试这个例子,对我来说很有用
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<title></title>
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
<script src='https://cdnjs.cloudflare.com/ajax/libs/mapbox-gl/0.53.1/mapbox-gl.js'></script>
<link href='https://cdnjs.cloudflare.com/ajax/libs/mapbox-gl/0.53.1/mapbox-gl.css' rel='stylesheet' />
<style>
body { margin:0; padding:0; }
#map { position:absolute; top:0; bottom:0; width:100%; }
</style>
<script >
var get_location = function() {
var geolocation = null;
var c_pos = null;
if (window.navigator && window.navigator.geolocation) {
geolocation = window.navigator.geolocation;
var positionOptions = {
enableHighAccuracy: true,
timeout: 10 * 1000, // 10 seconds
maximumAge: 30 * 1000 // 30 seconds
};
function success(position) {
console.log(position);
c_pos = position.coords;
mapboxgl.accessToken = 'token'; ///////////////// put your token here
if (!mapboxgl.supported()) {
alert('Your browser does not support Mapbox GL');
} else {
var map = new mapboxgl.Map({
container: 'map', // container id
style: 'mapbox://styles/mapbox/streets-v11',
center: [c_pos.longitude, c_pos.latitude],
zoom: 12 // starting zoom
});
}
}
function error(positionError) {
console.log(positionError.message);
}
if (geolocation) {
geolocation.getCurrentPosition(success, error, positionOptions);
}
} else {
alert("Getting Geolocation is prevented on your browser");
}
return c_pos;
}
</script>
</head>
<body>
<div id='map'></div>
<script>
var current_pos = get_location();
</script>
</body>
</html>
正文{margin:0;padding:0;}
#映射{位置:绝对;顶部:0;底部:0;宽度:100%;}
var get_location=函数(){
var geolocation=null;
var c_pos=null;
if(window.navigator&&window.navigator.geolocation){
地理位置=window.navigator.geology;
变量位置选项={
EnableHighAccurance:正确,
超时:10*1000,//10秒
最大值:30*1000//30秒
};
功能成功(职位){
控制台日志(位置);
c_pos=位置坐标;
mapboxgl.accessToken='token';//将您的令牌放在这里
如果(!mapboxgl.supported()){
警报(“您的浏览器不支持Mapbox GL”);
}否则{
var map=new mapboxgl.map({
容器:'映射',//容器id
风格:'mapbox://styles/mapbox/streets-v11',
中心:[经度,纬度],
缩放:12//开始缩放
});
}
}
功能错误(位置错误){
控制台日志(位置错误消息);
}
if(地理定位){
getCurrentPosition(成功、错误、位置选项);
}
}否则{
警报(“禁止在浏览器上获取地理位置”);
}
返回c_位置;
}
var current_pos=获取位置();
试试这个例子,它对我有用
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<title></title>
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
<script src='https://cdnjs.cloudflare.com/ajax/libs/mapbox-gl/0.53.1/mapbox-gl.js'></script>
<link href='https://cdnjs.cloudflare.com/ajax/libs/mapbox-gl/0.53.1/mapbox-gl.css' rel='stylesheet' />
<style>
body { margin:0; padding:0; }
#map { position:absolute; top:0; bottom:0; width:100%; }
</style>
<script >
var get_location = function() {
var geolocation = null;
var c_pos = null;
if (window.navigator && window.navigator.geolocation) {
geolocation = window.navigator.geolocation;
var positionOptions = {
enableHighAccuracy: true,
timeout: 10 * 1000, // 10 seconds
maximumAge: 30 * 1000 // 30 seconds
};
function success(position) {
console.log(position);
c_pos = position.coords;
mapboxgl.accessToken = 'token'; ///////////////// put your token here
if (!mapboxgl.supported()) {
alert('Your browser does not support Mapbox GL');
} else {
var map = new mapboxgl.Map({
container: 'map', // container id
style: 'mapbox://styles/mapbox/streets-v11',
center: [c_pos.longitude, c_pos.latitude],
zoom: 12 // starting zoom
});
}
}
function error(positionError) {
console.log(positionError.message);
}
if (geolocation) {
geolocation.getCurrentPosition(success, error, positionOptions);
}
} else {
alert("Getting Geolocation is prevented on your browser");
}
return c_pos;
}
</script>
</head>
<body>
<div id='map'></div>
<script>
var current_pos = get_location();
</script>
</body>
</html>
正文{margin:0;padding:0;}
#映射{位置:绝对;顶部:0;底部:0;宽度:100%;}
var get_location=函数(){
var geolocation=null;
var c_pos=null;
if(window.navigator&&window.navigator.geolocation){
地理位置=window.navigator.geology;
变量位置选项={
EnableHighAccurance:正确,
超时:10*1000,//10秒
最大值:30*1000//30秒
};
功能成功(职位){
控制台日志(位置);
c_pos=位置坐标;
mapboxgl.accessToken='token';//将您的令牌放在这里
如果(!mapboxgl.supported()){
警报(“您的浏览器不支持Mapbox GL”);
}否则{
var map=new mapboxgl.map({
容器:'映射',//容器id
风格:'mapbox://styles/mapbox/streets-v11',
中心:[经度,纬度],
缩放:12//开始缩放
});
}
}
功能错误(位置错误){
控制台日志(位置错误消息);
}
if(地理定位){
getCurrentPosition(成功、错误、位置选项);
}
}否则{
警报(“禁止在浏览器上获取地理位置”);
}
返回c_位置;
}
var current_pos=获取位置();
是的,您必须使用触发器()以编程方式激活跟踪
// Initialize the geolocate control.
var geolocate = new mapboxgl.GeolocateControl({
positionOptions: {
enableHighAccuracy: true
},
trackUserLocation: true
});
// Add the control to the map.
map.addControl(geolocate);
map.on('load', function() {
geolocate.trigger(); //<- Automatically activates geolocation
});
//初始化地理定位控件。
var geologite=new mapboxgl.geologicatecontrol({
位置选项:{
EnableHighAccurance:正确
},
trackUserLocation:true
});
//将控件添加到映射中。
地图添加控制(地理定位);
map.on('load',function()){
geologite.trigger();//是的,您必须使用trigger()以编程方式激活跟踪
// Initialize the geolocate control.
var geolocate = new mapboxgl.GeolocateControl({
positionOptions: {
enableHighAccuracy: true
},
trackUserLocation: true
});
// Add the control to the map.
map.addControl(geolocate);
map.on('load', function() {
geolocate.trigger(); //<- Automatically activates geolocation
});
//初始化地理定位控件。
var geologite=new mapboxgl.geologicatecontrol({
位置选项:{
EnableHighAccurance:正确
},
trackUserLocation:true
});
//将控件添加到映射中。
地图添加控制(地理定位);
map.on('load',function()){
geologite.trigger();//我得到:“Uncaught TypeError:无法读取未定义的”try now,I fix it“的属性'addSource.”现在我得到“Uncaught Error:样式未加载完毕”。(通过添加“this.map.on('load',()=>{});”来修复它。是否可以使圆变大并使用另一种颜色?我得到:“Uncaught TypeError:无法读取未定义的”try now,i fix it now i'm getting“Uncaught Error:Style not done loading.”(通过添加“this.map.on('load',()=>{});”来修复它。是否可以将圆变大并使用另一种颜色?