Google Maps Проблемы с JavaScript

Во-первых, заранее спасибо за то, что нашли время, чтобы помочь мне с этим, я ценю ваши усилия.

У меня проблема с google maps api, JavaScript версии 3.

Я написал следующий код

    $('.adr').ready(function(){    

    initialize();

})

function initialize() {

    var myLatlng = codeAddress();

    var myOptions = {
      zoom: 14,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.SATELLITE
    };

    var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);

  }

function codeAddress() 
{
    var geocoder = new google.maps.Geocoder();

    var address;
    var street = cropAdr($(".street-address").text());
    var city = cropAdr($(".locality").text());
    var state = cropAdr($(".region").text());
    var zip = cropAdr($(".zip").text()); 

    address = street + ", " + city + ", " + state + ", " + zip;    

    geocoder.geocode( {'address': address}, function(results, status) 
    {

      if (status == google.maps.GeocoderStatus.OK) 
      {
        var latlng = results[0].geometry.location;
        return latlng;
      }  
      else 
      {
        alert("Geocode was not successful for the following reason: " + status);        
        return null;
      }

    });
}



function cropAdr(args)
{
  var index = args.indexOf(":");
  var value = args.substr(index+1);

  return value;
}

Но это не работает.

Я проверил значение возврата «results[0].geometry.location» и оно идеально, поэтому манипуляция адресами работает. «results[0].geometry.location» — это объект google.maps.Latlng, но я попытался выделить только координаты в виде строк, а затем создать новый объект google.maps.Latlng, но без кубиков.

но если я вручную скопирую эту строку и вставлю значение в "var myLatlng = new google.maps.Latlng(Вставьте сюда скопированную строку!)", все заработает!!

Я не вижу, что еще не так с этим сценарием (извиняюсь за беспорядок Jquery и Javascriptpt).


person Paul Chambers    schedule 14.08.2011    source источник


Ответы (1)


Геокодер Google Maps API принимает функцию, которая будет запущена, когда адрес будет геокодирован, но эта функция может быть вызвана асинхронно, то есть после того, как остальная часть вашего кода уже завершена.

В codeAddress вы вызываете геокодер и передаете функцию с помощью этой строки:

geocoder.geocode( {'address': address}, function(results, status)

Затем вы пытаетесь вернуть latLng из функции, переданной геокодеру, но это не то же самое, что вернуть значение из codeAddress. Значение, которое вы возвращаете из этой функции, будет передано объекту геокодера, который просто проигнорирует его.

Вам нужно, чтобы функция, которую вы передаете геокодированию, что-то делала с параметром latLng. Например, заменить:

return latLng;

с участием:

map.setCenter(latLng);

И карта должна центрироваться на геокодированном адресе, как только результат будет доступен.

(Для этого вам нужно будет сделать объект карты глобальным или иным образом сделать его доступным для codeAddress. Я предлагаю добавить «var map;» вверху вашего кода и удалить «var» перед использованием карты в инициализировать)

person plexer    schedule 14.08.2011
comment
Я попробовал то, что вы предложили, поставить карту Var; в верхней части экрана Remove, Var из карты переменных в Initialise() измените return latlng на map.setCenter(latlng); Изменен исходный Center: myLatlng как на предопределенный объект Latlng (0,0), так и на ноль. а также называется codeAddress(); после того, как карта была инициализирована, а также пробовали раньше. но ничего не работает... - person Paul Chambers; 14.08.2011
comment
Я решил это! вы были правы, но когда я инициировал начало центра карты, он поместил Latlng вместо LatLng, что привело к ошибке JS... Спасибо за вашу помощь. - person Paul Chambers; 14.08.2011