2014-01-15 4 views
0
var address = "Boston"; 
var geocoder = new google.maps.Geocoder(); 
geocoder.geocode({ 'address': address}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     map.setCenter(results[0].geometry.location); 
     map.fitBounds(results[0].geometry.bounds); 
     createLatLng(); 
    } else { 
     alert("Geocode was not successful for the following reason: " + status); 
    } 

}); 

function createLatLng() { 
    var MapCenter=map.getCenter(); 
    var x=MapCenter.lat(), y=MapCenter.lng(), z=0; 
} 

прямо сейчас У меня есть этот код, в основном взятый из этого примера в google: https://developers.google.com/maps/documentation/javascript/geocoding.Как извлечь координаты центра карты из Geocoder?

В настоящее время переменные x и y не определены. Почему это и как я могу правильно получить переменные x и y?

также здесь демо, если это поможет: http://jsbin.com/ilOTIQIn/1/edit

ответ

1

Поскольку geocode асинхронный вы не собираетесь быть в состоянии установить MapCenter на месте вы хотите, потому что не вернулись результаты вызова API в таком случае. Я предлагаю вам использовать callback, чтобы помочь вам управлять вызов:

var MapCenter, map, x, y, z; 

function geocode(callback) { 
    geocoder.geocode({ 'address': address}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     map.setCenter(results[0].geometry.location); 
     map.fitBounds(results[0].geometry.bounds); 
     callback(); 
    } else { 
     alert("Geocode was not successful for the following reason: " + status); 
    } 
    }); 
} 

geocode(function() { 
    MapCenter = map.getCenter(); 
    x = MapCenter.lat(), y = MapCenter.lng(), z = 0; 
}); 
+0

хмм а результаты кода в х и у будучи неопределенным, которые я не понимаю, потому что функция геокодирования называется? но я попытаюсь изучить его дальше. – BigBoy1337

+0

см. Обновленный вопрос. Я понимаю, что он немного отличается от того, как вы это делали, но оба они производят одинаковый неверный вывод. – BigBoy1337

+0

@ BigBoy1337 Проверьте журнал консоли для [this jsfiddle] (http://jsfiddle.net/andyuws/ATppL/5/). Это создает 'x' и' y' правильно, и это реплика кода выше. Единственное изменение заключается в том, что я передал адрес в функцию геокодирования в качестве параметра. – Andy

1

Javascript асинхронный язык. Ваш запрос на геокодирование отправляется, и, пока это происходит, оцениваются ваши x, y и z vars. Результат вашего геокода затем возвращается, но значения x, y и z уже установлены. Я бы определил ваши x, y, z vars над функцией, затем, где вы проверяете, установлен ли статус «ok».

воспринимались порядок событий:

  1. отсылают запрос
  2. запрос возвращает
  3. набор переменных х, уг

фактический порядок событий:

  1. Проводы запрос
  2. Набор переменных х, у, г
  3. результат возвращает
+0

Как проверить статус «ok» (результаты были возвращены). С этим ?: if (status == google.maps.GeocoderStatus.OK) { – BigBoy1337

+0

Закрыть, я бы использовал if (status === google.maps.GeocoderStatus.OK) { // dostuff } Таким образом, вы делаете глубокое сравнение строк: – FuriousFolder

Смежные вопросы