228
京東網上商城
地圖開發添加標注物
最近幾年在搞地圖方麵的開發,主要是循環為坐標添加標注並為標注添加彈出信息窗口,起初我的代碼如下:
[javascript]
view plaincopy
- 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 >' + 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());
這樣子確實能添加標注,也彈出信息窗口,但是問題來了!彈出 的信息窗口沒有變化,也就是說本來不同的標注上彈出 的信息窗口應該是不一樣的,可以不知道怎麼回事
彈出的信息窗口一直是最後的那個信息窗口!折騰了好久,最後終於解決了,具體的代碼如下:
[javascript]
view plaincopy
- 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 >' + 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]的內容了。這樣雖然解決了問題,但是每添加一個點都會創建一個匿名函數,內存泄漏可能會是潛在隱患。
接下去, 我們就可以自由的在地圖上標注點並顯示對應的信息了!
最後更新:2017-04-04 07:33:13
上一篇:
未能正確加載“VSTS for Database Professionals Sql Server Data-tier Application”包。
下一篇:
hi3531 SDK 編譯 kernel, 修改 參數
Docker 企業版為 Northern Trust 舊有的應用程序帶來新的生命力
Leveraging IOT Data in the Cloud: Why your business is more at risk than you think
Java 25天基礎-DAY 06-麵向對象-ststic關鍵字
【雲棲大會】YuMi機器人亮相阿裏雲棲大會
博客搬家
step-by-step通過數據集成同步數據到HBase
項目經理修煉之道(1) -- 給軟件開發建模 .
magento開發 -- 深入理解Magento第二章
Android之ExpandableListView下拉分組的實現
jsp中實現倒計時簡單代碼