2012-03-20 87 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