使用$ .each从对象添加地图标记并不起作用

时间:2015-01-30 22:45:21

标签: json google-maps-api-3 google-maps-markers each

这是我的代码。如果我使用loadGeoJson它会显示标记。如果我使用$ .getJSON将数据加载到对象并逐步添加每个标记,我就看不到任何标记。我确实看到所有的名字出现在" pList" div所以我知道它正确循环并正确访问对象的属性。我错过了什么?

var map;
function initialize() {
  var mapOptions = {
    zoom: 8,
    center: new google.maps.LatLng(-34.397, 150.644)
  };
  map = new google.maps.Map(document.getElementById('map-canvas'),
      mapOptions);
}

google.maps.event.addDomListener(window, 'load', initialize);

$.getJSON( "data.json", function( data ) {
    participants = data.features;
}).done(function(){
    $.each( participants, function(i, p){
        $('#pList').append('<div>' + p.properties.name + '</div>');
        marker = new google.maps.Marker({
            position: new google.maps.LatLng (p.geometry.coordinates[0], p.geometry.coordinates[1]),
            map: map,
            title: p.properties.name
        });
    });
    //map.data.loadGeoJson('data.json');
});

1 个答案:

答案 0 :(得分:1)

您必须切换标记位置的参数。

在geoJSON中,Point-geometry的第一项是经度,第二项是纬度,但google.maps.LatLng需要顺序1.纬度2.经度。

目前,当p.geometry.coordinates[1]-85,85范围内时,您的代码只会绘制一个标记(但不会在所需的位置),因为这是纬度的有效范围。

    marker = new google.maps.Marker({
        position: new google.maps.LatLng (p.geometry.coordinates[1],
                                          p.geometry.coordinates[0]),
        map: map,
        title: p.properties.name
    });

如果这不能解决问题,map - 变量显然无法在done - 回调中访问。