Google Maps JavaScript проблемы - PullRequest
       0

Google Maps JavaScript проблемы

0 голосов
/ 14 августа 2011

Прежде всего, спасибо заранее, что нашли время помочь мне с этим, я ценю ваши усилия.

У меня проблема с API-интерфейсом Google Maps, 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 и Javascritpt).

1 Ответ

1 голос
/ 14 августа 2011

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

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

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

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

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

return latLng;

на:

map.setCenter(latLng);

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...