1. 程式人生 > >百度地圖InfoWindow迴圈顯示不同的資訊視窗

百度地圖InfoWindow迴圈顯示不同的資訊視窗

使用BMap.InfoWindow,在for迴圈展示資訊的時候,總是顯示最後一條資訊的資料。

其實,可以將BMap.InfoWindow的建立寫在一個單獨的function中。這樣,每一個BMap.InfoWindow,就是顯示的當條的資訊。

  這幾天在寫一個開發應用中,用到百度地圖。功能要求將一批標記點加入地圖,點選其中任意一個點,地圖彈出InfoWindow框,裡面顯示與此點相關的內容。
按照常規寫了如下程式碼:

var node = function(){
    name;
    lng;
    lat;
};

addmarks = function(nodes){
        var _nodes = nodes;
        var _markers = new Array();
        for(var i=0;i<_nodes.length;i++){
            var _marker = new BMap.Marker(new BMap.Point(_nodes[i].lng, _nodes[i].lat));
            var _node = _nodes[i];
            var _html = "節點名:"+_node.name;
            _marker.addEventListener("click", function(e){
                    this.openInfoWindow(new BMap.InfoWindow(_html));
            });
            _marker.addEventListener("mouseover", function(e){ 
                this.setTitle("座標@ "+_node.lng+","+_node.lat);
            });
            _markers.push(_marker);
        }
      myClusterer = new BMapLib.MarkerClusterer(myMap, {markers:_markers});
      myClusterer.setMaxZoom(17);
      //myClusterer.setStyles(myStyles);
};


    上述寫法很直觀看起來沒有問題,但遺憾的是,執行起來後,各個標記點雖然能夠根據各自的座標散佈在地圖上,但點選每個標記點所彈出的InfoWindow框裡的資訊則是nodes數組裡面最後一個數組的元素的相應資訊百度地圖API中不同marker的InfoWindow的顯示內容不同的實現

    上網查了一下,沒有人給出具體解決,只是提出了javascript的閉包來解決。

於是採用閉包方式重新寫了程式碼:

addmarks = function(nodes){
      var _nodes = nodes;
      var _markers = new Array();
      for(var i=0;i<_nodes.length;i++){
          var _html = "節點名:"+_node.name;
          shop_markers.push(createMark(_nodes[i], _html));
      }
      myClusterer = new BMapLib.MarkerClusterer(myMap, {markers:shop_markers});
      myClusterer.setMaxZoom(17);
      //myClusterer.setStyles(myStyles);
};
   
createMark = function(node, info_html){
        var _marker = new BMap.Marker(new BMap.Point(node.lng, node.lat));
        _marker.addEventListener("click", function(e){
            this.openInfoWindow(new BMap.InfoWindow(info_html));
        });
        _marker.addEventListener("mouseover", function(e){ 
            this.setTitle("位於: "+node.lng+","+node.lat);
        });
        return _marker;
};



執行後成功百度地圖API中不同marker的InfoWindow的顯示內容不同的實現

關於js的閉包

閉包的參考:

http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

或者 :

addmarks = function(nodes){
      var _nodes = nodes;
      var _markers = new Array();
      for(var i=0;i<_nodes.length;i++){
function(x){
          var _html = "節點名:"+_node.name;
          shop_markers.push(createMark(_nodes[i], _html));
      }
      myClusterer = new BMapLib.MarkerClusterer(myMap, {markers:shop_markers});
      myClusterer.setMaxZoom(17);
      //myClusterer.setStyles(myStyles);
}(i);
};


相關推薦

地圖InfoWindow迴圈顯示不同資訊視窗

使用BMap.InfoWindow,在for迴圈展示資訊的時候,總是顯示最後一條資訊的資料。 其實,可以將BMap.InfoWindow的建立寫在一個單獨的function中。這樣,每一個BMap.InfoWindow,就是顯示的當條的資訊。   這幾天在寫一個開發應用中

地圖API一:地圖迴圈顯示標註點。使用閉包迴圈載入點選事件

本文記錄:百度地圖上迴圈顯示標註點marker。使用立即執行函式和閉包迴圈載入點選事件顯示資訊視窗顯示該標註點的更多資訊。 最近一個專案也要用到地圖功能,公司內部的專案,就去研究了一下百度地圖的API。 感覺跟天地圖的API還是有很多的相似之處。 基本的使用方式 是差不太

js 地圖自定義彈出資訊視窗

