Это, наверное, очень простой вопрос. У меня код работает, но он логически неверен.
Мне нужно найти геолокацию и установить там центр карты. Если я не могу получить доступ к геолокации, я хочу установить центр на New Heaven. Я знаю, что мне следует использовать обратные вызовы, но не знаю, как это сделать.
Прямо сейчас код работает, но работает медленно. Сначала он устанавливает центр на Новое небо, а затем переходит к реальной геолокации. Хочу сразу перейти к настоящему. Как мне этого добиться?
Спасибо.
$(document).ready(function() {
let canvas = $("#map-canvas").get(0);
// Styles for map
// https://developers.google.com/maps/documentation/javascript/styling
let styles = [
// Hide Google's labels
{
featureType: "all",
elementType: "labels",
stylers: [
{visibility: "off"}
]
},
// Hide roads
{
featureType: "road",
elementType: "geometry",
stylers: [
{visibility: "off"}
]
}
];
// Options for map
// https://developers.google.com/maps/documentation/javascript/reference#MapOptions
let options = {
center: {lat: 41.3184, lng: -72.9318},//new heaven
disableDefaultUI: true,
mapTypeId: google.maps.MapTypeId.ROADMAP,
maxZoom: 14,
panControl: true,
styles: styles,
zoom: 13,
zoomControl: true
};
// Instantiate map
map = new google.maps.Map(canvas, options);
//reset center if geolocation is accessible (HERE IS THE PROBLEM)
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
pos = {
lat: position.coords.latitude,
lng: position.coords.longitude
};
map.setCenter(pos);
var marker = new google.maps.Marker({
position: map.getCenter(),
map:map,
label:"Around Me"
});
});
}
});



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы не хотите, чтобы он располагался в центре «New Heaven», не устанавливайте центр, пока обратный вызов геолокации не вернет значение. Недостатком этого является то, что в случае сбоя геолокации (пользователь отрицает это или браузер не поддерживает) карта вообще не отображается.
доказательство концепции скрипки
$(document).ready(function() {
let canvas = $("#map-canvas").get(0);
// Styles for map
// https://developers.google.com/maps/documentation/javascript/styling
let styles = [
// Hide Google's labels
{
featureType: "all",
elementType: "labels",
stylers: [{
visibility: "off"
}]
},
// Hide roads
{
featureType: "road",
elementType: "geometry",
stylers: [{
visibility: "off"
}]
}
];
// Options for map
// https://developers.google.com/maps/documentation/javascript/reference#MapOptions
let options = {
disableDefaultUI: true,
mapTypeId: google.maps.MapTypeId.ROADMAP,
maxZoom: 14,
panControl: true,
styles: styles,
zoom: 13,
zoomControl: true
};
// Instantiate map
map = new google.maps.Map(canvas, options);
//reset center if geolocation is accessible (HERE IS THE PROBLEM)
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
pos = {
lat: position.coords.latitude,
lng: position.coords.longitude
};
map.setCenter(pos);
var marker = new google.maps.Marker({
position: map.getCenter(),
map: map,
label: "Around Me"
});
});
}
});html,
body,
#map-canvas {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src = "https://maps.googleapis.com/maps/api/js"></script>
<div id = "map-canvas"></div>