2011-10-15 216 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()函數內設置了標記的標題。 我不確定原因,但現在效果很好!