如何确定Google Maps loadGeoJson何时完成?

Big*_*ubb 4 javascript google-maps-api-3 knockout.js typescript

我有一个用户可以存储他们的映射样式的场景.当用户使用地图导航回该页面时,它应该按照之前的方式显示地图.

用户可以更改地理位置和边框的颜色,也可以根据人口统计信息应用主题样式.

随着新的loadGeoJson的发布,我在加速我的应用程序方面取得了巨大的成功.最初我通过JS自己绘制了所有的地理位置.这导致了大约1500个地理区域的一些内存问题.这项新功能大大降低了它.我选择在服务器端生成Features对象,只是将URL传递给地图进行渲染.此URL与所有其他样式信息一起传递,以重建以前的地图.

我遇到的问题是,当我尝试应用样式时,地图没有检索到要在地图上显示的要素列表.

通过文档查看我没有看到任何专门针对loadGeoJson方法的事件,但确实看到了addfeature和setgeometry,但是在使用loadGeoJson方法时都没有引发这些事件.

这些都是在Typescript中编写的,并试图遵循一个非常严格的MVVM方法,使用Knockout通过绑定来处理所有UI更改.

还有其他事件我可以联系到这个方法何时完成,这样我可以适当地应用我的风格?

还有另一种方法,我可以在某个地方'等待'烘烤吗?.

use*_*954 9

addfeature事件肯定是由loadGeoJson调用的,如果不适合你就是一些设置错误.

loadGeoJson有一个可选的回调参数,它在加载所有功能后调用,并具有参数功能.

https://developers.google.com/maps/documentation/javascript/3.exp/reference

loadGeoJson(url:string,options?:Data.GeoJsonOptions,callback?:function(Array))

您可以通过此回调发出代码,表明它可以继续处理.

map.data.loadGeoJson('google.json', null, function (features) {
    map.fitBounds(bounds); // or do other stuff what requires all features loaded
});
Run Code Online (Sandbox Code Playgroud)

您还可以将loadGeoJson包装到promise中,并在loadGeoJson的回调中解析promise.

function loadGeoJson(url, options) {
    var promise = new Promise(function (resolve, reject) {
      try {
        map.data.loadGeoJson(url, options, function (features) {
            resolve(features);
        });
      } catch (e) {
        reject(e);
      }
    });

    return promise;
}

// Somewhere else in your code:
var promise = loadGeoJson('studs.json');

promise.then(function (features) {
    // Do stuff
});

promise.catch(function (error) {
    // Handle error
});
Run Code Online (Sandbox Code Playgroud)