首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定谷歌地图loadGeoJson何时完成?

如何确定谷歌地图loadGeoJson何时完成?
EN

Stack Overflow用户
提问于 2014-04-14 22:34:15
回答 3查看 7.3K关注 0票数 4

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

用户可以更改地理颜色和边框,以及根据人口统计信息应用主题样式。

随着新loadGeoJson的发布,我在加快我的应用程序方面取得了巨大的成功,最初我是通过JS自己绘制所有地理位置的。这在大约1500个地理位置引起了一些记忆问题。这个新功能大大减少了它。我选择在服务器端生成功能对象,并将一个URL传递给地图以供呈现。此URL与所有其他样式信息一起传入,以重新构建以前的地图。

我遇到的问题是,当我尝试应用这些样式时,地图还没有检索到要在地图上显示的功能列表。

纵观文档化,我没有看到专门针对loadGeoJson方法的任何事件,但确实看到了addFeatureandset几何学,但是在使用loadGeoJson方法时,这些事件都不会被引发。

所有这些都是用类型记录编写的,并试图遵循一种非常严格的MVVM方法,使用Knockout通过绑定为我处理所有UI更改。

是否有另一个事件我可以绑定以查看此方法何时完成,以便我可以适当地应用我的样式?

还有什么办法可以让我在某个地方“等着”吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-15 08:44:42

您可以侦听addFeature事件,该事件将为json中的每个特性触发。例如,如果使用https://storage.googleapis.com/maps-devrel/google.json,则在json请求完成后引发6个事件,即当google开始从json文件中添加特性时:

您可以在这里看到演示:http://jsbin.com/ofutUbA/4/edit

票数 1
EN

Stack Overflow用户

发布于 2015-06-24 12:21:07

addfeature肯定是由loadGeoJson调用的,如果不是针对您的,则是一些设置错误。

loadGeoJson有一个可选的回调参数,在加载所有特性之后调用什么,并将这些特性作为参数。

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

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

您可以通过此回调向您的代码发出信号,表示它可以继续处理。

代码语言:javascript
运行
复制
map.data.loadGeoJson('google.json', null, function (features) {
    map.fitBounds(bounds); // or do other stuff what requires all features loaded
});

您还可以将loadGeoJson封装到一个承诺中,并在loadGeoJson的回调中解决这个承诺。

代码语言:javascript
运行
复制
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
});
票数 12
EN

Stack Overflow用户

发布于 2014-04-15 08:05:11

如果您使用的是“敲除”,您可能会假设可能绑定到某些侦听器,或者将侦听器附加到某个事件。

大多数通过JavaScript的事件总是有一个回调函数,这是一个很好的实践,因此一旦一个函数完成了一些长的I/ODatabase查询,它就会立即执行该函数。很明显,回调将由您定义。

代码语言:javascript
运行
复制
someLongTimeFunction(function (data) {
  // usually this callback will be fired when the function has finished.
});

如果您熟悉敲除,那么您就会知道,一旦数据被检索并通过observable传递,observable将更新其绑定。

下面是扩展可观测数据的链接:敲除js

据我从您的问题中所能理解的,这个loadGeoJson是服务器端吗?如果是这样的话,您将从客户端进行一次长时间的民意调查,并将其与此结合起来:

代码语言:javascript
运行
复制
function doRequest() {
  var request = $.ajax({
    dataType: "json",
    url: 'loadGeoJson',
    data: data,
  });

  request.done(function(data, result) {
    if (result !== "success") {
      setTimeout(doRequest, 10000);
    }
  });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23071590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档