百度地圖API圖標(biāo)左胞、文本寇仓、圖例與連線

百度地圖開放平臺(tái)功能強(qiáng)大,使用簡單烤宙,為地圖的自定義提供了非常方便的途徑遍烦!

本文以繪制一張全國機(jī)器輻射圖為例記錄其基本使用方法,效果如下圖:

圖中包括了帶圖標(biāo)和文本的標(biāo)注躺枕,連線以及圖例服猪。

1.關(guān)于坐標(biāo)

說到地圖,不得不說坐標(biāo)屯远。

我以為蔓姚,GPS獲取經(jīng)緯度之后,把經(jīng)緯度丟給地圖就可以了慨丐。但那真的是自以為坡脐。

1.1 坐標(biāo)系

來看看實(shí)際情況,以下是百度開發(fā)文檔里的描述:

目前國內(nèi)主要有以下三種坐標(biāo)系:

WGS84:為一種大地坐標(biāo)系房揭,也是目前廣泛使用的GPS全球衛(wèi)星定位系統(tǒng)使用的坐標(biāo)系备闲。

GCJ02:又稱火星坐標(biāo)系晌端,是由中國國家測繪局制訂的地理信息系統(tǒng)的坐標(biāo)系統(tǒng)。由WGS84坐標(biāo)系經(jīng)加密后的坐標(biāo)系恬砂。

BD09:為百度坐標(biāo)系咧纠,在GCJ02坐標(biāo)系基礎(chǔ)上再次加密。其中bd09ll表示百度經(jīng)緯度坐標(biāo)泻骤,bd09mc表示百度墨卡托米制坐標(biāo)漆羔。

非中國地區(qū)地圖,服務(wù)坐標(biāo)統(tǒng)一使用WGS84坐標(biāo)狱掂。

百度對外接口的坐標(biāo)系為BD09坐標(biāo)系演痒,并不是GPS采集的真實(shí)經(jīng)緯度,在使用百度地圖JavaScript API服務(wù)前趋惨,需先將非百度坐標(biāo)通過坐標(biāo)轉(zhuǎn)換接口轉(zhuǎn)換成百度坐標(biāo)鸟顺。

通過 GPS 獲取的為 WGS84,在百度地圖上使用前要轉(zhuǎn)換為 BD09器虾,百度提供了相應(yīng)的 api 進(jìn)行坐標(biāo)轉(zhuǎn)換讯嫂,文檔地址:http://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition

http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924&from=1&to=5&ak=s1eeiQEfDF0WZfdfvLgHbG2Ru49UNCrn

返回結(jié)果:
{
    status : 0,
    result :
    [
        {
            x : 114.23074871003,
            y : 29.579084787993
        } 
    ]
}

具體還可參考下這篇文章:https://www.cnblogs.com/yesicoo/p/4668642.html

1.2 坐標(biāo)拾取器

如果坐標(biāo)是靜態(tài)的,或測試用兆沙,可以直接通過百度地圖提供的“坐標(biāo)拾取器”工具來獲取經(jīng)緯度欧芽。

工具地址:http://api.map.baidu.com/lbsapi/getpoint/index.html

點(diǎn)哪就獲取哪的坐標(biāo),此坐標(biāo)不用再轉(zhuǎn)換葛圃,復(fù)制過來即可以使用渐裸。

2. 開始應(yīng)用

2.1 準(zhǔn)備圖標(biāo)

有好些站點(diǎn)可以下載圖標(biāo),如:https://easyicon.net装悲,可以獲取一些圖標(biāo)文件。至于商用的要求則要看看站點(diǎn)說明尚氛。

如下圖诀诊,這里準(zhǔn)備總部與機(jī)器的圖標(biāo)下載保存為 head.png、machine.png阅嘶。

2.2 開啟百度地圖

