`
hepeng19861212
  • 浏览: 150430 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

google map的GEvent.addListener使用心得

阅读更多
原代码是这样的
    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);
	});
}



分享到:
评论

相关推荐

    python-gevent-20.9.0.tar.gz

    Gevent是一个基于Greenlet的异步I/O库,它通过使用协同多任务(即协程)来实现非阻塞I/O。在Python中,Gevent能够显著提升网络应用的性能,因为它可以同时处理大量并发连接,而无需为每个连接创建一个新的线程或进程...

    第10周-第09章节-Python3.5-协程Gevent.avi

    第10周-第09章节-Python3.5-协程Gevent.avi

    淘宝爬虫原型,基于gevent.zip

    标题“淘宝爬虫原型,基于gevent.zip”指的是一个使用Python编程语言编写的淘宝商品信息爬虫项目,它利用了gevent库来实现高效的网络请求并发处理。gevent是一个基于cooperative multitasking(协作式多任务)的...

    python Gevent程序员指南.pdf

    - 通过本指南的学习,读者将能够掌握 Gevent 的基本原理和使用方法,并能够利用 Gevent 构建高效、可伸缩的并发应用。 - Gevent 的优势在于其轻量级的 Greenlet 模型、强大的异步 I/O 支持以及丰富的并发工具集,...

    gevent-21.12.0-cp310-cp310-win_amd64.whl.zip

    1. 安装:首先解压“gevent-21.12.0-cp310-cp310-win_amd64.whl.zip”,然后使用pip命令进行安装,例如:`pip install gevent-21.12.0-cp310-cp310-win_amd64.whl`。 2. 示例代码:创建一个简单的服务器示例: ```...

    gevent-21.12.0-cp37-cp37m-win_amd64.whl.zip

    1. 使用说明.txt:这通常包含了关于如何安装和使用 gevent 的详细步骤,可能包括环境要求、安装命令、常见问题解答等内容。在实际操作时,应仔细阅读此文件以确保正确地部署和利用 gevent。 2. gevent-21.12.0-cp37-...

    gevent-21.12.0-cp39-cp39-win_amd64.whl.zip

    同时,由于`gevent`对某些标准库进行了猴子补丁,因此在与其他库集成时,需要确保这些库与`gevent`兼容,或者在必要时使用`gevent.monkey.patch_all()`来确保全局的协同多任务化。 总的来说,`gevent-21.12.0-cp39-...

    Gevent指南.pdf

    标题中提到的“Gevent指南”指明了本文件是关于Gevent库的一个使用指南。Gevent是一个基于libev的Python并发库,它让程序员能够以更简洁的方式处理并发和网络相关任务。它提供的API使得并发编程对Python开发者更加...

    gevent-0.13.8.tar.gz

    本文将深入探讨`gevent` 0.13.8版本的特性和使用方法。 `gevent` 是一个基于`libev`事件库的Python库,它实现了Greenlet(轻量级线程)的概念,使得Python可以实现非阻塞I/O操作。`gevent`的核心是协程,这是一种...

    gevent-1.5a2-cp38-cp38-win_amd64.whl

    python3.8版本的gevent wheel文件,pip安装某个库失败的时候,如果提示gevent安装失败,可以用这个wheel文件安装

    gevent‑21.12.0‑pp38‑pypy38_pp73‑win_amd64.whl

    离线安装包,测试可用。使用 pip install [完整包名] 进行安装

    gevent-21.8.0-cp39-cp39-win32

    gevent-21.8.0-cp39-cp39-win32

    greenlet及gevent库

    在实际应用中,我们可以通过以下方式使用`gevent`: ```python import gevent def task1(): print("Task 1 started") # 这里可以是一些耗时的I/O操作 gevent.sleep(1) # 模拟I/O操作 print("Task 1 finished")...

    Python库 | gevent-20.6.2-cp36-cp36m-manylinux2010_x86_64.whl

    资源分类:Python库 所属语言:Python 资源全名:gevent-20.6.2-cp36-cp36m-manylinux2010_x86_64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | gevent-1.1rc1-cp34-none-win_amd64.whl

    `gevent`是一个基于`libev`事件库的Python网络库,它通过使用协同多线程(cooperative multitasking)来实现高效的并发处理。`gevent`的核心是绿色线程(greenlet),这是一种轻量级的线程,它们在单个操作系统线程...

    Python-gevent轻量级进程内的并发编程

    使用gevent,你可以创建greenlet,然后使用`switch()`方法在greenlet之间切换。例如: ```python import gevent def task1(): print("Task 1 started") # 模拟IO操作 gevent.sleep(1) print("Task 1 finished")...

    Python的网络编程库Gevent的安装及使用技巧

    ### Python的网络编程库Gevent的安装及使用技巧 #### 一、引言 在网络编程领域,特别是对于需要处理大量并发请求的应用来说,选择合适的工具和技术至关重要。Gevent作为Python中的一个高性能网络库,它通过引入绿色...

    gevent,threads&async frameworks.pdf

    `gevent` 是一个基于 Python 的协程库,它通过使用协作式多任务(greenlets)来实现高效的并发处理。不同于传统的线程(threads)和进程(processes),gevent 的核心概念是“绿色线程”(green threads),这些线程...

Global site tag (gtag.js) - Google Analytics