2

我正在尝试将我的 Live Earthquake Mashup 移植到

http://www.oe-files.de/gmaps/eqmashup.html

到谷歌地图 API v3。目前,我正在努力寻找渲染地图,尤其是自定义控件的正确时机,以便加载第一个数据馈送。需要显示自定义控件,因为代表多个提要之一的控件会突出显示。

我已阅读有关 google.maps.event.addListenerOnce 和事件“idle”和“tilesLoaded”的信息,但目前这些似乎都不起作用。

就我而言,混搭可以在这里找到:

http://www.oe-files.de/gmaps/eqmashup-ng.html

加载页面后,单击其中一个提要选择器(右下角)将加载提要。但我似乎无法在加载页面后找到合适的时机调用“switchFeed”。

仍然缺少很多其他东西,但目前这是最大的问题。任何帮助表示赞赏。


更新:

目前,这个序列应该初始化地图并加载第一个数据:

google.maps.event.addDomListener(window, 'load', initMashup);
google.maps.event.addListenerOnce(map, 'tilesLoaded', function() {
        switchFeed('usgs25');
    });

这不起作用,因为执行 addListerOnce 时未初始化“maps”。我尝试过的另一种方式是(或多或少)

google.maps.event.addDomListener(window, 'load', initMashup);
switchFeed('usgs25');

这也不起作用,因为 switchFeed 切换了作为自定义控件添加的按钮的样式(通过 map.controls),并且该按钮尚未呈现。

所以我的问题是:地图完全加载的时间是什么时候,我怎样才能将一个动作附加到这个事件上?

4

3 回答 3

0

没有理由在加载提要之前等待这么长时间。只需在其中初始化地图,initMashup()一旦您调用setCenter()并初始化控件,地图就可以进行进一步的操作了。之后您可以switchFeed()立即调用,但在函数内部执行initMashup()。您的第二个代码示例不起作用,因为您switchFeed()在初始化代码执行之前调用了。

请记住,这是异步代码;注意执行顺序。一些适当的console.log()电话会澄清很多。

于 2013-06-04T21:43:34.183 回答
0

好吧,我不确定我是否遇到了你的问题,这对我来说听起来很简单,你可以同时加载你的谷歌地图和控制,一旦你的提要被加载,你就可以更新你的地图,现在当用户拖动选择时,取决于天气您将提出新请求或使用预加载的 json 文件,您可以选择清除旧标记并加载新标记?如果这不是您要问的,也许编辑您的问题将帮助我更好地回答您

于 2013-06-03T21:12:19.620 回答
0

没关系,我找到了一个操作顺序,以便页面加载。它不像 V2 API 那样流畅,但它可以工作。

不过,还有一些其他(纯 JavaScript)问题需要修复。我认为从 V2 到 V3 的过渡并不像 Google 想让我们相信的那么容易……

于 2013-06-04T20:16:28.487 回答