谷歌地图&x2B;javascript仅在警报编码时正确呈现

谷歌地图&x2B;javascript仅在警报编码时正确呈现,javascript,google-maps,google-maps-api-3,geolocation,Javascript,Google Maps,Google Maps Api 3,Geolocation,我用这个例子: 基于数据数组变量渲染多标记google地图 这是我的密码: geocoder = new google.maps.Geocoder(); var locations = [ ["Title1", "Ballyblack Road, Portaferry, United Kingdom", 0, "/images/pins/1.png"], ["Title2", "Coach Road, Portaferry, United Kingdom", 1, "/ima

我用这个例子:

基于数据数组变量渲染多标记google地图

这是我的密码:

geocoder = new google.maps.Geocoder();

var locations = [
    ["Title1", "Ballyblack Road, Portaferry, United Kingdom", 0, "/images/pins/1.png"],
    ["Title2", "Coach Road, Portaferry, United Kingdom", 1, "/images/pins/2.png"],
    ["Title3", "Cook Street, Portaferry, United Kingdom", 2, "/images/pins/2.png"],
    ["Title4", "Ballyfounder Road, Portaferry, United Kingdom", 3, "/images/pins/1.png"],
    ["Title5", "Shore Road, Strangford, United Kingdom", 4, "/images/pins/3.png"],
    ["Title6", "Cook Street, Portaferry, United Kingdom", 5, "/images/pins/1.png"],
    ["Title7", "Windmill Hill, Portaferry, United Kingdom", 6, "/images/pins/4.png"],
    ["Title8", "BT32", 7, "/images/pins/TownlandsandGateways.png"],
    ["Title9", "Shore Road, Strangford, United Kingdom", 8, "/images/pins/4.png"],
    ["Title10", "Windmill Lane, Portaferry, United Kingdom", 9, "/images/pins/1.png"],
    ["Title11", "The Saltpans, Portaferry, United Kingdom", 10, "/images/pins/3.png"],
    ["Title12", "Cuan View, Portaferry, United Kingdom", 11, "/images/pins/4.png"],
    ["Title13", "Lough Shore Road, Portaferry, United Kingdom", 12, "/images/pins/3.png"],
    ["Title14", "Castleward Road, Down, United Kingdom", 13, "/images/pins/1.png"],
    ["Title15", "Bar Hall Road, Portaferry, United Kingdom", 14, "/images/pins/2.png"],
    ["Title16", "Bar Hall Road, Portaferry, United Kingdom", 15, "/images/pins/1.png"]
];

function initialize() {
    var mapOptions = {center: new google.maps.LatLng(54.380357, -5.542774), zoom: 14};
    var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
    setMarkers(map, locations);
}

function setMarkers(map, locations) {
    for (var i = 0; i < locations.length; i++) {

        var location = locations[i];

        geocoder.geocode({'address': location[1]}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                markers = new google.maps.Marker({
                    position: results[0].geometry.location,
                    map: map,
                    icon: location[3],
                    title: location[0],
                    zIndex: location[2]
                });
            }
        });
// alert(location[1]);
    }
}
google.maps.event.addDomListener(window, 'load', initialize); 
geocoder=new google.maps.geocoder();
变量位置=[
[“标题1”,“英国Portaferry Ballyblack路”,0,“/images/pins/1.png”],
[“标题2”,“英国Portaferry Coach路”,1,“/images/pins/2.png”],
[“标题3”,“联合王国波塔费里库克街”,2,“/images/pins/2.png”],
[“标题4”,“联合王国Portaferry Ballyfounder路”,3,“/images/pins/1.png”],
[“标题5”,“联合王国斯特兰福德海岸路”,4,“/images/pins/3.png”],
[“标题6”,“英国Portaferry库克街”,5,“/images/pins/1.png”],
[“标题7”,“英国Portaferry风车山”,6,“/images/pins/4.png”],
[“Title8”,“BT32”,7,“/images/pins/TownlandsandGateways.png”],
[“标题9”,“英国斯特兰福德海岸路”,8,“/images/pins/4.png”],
[“标题10”,“英国Portaferry风车巷”,9,“/images/pins/1.png”],
[“Title11”,“盐田,Portaferry,联合王国”,10,“/images/pins/3.png”],
[“标题12”,“联合王国Portaferry Cuan View”,11,“/images/pins/4.png”],
[“标题13”,“英国Portaferry湖岸路”,12,“/images/pins/3.png”],
[“标题14”,“英国唐郡卡斯特沃德路”,13,“/images/pins/1.png”],
[“标题15”,“英国Portaferry Bar Hall路”,14,“/images/pins/2.png”],
[“标题16”,“英国Portaferry Bar Hall路”,15,“/images/pins/1.png”]
];
函数初始化(){
var-mapOptions={center:newgoogle.maps.LatLng(54.380357,-5.542774),zoom:14};
var map=new google.maps.map(document.getElementById(“地图画布”),mapOptions);
设置标记(地图、位置);
}
功能设置标记(地图、位置){
对于(变量i=0;i
数组参数为[“Title”、“Location”、“zIndex”、“Image”]

您将看到,我已注释掉接近底部的警报。当我运行这段代码时,它会渲染所有16个管脚,但它们都是管脚16-虽然它确实为它们找到了正确的位置,但标记图像都是相同的,标题都是相同的

当我取消对警报的注释并单击“警报”框上的“确定”时,所有标记都会正确渲染,并带有它们自己的标题和图标

我抓挠我的头,想知道如何找到正确的位置为每个,但不是正确的标题或图标图像

我的猜测是,代码正在快速运行,以便映射找到正确的值。。。但我的直觉是。。。真正地太快了

我最终计划从一个大型数据库中构建阵列,这样可能会有100个标记

关于我可能做错了什么有什么建议吗


非常感谢。

之所以发生这种情况,是因为您不必等待地理编码器的响应,在地理编码返回其响应之前更改变量位置。 你应该有这样的东西:

function setMarkers(map, locations) {
    for (var i = 0; i < locations.length; i++) {

        setMarker( map, locations[i] );

    }
}


function setMarker( map, location ) {
    geocoder.geocode({'address': location[1]}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            markers = new google.maps.Marker({
                position: results[0].geometry.location,
                map: map,
                icon: location[3],
                title: location[0],
                zIndex: location[2]
            });
        }
    });
}
功能设置标记(地图、位置){
对于(变量i=0;i
这样,每个标记都有一个不同的局部变量位置