Вызовите метод Google Geocoding API синхронно - PullRequest
2 голосов
/ 01 февраля 2011

Мне нужно знать адрес маркера при смене позиции маркера.

В основном у меня есть метод:

function addNewMarker(latLng) {
    geocoder.geocode({'latLng': latLng}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            if (results[0]) {
                var address = results[0].formatted_address;
                var marker = new google.maps.Marker({
                    position: latLng, 
                    map: map, 
                    draggable: true,
                    title: address,
                }); 


                google.maps.event.addListener(marker, 'dragend', function() {
                    //marker.setTitle(getGeocodeResults(marker.getPosition()));
                    marker.setTitle(***THIS IS NEW ADDRESS OF THIS MARKER***);
                });
            }
        } else {
            alert("Geocoder failed due to: " + status);
        }
    });
}

Если я извлекаю код геокодированияв новый метод:

function addNewMarker(latLng){
    var address = getGeocodeResults(latLng);
    var marker = new google.maps.Marker({
        position: latLng, 
        map: map, 
        draggable: true,
        title: address,
    }); 


    google.maps.event.addListener(marker, 'dragend', function() {
        marker.setTitle(getGeocodeResults(marker.getPosition()));
    });
}

function getGeocodeResults(latLng){
    geocoder.geocode({'latLng': latLng}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            if (results[0]) {
                var address = results[0].formatted_address;
                return address;
            }
        } else {
            alert("Geocoder failed due to: " + status);
        }
    });
}

Мне не повезло, потому что этот вызов асинхронный.И мне нужны эти новые адреса, когда я перестану двигать маркер. Есть ли решение для этого?

1 Ответ

2 голосов
/ 06 июня 2011

ОТВЕТ на оригинальный постер

[@ vale4674 поместите это как изменение к их вопросу. Копирую здесь как ответ.]

@ vale4674 заменено

marker.setTitle(getGeocodeResults(marker.getPosition()));

с

setTitle(marker);

и добавил этот метод:

function setTitle(marker){
    geocoder.geocode({'latLng': marker.getPosition()}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            if (results[0]) {
                var address = results[0].formatted_address;
                marker.setTitle(address);
            }
        } else {
            alert("Geocoder failed due to: " + status);
        }
    });
}
...