Следующий код работает асинхронно. У меня только есть настроенный для преобразования Города, состояния в широту и долготу. То значение затем предупреждено.
Как я могу записать функцию, которая на самом деле возвращает эти значения?
var map;
var geocoder;
function initialize() {
geocoder = new GClientGeocoder();
}
// addAddressToMap() is called when the geocoder returns an
// answer. It adds a marker to the map with an open info window
// showing the nicely formatted version of the address and the country code.
function addAddressToMap(response) {
//map.clearOverlays();
if (!response || response.Status.code != 200) {
alert("Sorry, we were unable to geocode that address");
} else {
place = response.Placemark[0];
latitude = place.Point.coordinates[0];
longitude = place.Point.coordinates[1];
alert("Latitude " + latitude + " Longitude" + longitude);
}
}
function showLocation(address) {
geocoder.getLocations(address, addAddressToMap);
}
Возврат этих значений из обратного вызова ничего не даст. Если вы хотите где-то хранить эти значения, просто сделайте это в обратном вызове. Вы могли бы сделать это в вашем текущем коде, если бы просто объявили широту и долготу в верхней части, где объявлены вары карты и геокодера.
Нет, насколько мне известно, API Google Maps не поддерживает синхронные запросы геокодирования. Однако как правило, вы не должны использовать синхронные запросы. Это связано с тем, что пользовательский интерфейс браузера будет блокироваться до тех пор, пока он не получит ответ, и это сделает ужасный пользовательский опыт.