【问题标题】:Google forEach map.data feature not called未调用 Google forEach map.data 功能
【发布时间】:2014-05-21 10:32:55
【问题描述】:

我正在尝试将 GeoJSON 加载到 google maps javascript api,然后通过调用 map.data.forEach 处理 GeoJSON。我无法让 map.data.forEach 函数工作,似乎它从未被调用过。

GeoJSON 加载正常并显示在我的地图上。

有什么建议为什么 map.data.forEach 在这里不起作用?

这是我的代码:

var myMap;

function initialize() {
    // Create a simple map.
    myMap = new google.maps.Map(document.getElementById('map-canvas'), {
        zoom: 8,
        center: {
            lat: 48.2081743,
            lng: 16.3738189
        }
    });

}

function calculate(map) {
    console.log("calculating")
    map.data.forEach(function (feature) {
        console.log("tester");
    });
    console.log("end calculating");
}

function loadGeoJson(map) {
    map.data.loadGeoJson('mini.json');
}

google.maps.event.addDomListener(window, 'load', function () {
    initialize();
    loadGeoJson(myMap);
    calculate(myMap);
});

【问题讨论】:

    标签: json google-maps-api-3


    【解决方案1】:

    这是由于 javascripts 的异步特性造成的。当你有代码时

    loadGeoJson(myMap);
    calculate(myMap);
    

    loadGeoJson 加载一个外部资源,calculate 很可能会在loadGeoJson 完成之前执行。重现您的问题非常容易。

    不幸的是google.maps.Data::loadGeoJson没有回调机会,但是如果你把calculate的调用封装成一个小的setTimeout,那么你应该会很好:

    loadGeoJson(myMap);
    setTimeout(function() {
       calculate(myMap);
    }, 500);
    

    从上面查看你的代码 -> http://jsfiddle.net/SAS6Q/

    【讨论】:

    • 是的,解决了这个问题。我有类似的想法,但我对 js 还很陌生,所以看不出这不起作用,正如你现在解释的那样,它看起来很清楚。感谢 davidkonrad 真的帮了我很多:)
    • 根据developers.google.com/maps/documentation/javascript/3.exp/…,现在应该有一个回调,但是,它仍然对我不起作用。现在使用你的方法效果很好:)
    • 感谢评论,我试过了,回调工作正常。超时解决方案非常狡猾。
    【解决方案2】:

    您还可以使用 jQuery 和 Ajax 同步加载您的 JSON 以避免设置时间延迟:

    function loadGeoJson(map) {
      $.ajax({
        url: mini.json,
        dataType: 'json',
        async: false,
        success: function(data) 
                  {var features = map.data.addGeoJson(data);}
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      相关资源
      最近更新 更多