地圖API的使用需要先申請一個(gè) ak属瓣,為了體驗(yàn)方便,這里已經(jīng)申請了一個(gè)可以直接使用的 key讯柔,在頁面中可直接加入以下引用抡蛙。

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=s1eeiQEfDF0WZfdfvLgHbG2Ru49UNCrn"></script>

使用以下語句,定義全局的地圖對象

    // 百度地圖 API 功能對象
    var map = null;
    if (BMap) {
        map = new BMap.Map("allmap");  // id=allmap 的容器內(nèi)顯示
        map.enableScrollWheelZoom();
    }

2.2 標(biāo)注:圖標(biāo)與文本

標(biāo)注使用 BMap.Marker魂迄,可以為其指定 Icon與Label粗截。為了方便后續(xù)使用,本例定義以下函數(shù)捣炬,指定位置熊昌、圖標(biāo)(本例中可用已經(jīng)下載的圖標(biāo) head绽榛,machine)以及文本即可。

    /**
    * 指定經(jīng)緯度婿屹,圖標(biāo)灭美,標(biāo)注文本
    * 在地圖上添加標(biāo)注
    * longitude 經(jīng)度
    * latitude  緯度
    * icon      圖標(biāo)
    * text      標(biāo)注文本
    **/
    function addMarker(longitude, latitude, icon, text) {
        if (!map) return;

        var point = new BMap.Point(longitude, latitude); 
        var myIcon = new BMap.Icon(icon + ".png", new BMap.Size(32, 32));
        // 指定位置及標(biāo)注的圖標(biāo)
        var marker = new BMap.Marker(point, { icon: myIcon });  // 創(chuàng)建標(biāo)注
        if(text){
            var label = new BMap.Label(text, { offset: new BMap.Size(32, -16) });
            marker.setLabel(label);
        }
        // 添加到地圖上
        map.addOverlay(marker);          
    }

2.3 連線

連線實(shí)際使用的是繪制多邊形的功能,只是當(dāng)只指定了兩個(gè)點(diǎn)時(shí)昂利,就是一根線届腐。同樣,這里定義一個(gè)函數(shù)以方便直接調(diào)用蜂奸。

    /**
    * 指定起止經(jīng)緯度犁苏,繪制連接線
    * 
    * longitudeFrom 經(jīng)度
    * latitudeFrom  緯度
    * longitudeTo   經(jīng)度
    * latitudeTo    緯度
    **/
    function addLine(longitudeFrom, latitudeFrom, longitudeTo, latitudeTo) {
        if (!map) return;

        var pointFrom = new BMap.Point(longitudeFrom, latitudeFrom); 
        var pointTo = new BMap.Point(longitudeTo, latitudeTo); 
        // 可以指定多點(diǎn)連接,此處只考慮兩點(diǎn)
        var line = new BMap.Polyline([pointFrom, pointTo], { strokeWeight:1, strokeOpacity:0.5, strokeColor:"red" });
        // 添加到地圖上
        map.addOverlay(line);     
    }

2.4 圖例

圖例需要以地圖定義的控件方式來添加窝撵,在控件的 initialize 事件中完成 DOM 元素的生成即可傀顾,為了體現(xiàn)過程本身,以下函數(shù)把 DOM 的html文本作為參數(shù)碌奉,由外部靈活定義短曾。

    /**
    * 添加圖例
    * 實(shí)質(zhì)就是在地圖上添加自己的頁面元素 
    *
    * html 網(wǎng)頁元素
    **/
    function addLegend(html){
        var LegendControl = function () {
            this.defaultAnchor = BMAP_ANCHOR_TOP_LEFT;
            this.defaultOffset = new BMap.Size(10, 10);
        }

        LegendControl.prototype = new BMap.Control();
        LegendControl.prototype.initialize = function (map) {
            var le = $(html)[0];
            map.getContainer().appendChild(le);
            return le;
        };

        var legendCtrl = new LegendControl();
        map.addControl(legendCtrl);
    } 

2.5 綜合

