2011-10-15 151 views
4

我正在处理地图,用户可以点击地图,生成新的标记。对于每个标记,都应该在边栏中显示一些信息:纬度,经度和标题。 标题由反向地理编码生成。我创建了一个标记数组,并且一切似乎都没问题,但数组中第一个标记的标题总是“未定义”。 coords没有问题:只是第一个元素的标题! 标题定期显示在infowindow中......但它在数组的第一个元素中是“未定义的”。 这里是我的代码:Google Maps API:未定义标记标题

<script> 
var map; 
var markers = []; 
var rome = new google.maps.LatLng(41.9012, 12.4751); 
var infowindow; 
var geocoder; 

function loadMap(){ 
var myOptions = { 
    zoom: 15, 
    center: rome, 
    mapTypeId: google.maps.MapTypeId.SATELLITE 
}; 
map = new google.maps.Map(document.getElementById('canvas'), myOptions); 
google.maps.event.addListener(map, 'click', function(evt){ 
    addMarker(evt.latLng); 
}); 
} 

function addMarker(location){ 
var marker = new google.maps.Marker({ 
    position: location, 
    map: map 
}); 
marker.setMap(map); 
openInfoWindow(marker); 

markers.push(marker); 
updateList(marker); 
} 

function openInfoWindow(marker){ 
geocoder = new google.maps.Geocoder(); 
geocoder.geocode({'location': marker.getPosition()}, function(results, status){ 
    if (status == google.maps.GeocoderStatus.OK) { 
     address = results[0].formatted_address; 
    }else{ 
     address("Address not found"); 
    } 
    var infowindow = new google.maps.InfoWindow({ 
     content: address 
    }); 
    infowindow.open(map, marker); 
    marker.setTitle(address); 
    console.log(address); 
}); 
} 

function updateList(marker){ 
    var lat, lng, title; 
    if(markers.length > 0){ 
    $('#sidebar').html('<ul></ul>'); 

    for(var i = 0; i < markers.length; i++){ 
     lat = markers[i].getPosition().lat(); 
     lng = markers[i].getPosition().lng(); 
     title = markers[i].getTitle(); 
     var html = '<li>Lat: ' + lat + '<br />Lng: ' + lng + '<br />' + title + '</li>'; 

     $(html).prependTo('#sidebar ul'); 

    }//end for 
    }//end if 
} 

$(document).ready(loadMap); 
</script> 

我在哪里错了?

+0

剂量设置'for(var i = 1; i david

回答

3

我找到了解决方案!

function addMarker(location){ 
geocoder = new google.maps.Geocoder(); 
geocoder.geocode({'location': location}, function(results, status){ 
    if (status == google.maps.GeocoderStatus.OK) { 
     address = results[0].formatted_address; 
    }else{ 
     address("Address not found"); 
    } 
    var marker = new google.maps.Marker({ 
     position: location, 
     title: address, 
     map: map 
    }); 
    google.maps.event.addListener(marker, 'click', function(){ 
     openInfoWindow(marker); 
    }); 
    marker.setMap(map); 
    openInfoWindow(marker); 

    markers.push(marker); 

    updateList(markers); 

}); 
} 
function openInfoWindow(marker){ 
var title = marker.getTitle(); 
if(infowindow){ 
    infowindow.close(); 
} 
infowindow = new google.maps.InfoWindow({ 
     content: title 
    }); 
    infowindow.open(map, marker); 
} 

在第一个代码块中,我从openInfoWindow()函数内调用geocoder。在第二个代码块中,我使用addMarker()函数调用了地理编码器。 哦,我在制造商声明中,在addMarker()函数内设置了标记的标题。 我不确定原因,但现在效果很好!