百度地图循环添加标注,并循环为标注添加信息窗口问题解决
2015-01-08 13:47
351 查看
原文:
百度地图循环添加标注,并循环为标注添加信息窗口问题解决
最近几年在搞地图方面的开发,主要是循环为坐标添加标注并为标注添加弹出信息窗口,起初我的代码如下:
这样子确实能添加标注,也弹出信息窗口,但是问题来了!弹出 的信息窗口没有变化,也就是说本来不同的标注上弹出 的信息窗口应该是不一样的,可以不知道怎么回事
弹出的信息窗口一直是最后的那个信息窗口!折腾了好久,最后终于解决了,具体的代码如下:
同样是一个循环,但是在循环中使用了一个匿名函数,从而造成一个闭包将 i 的值锁定在里面,这样外部的值已经变化,
但是传到闭包里面的值已经被保留,也就可以顺利拿到应该取到的address[i]的内容了。
这样虽然解决了问题,但是每添加一个点都会创建一个匿名函数,内存泄漏可能会是潜在隐患。
接下去, 我们就可以自由的在地图上标注点并显示对应的信息了!
百度地图循环添加标注,并循环为标注添加信息窗口问题解决
最近几年在搞地图方面的开发,主要是循环为坐标添加标注并为标注添加弹出信息窗口,起初我的代码如下:
var map = new BMap.Map("Mapcontainer"); var JsonObj = eval(JsonStr); if (JsonObj != null) { for (var i = 0; i < JsonObj.length; i++) { var point = new BMap.Point(JsonObj[i].Visit_GPS_Longitude, JsonObj[i].Visit_GPS_Latitude); // 创建点坐标 map.centerAndZoom(point, 13); var marker = new BMap.Marker(point); var opts = { width: 250, // 信息窗口宽度 height: 100, // 信息窗口高度 title: '<span style="font-size:15px;color:#0A8021">' + JsonObj[i].CustomerName + '</span>' // 信息窗口标题 } //marker.setAnimation(BMAP_ANIMATION_BOUNCE); var content = "进店时间 " + JsonObj[i].VisitBeginTime + "<br/>离店时间 " + JsonObj[i].VisitEndTime; var info_Window = new BMap.InfoWindow(content, opts); // 创建信息窗口对象 marker.addEventListener("click", function () { this.openInfoWindow(info_Window); }); map.addOverlay(marker); } map.addControl(new BMap.NavigationControl());
这样子确实能添加标注,也弹出信息窗口,但是问题来了!弹出 的信息窗口没有变化,也就是说本来不同的标注上弹出 的信息窗口应该是不一样的,可以不知道怎么回事
弹出的信息窗口一直是最后的那个信息窗口!折腾了好久,最后终于解决了,具体的代码如下:
var map = new BMap.Map("Mapcontainer"); var JsonObj = eval(JsonStr); if (JsonObj != null) { for (var i = 0; i < JsonObj.length; i++) { (function (x) { var point = new BMap.Point(JsonObj[x].Visit_GPS_Longitude, JsonObj[x].Visit_GPS_Latitude); // 创建点坐标 map.centerAndZoom(point, 13); var marker = new BMap.Marker(point); var opts = { width: 250, // 信息窗口宽度 height: 100, // 信息窗口高度 title: '<span style="font-size:15px;color:#0A8021">' + JsonObj[x].CustomerName + '</span>' // 信息窗口标题 } //marker.setAnimation(BMAP_ANIMATION_BOUNCE); var content = "进店时间 " + JsonObj[x].VisitBeginTime + "<br/>离店时间 " + JsonObj[x].VisitEndTime; var info_Window = new BMap.InfoWindow(content, opts); // 创建信息窗口对象 marker.addEventListener("click", function () { this.openInfoWindow(info_Window); }); map.addOverlay(marker); })(i); } map.addControl(new BMap.NavigationControl());
同样是一个循环,但是在循环中使用了一个匿名函数,从而造成一个闭包将 i 的值锁定在里面,这样外部的值已经变化,
但是传到闭包里面的值已经被保留,也就可以顺利拿到应该取到的address[i]的内容了。
这样虽然解决了问题,但是每添加一个点都会创建一个匿名函数,内存泄漏可能会是潜在隐患。
接下去, 我们就可以自由的在地图上标注点并显示对应的信息了!
相关文章推荐
- 百度地图循环添加标注,并循环为标注添加信息窗口问题解决
- 百度地图 循环加载marker并添加多个信息窗口,解决只显示最后一个窗口信息的问题
- 百度地图中循环输出坐标点信息是重复的问题解决方法
- 创建百度地图,设置地图缩放,设置标注,添加信息窗口
- 百度地图创建麻点及解决显示最同一个窗口信息问题
- js的闭包解决百度地图的信息窗口问题
- ionic开发——百度地图InfoWindow信息窗口上添加按钮,无法触发点击事件问题解决办法
- 解决apk添加签名之后不显示百度地图获取定位信息
- 百度地图的标注点无法居中,总是在左上角显示问题解决
- 百度地图循环添加个标点及信息框
- 百度地图API显示多个标注点,解决提示信息问题以及给标注增加地图旁的文字连接提示的另一种解决办法
- webapi修改tt模板给字段添加JsonIgnore特性解决转换json循环引用问题
- 添加/删除程序空白窗口及控制面板窗口显示异常问题的解决方法
- 百度地图JavaScript API自定义覆盖物、自定义信息窗口增删时的显示问题
- 百度地图API多个点聚合时,标注添加的标签label地图刷新就丢失的问题解决
- 在百度地图信息窗口里添加按钮(html代码)
- 解决学生信息管理系统之List列表中重复添加相同数据问题。
- 进入'我的电脑'窗口后,左边显示的‘系统任务,其它位置,详细信息’菜单条到删除和出现的问题解决
- CA服务器扩展信息中添加CRL,彻底解决Lync 2013共享PPT提示证书问题
- 解决IE不能在新窗口中向父窗口的下拉框添加项的问题