Google maps v3 геокод - PullRequest
       13

Google maps v3 геокод

2 голосов
/ 16 июня 2011

Я пытаюсь геокодировать название места, однако, когда я запускаю функцию, я получаю,

"пустая строка" в моей консоли,

ниже мой код, почему это происходит?

function getLatLong(address) 
{
    var geocoder = new google.maps.Geocoder();
    var result = "";
    geocoder.geocode( { 'address': address, 'region': 'uk' }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            result = results[0].geometry.location;
        } else {
            result = "Unable to find address: " + status;
        }
    });
    console.log(result);
}

UPDATE

Хорошо, я получил свое значение на консоли, теперь, когда я пытаюсь вставить значение элемента в функцию, я получаю неопределенное возвращаемое значение, ниже приведен полный код,

function getLatLong(address) 
{
    var geocoder = new google.maps.Geocoder();
    var result = "";
    geocoder.geocode( { 'address': address, 'region': 'uk' }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            result = results[0].geometry.location;
            return result;
        } else {
            result = "Unable to find address: " + status;
            alert(result);
        }
    });
}

//getLatLong("YORK"); 

function loadScript(postcode){
    alert(postcode);
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=initialize?"+postcode;
    document.body.appendChild(script);
   }

   /* load map on visitors location */
   function initialize(postcode){
     var myLatlng = new google.maps.LatLng(getLatLong(postcode));
     var myOptions = {
      center: myLatlng,
      zoom:13,
      disableDefaultUI: true,
      mapTypeId: google.maps.MapTypeId.ROADMAP
     }

     var map = new google.maps.Map(document.getElementById('map'), myOptions);
     google.maps.event.trigger(map, 'resize');
     map.setZoom(map.getZoom());
     var marker = new google.maps.Marker({
      position: myLatlng, 
      map: map,
      icon:'http://google-maps-icons.googlecode.com/files/home.png',
     });
    }

И это называется так,

 $(function(){
    $("dd a, dt a").live("click", function(){
        var self = $(this);
        $("#overlay").fadeIn('slow');
        var targetProcent = 85;
        var targetWidth = $(window).width() * (targetProcent / 100);
        var targetHeight = $(window).height() * (targetProcent / 100);   
        var targetX = ($(window).width() - targetWidth) / 2;
        var targetY = ($(window).height() - targetHeight) / 2 + $(document).scrollTop();
        $('#lightbox').height(700);
        $('#lightbox').width(targetWidth);
        $('#lightbox').load(self.attr("href"));
        loadScript($("#postcode").val());
        //usePointFromPostcode(document.getElementById('postcode').value, placeMarkerAtPoint)
        $('#lightbox').css({
            "position": "absolute", 
            "top": targetY+"px", 
            "left": targetX+"px"
        }).fadeIn('slow');
        return false;
    });
    });

$ ("# postcode"). Val () относится к элементу, который загружается при использовании load ()

1 Ответ

4 голосов
/ 16 июня 2011

вы делаете асинхронный вызов, а затем печатаете на консоль.вызов еще не возвращен

решение:

переместить console.log в обратный вызов

edit: обратный вызов - это анонимная функция, которую вы передаетев качестве аргумента для геокодирования, его подпись function(results, status), вы должны поставить console.log вызов в КОНЦЕ этой функции

РЕДАКТИРОВАТЬ для редактирования:

вашURL-адрес скрипта выглядит неправильно:

"http://maps.google.com/maps/api/js?sensor=false&callback=initialize?"+postcode

Я почти уверен, что взлом? Почтовый индекс ничего не делает.Во всяком случае, URL должен содержать только один?до начала запроса params.Кажется, вы хотите передать почтовый индекс в функцию initialize, самый простой способ сделать это - через глобальную переменную.

установить глобальную переменную в функции loadScript и прочитать ее вinitialize функция

...