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

Adding map markers from object using $.each doesn't work

这是我的代码。如果我使用 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');
});

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

在 geoJSON 中,点几何的第一项是经度,第二项是纬度,但是 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-回调中访问。