Google Maps API v3中绘制多边形完成后的处理方法

8

Google Maps API V3中,绘制多边形似乎是异步的。请尝试点击此示例中的“加载”按钮:

http://jsfiddle.net/rmXXF/

文本“DONE”比网格绘制得早得多!看起来矩形网格的绘制是异步的。 我希望在网格绘制后显示文本 DONE! 是否有相应的事件处理程序?

代码中重要的部分位于函数action()中:

polygons = draw_all_squares(map); // draw grid here
document.getElementById('status').innerHTML = 'DONE'; // displayed 2 seconds
                                                      // before the grid! 

请注意,此处无法使用地图“空闲”事件,因为地图未移动/缩放。您可以在此处尝试: http://jsfiddle.net/92Hxj/ 也许这与谷歌地图无关,而是与浏览器渲染有关?无论如何,应该存在一些事件处理程序来处理此问题。

很遗憾,没有。使用案例是什么? - Chris Broadfoot
1
@broady,这个用例几乎与示例中所见相同,但是方块是通过ajax加载的。在发出ajax请求之前,我将状态指示器设置为“LOADING...”,并在获取数据并呈现它们后将其设置回“DONE”...但是它不起作用——状态指示器显示“DONE”,用户会盯着空地图看几秒钟。 - Tomas
2个回答

10

在绘制所有多边形之后,通过触发一次小的地图重新居中,可以将其添加到与此示例中相同的内部谷歌地图事件队列中:http://jsfiddle.net/rmXXF/40/

google.maps.event.addListener(map, 'idle', function() {
 document.getElementById('status').innerHTML = 'DONE';
});

my_map.setCenter(new google.maps.LatLng(my_map.getCenter().lat(), my_map.getCenter().lng() + .000000001));

4
非常好,David。我会做一个修改-使用addListenerOnce。 - Chris Broadfoot
这是一个惊人的黑客技巧。再次感谢 :-) - Tomas

3

您应该使用叠加层并监听绘图管理器的“rectanglecomplete”事件。午饭后,我可以编写一个示例代码。

大卫是正确的。我误读了文档。抱歉。他应该得到奖励。


哇,看起来就像我正在寻找的东西。有一个例子吗? - Tomas
赏金需要尽快奖励...如果你的答案完整,你就有机会获得奖励。 :-) - Tomas
1
好的,我可能错了,但是绘图管理器是库的一部分,用于用户端编辑,而在这种情况下''-complete事件是指当用户*完成绘制某些内容时,而不是当'本地'google.maps.Rectangle被绘制时(据我所知,它不会在这种情况下触发),那么为什么这个不完整的、甚至是错误的答案会得到如此多的赞成票呢?即使你能够伪造这样的用户操作,速度方面仍然会给出一个不可接受的开销。 - David Mulder
1
大卫是对的。我误读了文档。道歉。他应该得到奖励。 - NivekL33THaxor
@DavidMulder,你是对的! 我猜它得到了这么多赞是因为它听起来像是一个真正的解决方案 :-) 至少我严格要求了示例(我只是想知道为什么它还没有出现 :-))。我撤回了我的赞 :) - Tomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接