2010-10-28 2 views
1

Я пытаюсь добавить/изменить маркеры с GMAP V2, используя этот способ (пример):Google Map API v2 - GeoCoder - как настроить маркер?

for (var i in table) 
{ 
    var myvar = table[i]['text'] ; 
    var myaddress = table[i]['address'] ; 

    geocoder.getLatLng(
      myaddress , 
      function(point) { 
       alert(myvar) ; // here myvar is wrong 
       // ... adding customer markers ...    
      } 
    }); 
} 

В этом примере я получил хорошую точку для каждой записи в таблице, но MyVar неправильно, в каждый вызов: myvar остается равным последнему входу таблицы ...

geocoder.getLatLng - это асинхронная функция, из-за этого?


Edit: Спасибо вам за ответ. Но у меня есть такая проблема, когда я использую цикл, например:

var address = 'somewhere'; 
for (i = 0 ; i < 3 ; i++) 
{ 
    geocoder.getLatLng(
      address, 
      function(point) { 
       if (point) { 
        alert(i); 
       } 
    }); 
} 

Точка всегда равна 3!

ответ

1

вот что я делаю.

 if ($('#map_canvas').length != 0) { 

      var marker= new GIcon(title); 
      marker.image = '/images/icon.png'; 
      marker.iconSize = new GSize(139,64); 
      marker.iconAnchor = new GPoint(0, 64); 
      marker.name = title ; 


       markerOptions = { icon:marker }; 
      map = new GMap2(document.getElementById("map_canvas")); 
      geocoder = new GClientGeocoder(); 
      geocoder.getLatLng(
       address, 
       function(point) { 
       if (!point) { 
        alert(address + " not found"); 
       } else { 
        map.setCenter(point, 14); 
        map.addOverlay(new GMarker(point, markerOptions)); 
        } 
       } 
      );  
     } 
    }); 

Если это не помогает вам взглянуть на возможности: http://code.google.com/intl/da/apis/maps/documentation/javascript/overlays.html#Icons

1

Autosolved:

geocoder = new GClientGeocoder(); 
map = new GMap2(document.getElementById("map")); 
map.setCenter(new GLatLng(50, 3, 13)); 

geocoder = new GClientGeocoder(); 
function showAddress(address) 
{ 
    var adresses = ["10 place de la joliette, 13002 MARSEILLE", 
    "15 place de la joliette, 13002 MARSEILLE", 
    "20 place de la joliette, 13002 MARSEILLE"]; 

    for (var i = 0; i < adresses.length; i++) 
    { 
     alert(adresses[i]); 
     var address = adresses[i]; 
     addMarkerAtGeocode(address); 
    } 
} 
function addMarkerAtGeocode(address) 
{ 
    geocoder.getLatLng(address, function(point) { 
      if (!point) { 
       alert(address + " not found"); 
      } else { 
       alert('2:' + address); 
       var marker = createMarker(point, address); 
       map.addOverlay(marker); 
      } 
    }); 
} 

function createMarker(point, address) 
{ 
    var marker = new GMarker(point); 
    return marker; 
} 

showAddress() ; 
+0

приятно, что вы могли бы решить вашу проблему и поделился ею с нами. Пожалуйста, отметьте свой ответ как ответ. –

Смежные вопросы