地图开发添加标注物

简介: <p>最近几年在搞地图方面的开发,主要是循环为坐标添加标注并为标注添加弹出信息窗口,起初我的代码如下:</p> <div class="dp-highlighter bg_javascript"> <div class="bar"> <div class="tools"><strong>[javascript]</strong> <a target="_blank" href="h

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

[javascript] view plain copy
  1. var map = new BMap.Map("Mapcontainer");  
  2.               var JsonObj = eval(JsonStr);  
  3.               if (JsonObj != null) {  
  4.                   for (var i = 0; i < JsonObj.length; i++) {  
  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 BMap.Marker(point);  
  8.                          var opts = {  
  9.                              width: 250,     // 信息窗口宽度  
  10.                              height: 100,     // 信息窗口高度  
  11.                              title: '<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/>离店时间 " + JsonObj[i].VisitEndTime;  
  15.                          var info_Window = new BMap.InfoWindow(content, opts);  // 创建信息窗口对象  
  16.                          marker.addEventListener("click"function () {  
  17.                              this.openInfoWindow(info_Window);  
  18.                          });  
  19.                          map.addOverlay(marker);   
  20.                   }   
  21.                   map.addControl(new BMap.NavigationControl());   

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

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

[javascript] view plain copy
  1. var map = new BMap.Map("Mapcontainer");  
  2.               var JsonObj = eval(JsonStr);  
  3.               if (JsonObj != null) {  
  4.                   for (var i = 0; i < JsonObj.length; i++) {  
  5.                      (function (x) {  
  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 BMap.Marker(point);  
  9.                          var opts = {  
  10.                              width: 250,     // 信息窗口宽度  
  11.                              height: 100,     // 信息窗口高度  
  12.                              title: '<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/>离店时间 " + JsonObj[x].VisitEndTime;  
  16.                          var info_Window = new BMap.InfoWindow(content, opts);  // 创建信息窗口对象  
  17.                          marker.addEventListener("click"function () {  
  18.                              this.openInfoWindow(info_Window);  
  19.                          });  
  20.                          map.addOverlay(marker);  
  21.                      })(i);  
  22.                   }   
  23.                   map.addControl(new BMap.NavigationControl());    

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

但是传到闭包里面的值已经被保留,也就可以顺利拿到应该取到的address[i]的内容了。
这样虽然解决了问题,但是每添加一个点都会创建一个匿名函数,内存泄漏可能会是潜在隐患。
接下去, 我们就可以自由的在地图上标注点并显示对应的信息了!
目录
相关文章
|
数据处理 Python
doccano数据标注平台搭建
基于阿里云服务器ESC示例,搭建doccano数据标注平台
|
7月前
|
定位技术 Android开发
在高德地图添加标注物,及点击标注物感应区域重叠问题
在高德地图添加标注物,及点击标注物感应区域重叠问题
208 0
|
数据可视化 物联网
Threejs物联网,养殖场3D可视化(三)模型展示,轨道控制器设置,模型沿着路线运动,模型添加边框,自定义样式显示标签,点击模型获取信息
Threejs物联网,养殖场3D可视化(三)模型展示,轨道控制器设置,模型沿着路线运动,模型添加边框,自定义样式显示标签,点击模型获取信息
952 15
Threejs物联网,养殖场3D可视化(三)模型展示,轨道控制器设置,模型沿着路线运动,模型添加边框,自定义样式显示标签,点击模型获取信息
|
7月前
|
传感器 XML JSON
AIOT-物模型(产品模型、数据模板)
使用 TSL 描述的物联网中的实体模型,就是“物模型”也称产品模型、数据模板。
602 0
如何批量制作一物一码标签?
许多行业存在为人员、物品、设备等做一物一码标签的需求,可使用草料标签制作功能。直接选择标签样式,填入数据,即可批量生成标签,还可批量排版,更易落地。还可保存标签样式,后续多次复用样式,批量制作标签。
|
定位技术 数据格式 容器
腾讯位置服务富文本标签实现行政区域标注点聚合的解决方案
腾讯位置服务富文本标签实现行政区域标注点聚合的解决方案
97 0
|
XML 人工智能 JSON
告别手动标注时代 | SAM 助力 Label-Studio 形成 SOTA 级半自动标注工具
告别手动标注时代 | SAM 助力 Label-Studio 形成 SOTA 级半自动标注工具
2213 0
告别手动标注时代 | SAM 助力 Label-Studio 形成 SOTA 级半自动标注工具
|
数据可视化 C++
【变化检测】多时相遥感影像变化检测 Qt界面可视化 / 实现卷帘功能(附有完整代码)
【变化检测】多时相遥感影像变化检测 Qt界面可视化 / 实现卷帘功能(附有完整代码)
|
算法 数据可视化 小程序
ATPdock:一种基于模板的ATP特异性蛋白质-配体对接方法
ATPdock:一种基于模板的ATP特异性蛋白质-配体对接方法
180 0
|
数据可视化 物联网
Threejs物联网,工厂3D可视化,加载模型,水流监测,标签动态数据展示
Threejs物联网,工厂3D可视化,加载模型,水流监测,标签动态数据展示
938 15
Threejs物联网,工厂3D可视化,加载模型,水流监测,标签动态数据展示