Google Map API v2 - GeoCoder - как настроить маркер? - PullRequest
1 голос
/ 28 октября 2010

Я пытаюсь добавить / настроить маркеры с помощью Gmap V2 следующим образом (пример):

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!

Ответы [ 2 ]

1 голос
/ 31 октября 2010

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() ;
1 голос
/ 28 октября 2010

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

        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

...