приносим извинения, если на этот вопрос уже был дан ответ - я искал несколько часов в StackOverflow и в других местах и не могу понять.
Я пытаюсь использовать функцию геолокации Google Maps V3 ( Google Maps Javascript API V3 - определение местоположения пользователя ), и он хотел добавить простой центральный маркер (среди прочего) после центрирования карты.
Если я добавлю следующее наконец функции «initialize», похоже, что он не имеет доступа к переменной «initialLocation»:
var marker = new google.maps.Marker({
position: initialLocation,
map: map
});
Однако, если я предупреждаю initialLocation непосредственно перед этим, он работает.
Вот полный код, почти идентичный примеру Google:
var initialLocation;
var siberia = new google.maps.LatLng(60, 105);
var newyork = new google.maps.LatLng(40.69847032728747, -73.9514422416687);
var browserSupportFlag = new Boolean();
var map;
var infowindow = new google.maps.InfoWindow();
function initialize() {
var myOptions = {
zoom: 6,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
// Try W3C Geolocation method (Preferred)
if(navigator.geolocation) {
browserSupportFlag = true;
navigator.geolocation.getCurrentPosition(function(position) {
initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
contentString = "Location found using W3C standard";
map.setCenter(initialLocation);
infowindow.setContent(contentString);
infowindow.setPosition(initialLocation);
infowindow.open(map);
}, function() {
handleNoGeolocation(browserSupportFlag);
});
} else if (google.gears) {
// Try Google Gears Geolocation
browserSupportFlag = true;
var geo = google.gears.factory.create('beta.geolocation');
geo.getCurrentPosition(function(position) {
initialLocation = new google.maps.LatLng(position.latitude,position.longitude);
contentString = "Location found using Google Gears";
map.setCenter(initialLocation);
infowindow.setContent(contentString);
infowindow.setPosition(initialLocation);
infowindow.open(map);
}, function() {
handleNoGeolocation(browserSupportFlag);
});
} else {
// Browser doesn't support Geolocation
browserSupportFlag = false;
handleNoGeolocation(browserSupportFlag);
}
//alert(initialLocation);
var marker = new google.maps.Marker({
position: initialLocation,
map: map
});
}
function handleNoGeolocation(errorFlag) {
if (errorFlag == true) {
initialLocation = newyork;
contentString = "Error: The Geolocation service failed.";
} else {
initialLocation = siberia;
contentString = "Error: Your browser doesn't support geolocation. Are you in Siberia?";
}
map.setCenter(initialLocation);
infowindow.setContent(contentString);
infowindow.setPosition(initialLocation);
infowindow.open(map);
}
Выше не будет добавлять маркер, но если вы раскомментируете строку «alert (initialLocation);», она будет работать.
Почему это?Я подозреваю, что это вопрос области видимости, но я не уверен.
(Для моего приложения важно, чтобы переменная initialLocation была доступна вне блока "if (navigator.geolocation) {")
Спасибо!