有了以上函數(shù),綜合起來就流程清晰了赐劣。以下坐標(biāo)嫉拐,均通過坐標(biāo)拾取器獲取。

    // 機(jī)器類:經(jīng)度魁兼,緯度婉徘,名稱
    function Machine(longitude, latitude, name){
        this.longitude = longitude;
        this.latitude = latitude;
        this.name = name;
    } 

    // 確定地圖的中心位置與縮放級(jí)別
    var center = new BMap.Point(110.423997,31.40979);             
    map.centerAndZoom(center, 6);  // 級(jí)別 6,跨省視圖

    // 添加圖例咐汞,自由寫 html
    addLegend("<div style='font-size:12px; color:gray; width:140px; padding:5px; background:white; text-align:center; border:solid 1px gray;'>總部:<img src='head.png' style='width:16px; vertical-align:middle;' />&nbsp;&nbsp;設(shè)備:<img src='machine.png'  style='width:16px; vertical-align:middle;' /></div>");

    // 總部位置
    var head = { longitude : 112.918702343957, latitude : 28.30070516 };
    addMarker(head.longitude, head.latitude, 'head', '總部');

    // 所有機(jī)器位置
    var machineList = [
        new Machine(114.876143,38.113315,'石家莊'),
        new Machine(112.521289,37.822014,'太原'),
        new Machine(108.989008,34.328175,'西安'),
        new Machine(117.230997,31.881961,'合肥'),
        new Machine(103.984944,30.553819,'成都'),
        new Machine(108.400295,22.862517,'南寧'),
        new Machine(113.257181,23.169067,'廣州'),
        new Machine(120.174565,30.298715,'杭州'),
        new Machine(102.881106,24.959705,'昆明')
    ];

    // 添加所有機(jī)器并連線
    for(var i=0; i<machineList.length; i++){
        addMarker(machineList[i].longitude, machineList[i].latitude, 'machine', machineList[i].name);
        addLine(head.longitude, head.latitude, machineList[i].longitude, machineList[i].latitude);
    } 

3. 結(jié)語

本文完整代碼可從此處下載:

https://github.com/triplestudio/helloworld/blob/master/baidu_map_demo.html

在此基礎(chǔ)上盖呼,可以根據(jù)需要進(jìn)一步擴(kuò)展功能,具體參考百度地圖開放平臺(tái)開發(fā)文檔:

http://lbsyun.baidu.com/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末化撕,一起剝皮案震驚了整個(gè)濱河市几晤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌植阴,老刑警劉巖蟹瘾,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異掠手,居然都是意外死亡憾朴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門喷鸽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來众雷,“玉大人,你說我怎么就攤上這事”ㄇ唬” “怎么了株搔?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長纯蛾。 經(jīng)常有香客問我纤房,道長,這世上最難降的妖魔是什么翻诉? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任炮姨,我火速辦了婚禮,結(jié)果婚禮上碰煌,老公的妹妹穿的比我還像新娘舒岸。我一直安慰自己,他們只是感情好芦圾,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布蛾派。 她就那樣靜靜地躺著,像睡著了一般个少。 火紅的嫁衣襯著肌膚如雪洪乍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天夜焦,我揣著相機(jī)與錄音壳澳,去河邊找鬼。 笑死茫经,一個(gè)胖子當(dāng)著我的面吹牛巷波,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卸伞,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼抹镊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荤傲?” 一聲冷哼從身側(cè)響起髓考,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弃酌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體儡炼,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妓湘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乌询。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榜贴。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唬党,到底是詐尸還是另有隱情鹃共,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布驶拱,位于F島的核電站霜浴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蓝纲。R本人自食惡果不足惜阴孟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望税迷。 院中可真熱鬧永丝,春花似錦、人聲如沸箭养。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毕泌。三九已至喝检,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間懈词,已是汗流浹背蛇耀。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坎弯,地道東北人纺涤。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像抠忘,于是被迫代替她去往敵國和親撩炊。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容