Проблема Google Maps с геокодером

Дело в том, чтобы указать маркеры из файла JSON, но если текущий json не имеет lat и lng, он должен его вычислить, но это не работает.

//For example when
item.county = 'Orust'
//and 
item.region = 'Bohuslän'

Это почему?

if(lat == null)
            {
                geocoder.geocode({ 'address': item.county+', '+item.region}, function(result, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    if(result[0])
                    {
                        latlng = result[0].geometry.location
                    }
                }
                });

Я что-то пропустил?


person Max Allan    schedule 22.07.2011    source источник


Ответы (2)


Сначала проверьте, работают ли вещи внутри обратного вызова должным образом. Для этого измените это:

latlng = result[0].geometry.location;

К этому:

console.log(result[0].geometry.location);

(Вы также можете просто добавить console.log над назначением latlng, а не изменять его. На самом деле, это, вероятно, лучше.)

Если результирующее сообщение в вашей консоли JavaScript выглядит как объект latlng, то проблема, скорее всего, связана с проблемой области действия — другими словами, latlng вне обратного вызова не совпадает с latlng внутри обратного вызова.

Если результирующее сообщение в вашей консоли JavaScript не выглядит как объект latlng, то проблема внутри самого обратного вызова. Проверьте, получаете ли вы вообще какие-либо результаты, поместив это туда, где вы поставили последний console.log() выше:

console.log(result);

Если эти console.log команды никогда не срабатывают и ничего не появляется в вашей консоли JavaScript, тогда статус, возвращаемый из geocoder.geocoder(), не является OK, и вам нужно добавить некоторую обработку ошибок в обратный вызов, чтобы увидеть, что происходит.

person Trott    schedule 22.07.2011

Запрос к геокодеру выполняется асинхронно. Вы не можете получить доступ к переменной, которая назначается внутри обратного вызова из внешнего кода. На самом деле вы могли бы, но это будет неопределенно.

person Ruslan Polutsygan    schedule 23.07.2011