2009-04-27 4 views
2

Впервые я играю с Google Maps. И я изо всех сил пытаюсь представить некоторую информацию о местонахождении маркера.Проблема с геокодированием Google Maps

Я создал для вас пример. Проблема возникает, когда я перетаскиваю A-узел, getGeocode() возвращает undefined?

Мне нужно извлечь zip-код, город и адрес из узла, когда я перетаскиваю его.

Пожалуйста, см http://dev.korebogen.dk/gmap/

Спасибо заранее!

Update

Я отредактировал мой код из ответов - и теперь я получаю оба адреса из (все еще нужно, чтобы лишить его таким образом я получаю информацию в раздельных переменных), но по какой-то причине мой выход направление оказывается для «0» и «1» (массив) мне действительно нужно отменить геокод, который тоже?

И возможно ли сделать событие кликов на карте, чтобы добавить маркеры A и B (если при загрузке нет указаний?) http://dev.korebogen.dk/gmap/ обновлен!

Он поставляется с:

var param = i + "@" + newMarkers[i].getLatLng().y + "," + newMarkers[i].getLatLng().x; 

Это обновленная часть:

GEvent.addListener(newMarkers[i], "dragend", function() { 
      var points = []; 
      for (var i = 0; i < newMarkers.length; i++) { 
       var param = i + "@" + newMarkers[i].getLatLng().y + "," + newMarkers[i].getLatLng().x; 
       //points[i] = newMarkers[i].getLatLng(); 
       points.push(param); 
       if (!i) { 
        var x = new GClientGeocoder(); 

        x.getLocations(newMarkers[0].getLatLng(), function(addresses) { 
         if (addresses.Status.code == 200) { 
          var address = addresses.Placemark[0].address; 
          document.getElementById("start").innerHTML = address; 
         } 
        }); 

        x.getLocations(newMarkers[1].getLatLng(), function(addresses) { 
         if (addresses.Status.code == 200) { 
          var address = addresses.Placemark[0].address; 
          document.getElementById("end").innerHTML = address; 
         } 
        }); 
       } 
      } 
      gdir.loadFromWaypoints(points); 

     }); 
+0

Вы получаете 0 и 1 для названий направлений из-за формата массива строк, который вы передаете для загрузкиFromWaypoints (name @ latitude, longitude). Имя получает индекс массива. Вы можете просто вернуться к пропущенной строке, и это сработает. – RedBlueThing

ответ

1

Проблемы здесь состоит в том, что объект, который вы получаете от вашей loadFromWaypoints запрос не заселенная со всеми членами, которые вы просите в onGDirectionsLoad(). Если вы посмотрите в вашей яваскрипта журнал ошибок вы увидите:

Ошибка:. Gdir.getRoute (0) .getStartGeocode() AddressDetails.Country неопределен

Ok, в соответствии с Google, справки о ответа от loadFromWaypoints и GClientGeodcoder должны быть одинаковыми.

Я взял на себя смелость сделать testing with your sample, и вдруг становится очевидно, что ответы не совпадают. Если вы посмотрите на http://www.cannonade.net/geo.js, вы увидите, что я строю запрос GClientGeocoder и ответ для первого маркера, и они очень разные. Так что вам нужно сделать несколько вещей:

  • Проверьте свои ответы, чтобы гарантировать, что вы не получите JavaScript ошибок для незаселенных результатов:

    если («» AddressDetails в соотв)

  • Сделайте запрос GClientGeocoder для каждой точки маркера, чтобы получить полную адресную информацию. Мой образец делает это для первого маркера.

+0

К сожалению, забыли ссылку на doco, в которой говорится, что loadFromWaypoints возвращает результаты, соответствующие GClientGeocoder http://code.google.com/apis/maps/documentation/reference.html#GDirections.getGeocode – RedBlueThing

+0

Это замечательно! Мне нужно опубликовать код, поэтому, пожалуйста, см. Мой обновленный пост в верхней части :) – 2009-04-28 06:55:44

1

Вы пытаетесь преобразовать позицию в адрес, обычно называемый «обратный геокодирования».

См. Пример кода here.

Короче говоря, вместо вызова getGeocode, вы должны называть GClientGeocoder.getLocations

+0

Супер! Поставил меня в правильном направлении! :-D – 2009-04-28 07:03:48