圓形頭像,下方圖文效果 var sContent = {# '<a style="c

自定義地圖全域性搜尋結果的資訊視窗

如圖所示,直接呼叫百度地圖的全域性搜尋方法,預設返回結果為圖1所示: 圖1 但是搜尋結果的標註點所對應的資訊視窗樣式比較單調,且不滿足業務需要,因此通過官方API提供的方法來修改標註點對應的資訊

地圖 批量新增marker和資訊視窗

別的博主把需求的業務寫得非常複雜,或許是個人能力不足,把博主的業務邏輯抄下來後發現實際上並沒有實現點選marker彈出資訊視窗這個需求,所以就結合其它博主的加上自己個人的理解寫出瞭如下程式碼 <head> <script type="text/javasc

地圖自定義標註、資訊視窗、多種類聚合、主題(一篇嘔心瀝血的部落格...)

一、序     最近做百度地圖的圖形化定製。略有心得,在此和大家分享一下,少走彎路。先看目錄,大致介紹一下都寫了些啥。我會從最基本的來,一點點往下寫,同志們可以看目錄自己去找需要的部分。ps:注意,我用的是百度地圖 2.0 版本,例子也都是。   這個完整程式碼,我會上傳到 githu

ionic開發——地圖InfoWindow資訊視窗上新增按鈕,無法觸發點選事件問題解決辦法

ionic開發中,在使用百度地圖的時候,有時我們需要在點選地圖上標註的海量點彈出一個infowindow的資訊視窗,自定義資訊視窗的內容後,我們想要可以在資訊視窗上面點選的時候,發現點選沒有效果。 我

地圖開發新增覆蓋物的資訊時出現的問題new infoWindow的時候

新的百度地圖SDK的此構造方法為四個引數的解決方法 public InfoWindow(BitmapDescriptor bd,         LatLng position,     int yOffset,          InfoWindow.OnInfoWi

地圖API JavaScript顯示人員分布信息

mem tel 部分 lin async -m .ajax var cti 效果圖貼下: js代碼貼下: <body> <div id="div-map"></div></body></html><scr

地圖API定位+顯示位置

col mar 位置 百度地圖api fail true acc ntp 引入 1. 先在需要嵌入地圖的頁面引入map.js <script src="http://api.map.baidu.com/api?v=2.0&ak=你的秘鑰"></s

Android 使用地圖API來顯示地圖

  http://lbsyun.baidu.com/ 進入百度地圖開放平臺,登入百度賬號 選擇應用型別為Android SDK 釋出版SHA1,和開發板SHA1的獲取方法為: 找到電腦上的.android路徑,一般都在C盤使用者目錄下, 有的

利用Python呼叫地圖介面爬取小區資訊

前幾天有一個需求,就是想要查到每個一二線城市裡所有小區的經緯度,因此爬取程式和啟動程式如下 community_info_do.py 的程式碼如下 # -*- coding: utf-8 -*- """ 功能:呼叫百度地圖介面爬取各城市小區基本資訊 呼叫介面

地圖api 實時顯示 每個人的位置和頭像

UserMapController.class.php <?php namespace Home\Controller; use Think\Controller; class UserMapController extends Controller {   //實

地圖infoWindow圓角處理

最近的一個專案用到了百度地圖API裡邊的infoWindow彈框,但是百度自帶的infoWindow彈框是個直角的矩形框,顯示過於難看,於是有了將該框改為圓角的想法,但是API本身不支援樣式的設定,所以我最終選擇在弄清頁面生成的彈框html元素後,自己來給他們定義css,以

關於地圖InfoWindow響應自定義佈局點選事件

大概講解:在百度地圖上顯示一個marker,當marker被點選後,會彈出一個自定義view,當時在公司做這個功能,被坑慘了,死活彈不出來,不響應.接下來看一下效果圖,程式碼有詳細註釋,進去之後把百度申請的祕鑰換成自己的.有一部分是檢測網路程式碼.這個不用管.程式碼如下:pu

植入地圖(一)——簡單顯示地圖

百度地圖 Android SDK是一套基於Android 2.1及以上版本裝置的應用程式介面,我們可以使用該套 SDK開發適用於Android系統移動裝置的地圖應用,通過呼叫地圖SDK介面,輕鬆訪問

Python爬取地圖API-查詢全國地址資訊-MySQL資料庫

1.採用轉檔案轉MySQL資料庫形式儲存內容 2.爬取速度不宜過快,太快容易失敗 程式碼如下: 先爬取並將其全部儲存至檔案中 import json, time import random import requests six_cities_list = ['北京

關於地圖 BMap.InfoWindow顯示最後一條資訊解決方法

今天遇到這個問題了。後面再網上搜搜,發現都是你抄我,我轉載你的,後來無意看到一篇文章,說是用閉包後來解決了。現在把問題解決方法發出來 [javascript] view plaincopyprint? function baiduMapFunction(div

地圖 迴圈載入marker並新增多個資訊視窗,解決只顯示最後一個視窗資訊的問題

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ShowNurseryInfo.aspx.cs"     Inherits="Bim5D_Web.Nursery.ShowNurseryInfo" %> <!DOCTY

Android整合地圖-----顯示地圖、定位、長按顯示地址資訊

一、基礎部分 轉載請註明出處:https://blog.csdn.net/Hunter2916/article/details/82867205 1、下載百度地圖的SDK 下載地址:http://lbsyun.baidu.com/index.php?title=android-locsd