2012-03-20 132 views
1

我試圖在谷歌地圖中使用json調整我的代碼。我試着看着其他線程的stackoverflow,但沒有幫助我。 如何使用json接收的座標在地圖上顯示多個點? Firebug中的這段代碼顯示沒有錯誤,並且地圖全部顯示爲藍色。使用Json在谷歌地圖V3中添加多個標記

var geocoder; 
var map; 

function initialize() { 

var url = '/project/display/get_coordinates/'; 

$.getJSON(url, function(data) { 

$.each(data, function(index, c) { 

//alert(c.fields['lat']+','+c.fields['lng']); result: -23.0522826,-43.32745712 

//Map 
latlng = new google.maps.LatLng(c.fields['lat']+','+c.fields['lng']); 

//options 
var myOptions = { 
zoom: 5, 
center: latlng, 
mapTypeId: google.maps.MapTypeId.ROADMAP, 
streetViewControl: true 
}; 

//get the map 
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

//marker 
var marker = new google.maps.Marker({ 
    map: map, 
    position: latlng, 
    //title: {{i.display.codigo}}   
}); 

//infowindow 
var infowindow = new google.maps.InfoWindow({ 
    content: 'oi' 
}); 

//click infowindow 
google.maps.event.addListener(marker, 'click', function() { 
    infowindow.open(map, marker); 
}); 


});//close each 

});//close getjson 

}//close initialize 

我的JSON響應:

[{"pk": 1, "model": "address.coordinates", "fields": {"lat": "-23.0522826", "lng": "-43.32745712"}}, {"pk": 2, "model": "address.coordinates", "fields": {"lat": "-22.24569326", "lng": "-43.7028948"}}] 

謝謝!

+0

如果地圖上顯示了所有藍,確保它不會在海上通過縮小中心... 另一個更嚴重的問題是,您不應該在$ .each(...)中的回調函數內重新聲明映射,而是在全局變量中聲明它並附加標記 – msonsona 2012-03-20 00:07:50

+0

嗨!我試圖將許多標記並在地圖上infowindow。 「藍色」與代碼中的一些錯誤有關,不是海洋。謝謝! – LinuxMan 2012-03-20 00:12:02

+0

只是爲了確保;) – msonsona 2012-03-20 00:13:08

回答

0

您有1個真正的錯誤在這裏:

latlng = new google.maps.LatLng(c.fields['lat']+','+c.fields['lng']); 

google.maps.LatLng預計2個參數(LAT & LNG),但你得到1(含緯度和經度的字符串,用逗號連接)。它必須是

latlng = new google.maps.LatLng(c.fields['lat'],c.fields['lng']); 

但你也有一個邏輯錯誤:

您覆蓋在每個每個環

創建地圖和$之外的信息窗口創建的最後一個地圖。每()

function initialize() 
{ 
    var myOptions = 
     { 
     zoom: 5, 
     center: new google.maps.LatLng(1,1) , 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     streetViewControl: true 
     }; 

    var url = '/project/display/get_coordinates/'; 


    $.getJSON(url, function(data) { 

    map= new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    var bounds=new google.maps.LatLngBounds(); 
    infowindow = new google.maps.InfoWindow({ 
        content: 'oi' 
        }); 

    $.each(data, function(index, c) { 

     var latlng = new google.maps.LatLng(c.fields['lat'],c.fields['lng']); 

     var marker = new google.maps.Marker({ 
         map: map, 
         position: latlng, 
         title:'pk:'+c.pk 
        }); 
     bounds.extend(latlng); 

     google.maps.event.addListener(marker, 'click', function() { 
      infowindow.close(); 
      infowindow.setContent('pk:'+c.pk); 
      infowindow.open(map, marker); 
     }); 


});//close each 
map.fitBounds(bounds); 
});//close getjson 

}//close initialize 
+0

感謝您的幫助,我現在在座標中進行更改,地圖顯示只有一個標記(第一個標記消失並顯示第二個標記)。但是,如果我在$ each()之外創建地圖,那麼infowindow和marker所使用的其他參數是無參考的。有什麼建議麼? – LinuxMan 2012-03-20 01:23:36

+0

創建標記或附加事件時,您可以將所有想要的內容都設置在循環中,在 – 2012-03-20 01:36:07

+0

之上添加一個示例感謝Dr.Molle!作品!現在地圖有一箇中心,多個標記和infowindow,$ each()用json填充座標。問候! – LinuxMan 2012-03-20 01:45:55