0
点赞
收藏
分享

微信扫一扫

地图开发添加标注物

捌柒陆壹 2022-09-07 阅读 75


最近几年在搞地图方面的开发,主要是循环为坐标添加标注并为标注添加弹出信息窗口,起初我的代码如下:

1. var map = new BMap.Map("Mapcontainer");
2. var
3. if (JsonObj != null) {
4. for (var
5. var point = new BMap.Point(JsonObj[i].Visit_GPS_Longitude, JsonObj[i].Visit_GPS_Latitude); // 创建点坐标
6. map.centerAndZoom(point, 13);
7. var marker = new
8. var
9. // 信息窗口宽度
10. // 信息窗口高度
11. '<span style="font-size:15px;color:#0A8021">' + JsonObj[i].CustomerName + '</span>' // 信息窗口标题
12. }
13. //marker.setAnimation(BMAP_ANIMATION_BOUNCE);
14. var content = "进店时间 " + JsonObj[i].VisitBeginTime + "<br/>离店时间 "
15. var info_Window = new BMap.InfoWindow(content, opts); // 创建信息窗口对象
16. "click", function
17. this.openInfoWindow(info_Window);
18. });
19. map.addOverlay(marker);
20. }
21. new

这样子确实能添加标注,也弹出信息窗口,但是问题来了!弹出 的信息窗口没有变化,也就是说本来不同的标注上弹出 的信息窗口应该是不一样的,可以不知道怎么回事

弹出的信息窗口一直是最后的那个信息窗口!折腾了好久,最后终于解决了,具体的代码如下:

1. var map = new BMap.Map("Mapcontainer");
2. var
3. if (JsonObj != null) {
4. for (var
5. function
6. var point = new BMap.Point(JsonObj[x].Visit_GPS_Longitude, JsonObj[x].Visit_GPS_Latitude); // 创建点坐标
7. map.centerAndZoom(point, 13);
8. var marker = new
9. var
10. // 信息窗口宽度
11. // 信息窗口高度
12. '<span style="font-size:15px;color:#0A8021">' + JsonObj[x].CustomerName + '</span>' // 信息窗口标题
13. }
14. //marker.setAnimation(BMAP_ANIMATION_BOUNCE);
15. var content = "进店时间 " + JsonObj[x].VisitBeginTime + "<br/>离店时间 "
16. var info_Window = new BMap.InfoWindow(content, opts); // 创建信息窗口对象
17. "click", function
18. this.openInfoWindow(info_Window);
19. });
20. map.addOverlay(marker);
21. })(i);
22. }
23. new

同样是一个循环,但是在循环中使用了一个匿名函数,从而造成一个闭包将 i 的值锁定在里面,这样外部的值已经变化,

但是传到闭包里面的值已经被保留,也就可以顺利拿到应该取到的address[i]的内容了。


这样虽然解决了问题,但是每添加一个点都会创建一个匿名函数,内存泄漏可能会是潜在隐患。


接下去, 我们就可以自由的在地图上标注点并显示对应的信息了!


举报

相关推荐

0 条评论