原代码是这样的
parent.map.clearOverlays();//不能执行已释放的Script代码
//为所有标记创建指定阴影、图标尺寸灯的基础图标
var baseIcon = new GIcon();
baseIcon.shadow = "http://www.google.cn/mapfiles/shadow50.png";
//baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(0, 0);
for (var i = 0; i < json.length; i++) {
var myicon = new GIcon(baseIcon);
myicon.image = "/webtrack/img/car/car";
//根据方向来确定显示哪一个图标
var direct = json[i].direction;
if (direct - 0.0 > -22.5 && direct - 0.0 < 22.5) {
myicon.image += "0";
}
else if (direct - 45 > -22.5 && direct - 45 < 22.5) {
myicon.image += "45";
}
else if (direct - 90 > -22.5 && direct - 90 < 22.5) {
myicon.image += "90";
}
else if (direct - 135 > -22.5 && direct - 135 < 22.5) {
myicon.image += "135";
}
else if (direct - 180 > -22.5 && direct - 180 < 22.5) {
myicon.image += "180";
}
else if (direct - 225 > -22.5 && direct - 225 < 22.5) {
myicon.image += "225";
}
else if (direct - 270 > -22.5 && direct - 270 < 22.5) {
myicon.image += "270";
}
else if (direct - 315 > -22.5 && direct - 315 < 22.5) {
myicon.image += "315";
}
if (json[i].speed - 10.0 < 0) {
myicon.image += "_S.gif";
}
else {
myicon.image += ".gif";
}
//设置 GMarkerOptions 对象 GMarker 标记地图上的位置。它实现 GOverlay 接口,因此可使用 GMap2.addOverlay() 方法添加到地图中。
markerOptions = { icon:myicon };
//初始化一个,GLatLng 是以经度和纬度表示的地理坐标点。
var latlng = new GLatLng(json[i].latitude, json[i].longitude);
var pointMarker = new GMarker(latlng, markerOptions);
parent.map.addOverlay(pointMarker);
//注册点击事件
var content = "PlateNo.:" + json[i].vehicle.plateNo + "<br>time:" + json[i].orientationTime
+ "<br>location:" + json[i].location + "<br>speed:" + json[i].speed + " km/h";
GEvent.addListener(pointMarker, "click", function(){
parent.map.openInfoWindow(latlng, content);
});
}
执行时,发现画在地图上的任何一个图标,弹出的infoWindow都是完全相同的,且显示的位置也一样。这就说最后一句代码parent.map.openInfoWindow(latlng, content);的参数是一样的。分析可知,因为注册监听器是异步的,故必须把注册监听器的操作独立放进一个函数中,否则,latlng, content这两个参数将会永远是最新的同一个值。
修改方法如下:
//注意:我这里把注册监听器操作单独写在了一个函数里。
function addListener(pointMarker,latlng,content) {
GEvent.addListener(pointMarker, "click", function(){
parent.map.openInfoWindow(latlng, content);
});
}
分享到:
相关推荐
Gevent是一个基于Greenlet的异步I/O库,它通过使用协同多任务(即协程)来实现非阻塞I/O。在Python中,Gevent能够显著提升网络应用的性能,因为它可以同时处理大量并发连接,而无需为每个连接创建一个新的线程或进程...
第10周-第09章节-Python3.5-协程Gevent.avi
标题“淘宝爬虫原型,基于gevent.zip”指的是一个使用Python编程语言编写的淘宝商品信息爬虫项目,它利用了gevent库来实现高效的网络请求并发处理。gevent是一个基于cooperative multitasking(协作式多任务)的...
- 通过本指南的学习,读者将能够掌握 Gevent 的基本原理和使用方法,并能够利用 Gevent 构建高效、可伸缩的并发应用。 - Gevent 的优势在于其轻量级的 Greenlet 模型、强大的异步 I/O 支持以及丰富的并发工具集,...
1. 安装:首先解压“gevent-21.12.0-cp310-cp310-win_amd64.whl.zip”,然后使用pip命令进行安装,例如:`pip install gevent-21.12.0-cp310-cp310-win_amd64.whl`。 2. 示例代码:创建一个简单的服务器示例: ```...
1. 使用说明.txt:这通常包含了关于如何安装和使用 gevent 的详细步骤,可能包括环境要求、安装命令、常见问题解答等内容。在实际操作时,应仔细阅读此文件以确保正确地部署和利用 gevent。 2. gevent-21.12.0-cp37-...
同时,由于`gevent`对某些标准库进行了猴子补丁,因此在与其他库集成时,需要确保这些库与`gevent`兼容,或者在必要时使用`gevent.monkey.patch_all()`来确保全局的协同多任务化。 总的来说,`gevent-21.12.0-cp39-...
标题中提到的“Gevent指南”指明了本文件是关于Gevent库的一个使用指南。Gevent是一个基于libev的Python并发库,它让程序员能够以更简洁的方式处理并发和网络相关任务。它提供的API使得并发编程对Python开发者更加...
本文将深入探讨`gevent` 0.13.8版本的特性和使用方法。 `gevent` 是一个基于`libev`事件库的Python库,它实现了Greenlet(轻量级线程)的概念,使得Python可以实现非阻塞I/O操作。`gevent`的核心是协程,这是一种...
python3.8版本的gevent wheel文件,pip安装某个库失败的时候,如果提示gevent安装失败,可以用这个wheel文件安装
离线安装包,测试可用。使用 pip install [完整包名] 进行安装
gevent-21.8.0-cp39-cp39-win32
在实际应用中,我们可以通过以下方式使用`gevent`: ```python import gevent def task1(): print("Task 1 started") # 这里可以是一些耗时的I/O操作 gevent.sleep(1) # 模拟I/O操作 print("Task 1 finished")...
资源分类:Python库 所属语言:Python 资源全名:gevent-20.6.2-cp36-cp36m-manylinux2010_x86_64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
`gevent`是一个基于`libev`事件库的Python网络库,它通过使用协同多线程(cooperative multitasking)来实现高效的并发处理。`gevent`的核心是绿色线程(greenlet),这是一种轻量级的线程,它们在单个操作系统线程...
使用gevent,你可以创建greenlet,然后使用`switch()`方法在greenlet之间切换。例如: ```python import gevent def task1(): print("Task 1 started") # 模拟IO操作 gevent.sleep(1) print("Task 1 finished")...
### Python的网络编程库Gevent的安装及使用技巧 #### 一、引言 在网络编程领域,特别是对于需要处理大量并发请求的应用来说,选择合适的工具和技术至关重要。Gevent作为Python中的一个高性能网络库,它通过引入绿色...
`gevent` 是一个基于 Python 的协程库,它通过使用协作式多任务(greenlets)来实现高效的并发处理。不同于传统的线程(threads)和进程(processes),gevent 的核心概念是“绿色线程”(green threads),这些线程...