Я испытываю проблему с картами Google api v3. Я пытаюсь масштабировать карту Google, чтобы соответствовать ее маркерам, но, похоже, я не могу получить доступ к некоторым переменным в функции геокодирования.переменный доступ через функцию javascript
function codeAddress(geocoding, address, shop) {
if (address.length > 0) {
geocoding.geocode({'address': address}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location,
icon: createImage("/assets/picto_flag_deepidoo.png"),
title: address
});
//Setting the lng & lat in an attribute field for a further use
shop.setAttribute('lng', marker.getPosition().lng());
shop.setAttribute('lat', marker.getPosition().lat());
}
else {
alert("Geolocalisation error : " + status);
}
});
}
else {
alert("Error : no address");
}
}
console.log(document.querySelector('#shop0').getAttribute('lng')) //null
setTimeout(function(){console.log(document.querySelector('#shop0').getAttribute('lng'))},3000) //null & setTimeout does not work
Проблема в том, что маркер установлен исключительно в геокоде(). Я пробовал обходные пути как доступ к атрибутам «lng» и «lat» с помощью внешней функции, но они не заданы, пока документ не будет полностью загружен. (пробовал с 3000 мс setTimeout, и похоже, что он даже не учитывается)
Как получить доступ к маркеру и его свойствам из геокода и/или как я могу получить лат и lng из полей атрибутов?
EDIT:
Я попробовал несколько способов, и я в настоящее время пытается что-то вроде этого:
function mapBorders(){
var bounds = new google.maps.LatLngBounds();
var countMarkers = "#{@shops.count}";
if (countMarkers > 0) {
for (var i = 0; i < countMarkers; i++) {
var latlng = document.querySelector('#shop' + i).getAttribute('lat')+","+document.querySelector('#shop' + i).getAttribute('lng');
bounds.extend(new google.maps.LatLng (latlng));
}
}
return bounds;
}
map.fitBounds(mapBorders());
Поместите свой код, который нуждается в доступе к маркеру в функции, и вызовите его из обратного вызова геокода, передав объект-маркер. –
Геокодирование является асинхронным. Как вы пытаетесь вычислить границы? Как вы пытаетесь использовать эти границы? – geocodezip
@geocodezip, я ответил на мой вопрос. – TazMayhem