百度地图API调用

调用百度地图的API可以非常方便的实现我们需要的地图的功能,今天研究了一下调用百度地图API,显示定位信息、地图标注、路径导航等问题处理起来真的很方便。功能很强大,调用也很方便, 可以实现的功能非常多,有一点要注意:调用API要有一个开发者密钥,申请过程十分简单。

  1. 申请ak:调用百度地图API,首先你需要得在官网注册一个帐号然后申请一个密钥,注册网址:http://lbsyun.baidu.com/,在打开网页的最下方可以申请密钥
  2. 如果只是想在浏览器及本地测试,创建应用类型选择为:浏览器端,Referer白名单输入:*
  3. 提交完成后,就会得到一个密钥,在调用百度地图API的时候需要将“你的密钥”替换为你申请得到的密钥

官方文档有很详细的说明和示例,可以参照示例将各个功能以及代码进行组合,实现你想要的效果,这里给出一个简单的 demo,简单的加了几个按钮,可以直接复制粘贴到本地 html 文件,用浏览器打开就可以看到效果。(记得替换密钥哦)

html 完整示例源码:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
        body, html{width: 100%;height: 100%;margin:0;font-family:"微软雅黑";}
        #allmap{height:600px;width:1200px;}
        #r-result{width:100%; font-size:14px;}
    </style>
        <!-- 设置地图ak, api key 申请的密钥 -->
        <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的密钥"></script>   
    <title>百度地图调用</title>
</head>
<body>
    <div id="allmap" ></div>
    <input type="button" onclick="$('#allmap div.anchorBL').hide();" value="移除地图LOGO和版权说明(不建议使用)"/> 
    <input type="button" onclick="addYourCopyright()" value="自定义版权说明"/> 
    <input type="button" onclick="showSZ()" value="深圳市区域轮廓"/> 
    <input type="button" onclick="showSH()" value="切换到上海市"/> 
    <input type="button" onclick="addWalking()" value="步行路线图" />
    <input type="button" onclick="addGeolocation()" value="定位控件" />
    <input type="button" onclick="addCities()" value="城市列表控件" />
    <input type="button" onclick="changeThemeDark()" value="切换显色主题" />
        <div id="r-result">
        <input type="button" onclick="add_control();" value="添加缩放控件" />
        <input type="button" onclick="delete_control();" value="删除缩放控件" />
        <input type="button" onclick="showOver()" value="显示带标注marker" />
        <input type="button" onclick="hideOver()" value="隐藏带标注marker" />
        <input type="button" onclick="marker.enableDragging();" value="可拖拽" />
        <input type="button" onclick="marker.disableDragging();" value="不可拖拽" />
        <input type="button" onclick="showVectorMarker()" value="显示VectorMarker" />
        <input type="button" onclick="hideVectorMarker()" value="隐藏VectorMarker" /><br>
        <input type="button" onclick="showYourMarker()" value="显示自定义Marker" />
        <input type="button" onclick="hideYourMarker()" value="隐藏自定义Marker" />
        <input type="button" onclick="addTenMarkers()" value="添加10个标注" />
        <input type="button" onclick="addTenRandomMarkers()" value="随机添加10个标注" /><br>

        城市名: <input id="cityName" type="text" style="width:100px; margin-right:10px;" />
        <input type="button" value="查询" onclick="theLocation()" />
    </div>
    
</body>
</html>
<script src="https://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript">
    // 百度地图API功能
    var map = new BMap.Map("allmap");
    var point = new BMap.Point(114.04254,22.561866);
    map.centerAndZoom(point,15);
    
    // 初始化地图,用城市名设置地图中心点,显示比例级别
    function showSH(){map.centerAndZoom("上海",15); }
 
    function theLocation(){
        var city = document.getElementById("cityName").value;
        if(city != ""){
            map.centerAndZoom(city,15);      // 用城市名设置地图中心点,显示比例级别
        }
    }
           
    //设置地图样式 dark
    function changeThemeDark(){ map.setMapStyle({style : "dark" });}

    
    //鼠标滚动缩放
    map.enableScrollWheelZoom(true);
    
    
    
    //行政区域轮廓
    function getBoundary(){       
    var bdary = new BMap.Boundary();
    bdary.get("深圳市", function(rs){       //获取行政区域
        map.clearOverlays();        //清除地图覆盖物       
        var count = rs.boundaries.length; //行政区域的点有多少个
        if (count === 0) {
            alert('未能获取当前输入行政区域');
            return ;
        }
        var pointArray = [];
        for (var i = 0; i < count; i++) {
            var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#ff0000"}); //建立多边形覆盖物
            map.addOverlay(ply);  //添加覆盖物
            pointArray = pointArray.concat(ply.getPath());
        }    
        map.setViewport(pointArray);    //调整视野  
        addlabel();               
    });   
    }

    //深圳行政区域轮廓
    function showSZ(){
         getBoundary();
    }
    //setTimeout(function(){
    //  getBoundary();
    //}, 2000);
    
    
    //百度地图级别有19级,级别 比例尺
    //  19级 20m
    //  18级 50m
    //  17级 100m
    //  16级 200m
    //  15级 500m
    //  14级 1km
    //  13级 2km
    //  12级 5km
    //  11级 10km
    //  10级 20km
    //  9级  25km
    //  8级  50km
    //  7级  100km
    //  6级  200km
    //  5级  500km
    //  4级  1000km
    //  3级  2000km
    //  2级  5000km
    //  1级  10000km


     //在地图上添加图片文字等信息(版权控件)
     //Copyright(id,content,bounds)类作为CopyrightControl.addCopyright()方法的参数
    var cr = new BMap.CopyrightControl({anchor: BMAP_ANCHOR_TOP_RIGHT});   //设置版权控件位置
    //添加版权控件
    function addYourCopyright(){map.addControl(cr); }
    var bs = map.getBounds();   //返回地图可视区域
    cr.addCopyright({id: 1, content: "<a href='#' style='font-size:20px;background:yellow'>我是自定义版权控件</a>", bounds: bs});   
    
       // var cr=new BMap.CopyrightControl({anchor:BMAP_ANCHOR_TOP_LEFT,offset:new BMap.Size(0,0)});
       // map.addControl(cr);
        //cr.addCopyright({id:1,content:"<img src='banner.png' style='width:800px; height:50px' />"});    //需要更改为你的图片地址和名称
 
 
       // 初始化地图, 设置中心点坐标和地图级别
    //map.centerAndZoom(new BMap.Point(116.4035,39.915),15); 
    //setTimeout(function(){
    //  map.setZoom(14);   
    //}, 2000);  //2秒后放大到14级
    
    
    var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});// 左上角,添加比例尺
    var top_left_navigation = new BMap.NavigationControl();  //左上角,添加默认缩放平移控件
    var top_right_navigation = new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_RIGHT, type: BMAP_NAVIGATION_CONTROL_SMALL}); //右上角,仅包含平移和缩放按钮
    /*缩放控件type有四种类型:
    BMAP_NAVIGATION_CONTROL_SMALL:仅包含平移和缩放按钮;BMAP_NAVIGATION_CONTROL_PAN:仅包含平移按钮;BMAP_NAVIGATION_CONTROL_ZOOM:仅包含缩放按钮*/
    
    //添加控件和比例尺
    function add_control(){
        map.addControl(top_left_control);        
        map.addControl(top_left_navigation);     
        map.addControl(top_right_navigation);    
    }
    //移除控件和比例尺
    function delete_control(){
        map.removeControl(top_left_control);     
        map.removeControl(top_left_navigation);  
        map.removeControl(top_right_navigation); 
    }
    
    
     // 添加定位控件
  var geolocationControl = new BMap.GeolocationControl();
  geolocationControl.addEventListener("locationSuccess", function(e){
    // 定位成功事件
    var address = '';
    address += e.addressComponent.province;
    address += e.addressComponent.city;
    address += e.addressComponent.district;
    address += e.addressComponent.street;
    address += e.addressComponent.streetNumber;
    alert("当前定位地址为:" + address);
  });
  geolocationControl.addEventListener("locationError",function(e){
    // 定位失败事件
    alert(e.message);
  });
  //添加定位到地图
  function addGeolocation(){map.addControl(geolocationControl);}

  
  
  //城市列表
  function addCities(){
    var size = new BMap.Size(10, 20);
    map.addControl(new BMap.CityListControl({
    anchor: BMAP_ANCHOR_TOP_LEFT,
    offset: size,
    // 切换城市之间事件
    // onChangeBefore: function(){
    //    alert('before');
    // },
    // 切换城市之后事件
    // onChangeAfter:function(){
    //   alert('after');
    // }
    }));
    
  }

    
    
    var marker = new BMap.Marker(new BMap.Point(114.04254,22.561866)); // 创建点
    map.addOverlay(marker);  
    //marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
    
    marker.disableDragging();// 不可拖拽
    
    //获取marker的位置
    marker.addEventListener("click",getAttr);
    function getAttr(){
        var p = marker.getPosition();       //获取marker的位置
        alert("marker的位置是" + p.lng + "," + p.lat);   
    }
    
    
    
    //创建小狐狸
    var pt = new BMap.Point(114.04111,22.561744);
    var myIcon = new BMap.Icon("http://lbsyun.baidu.com/jsdemo/img/fox.gif", new BMap.Size(300,157));
    var marker2 = new BMap.Marker(pt,{icon:myIcon});  // 创建标注
     // 将标注添加到地图中
     map.addOverlay(marker2);
     marker2.hide();
    function showYourMarker(){marker2.show();}
    function hideYourMarker(){marker2.hide();}
    
    
    var marker3 = new BMap.Marker(new BMap.Point(114.04000,22.561600));  // 创建标注
    map.addOverlay(marker3);   
    var label = new BMap.Label("我是文字标注哦",{offset:new BMap.Size(20,-10)});
    marker3.setLabel(label);
    marker3.hide();
    function showOver(){
        marker3.show();
    }
    function hideOver(){
        marker3.hide();
    }
    
    
    // 编写自定义函数,创建标注
    function addMarker(point){
      var marker = new BMap.Marker(point);
      map.addOverlay(marker);
    }
    // 随机向地图添加10个标注
    function addTenRandomMarkers(){
        var bounds = map.getBounds();
        var sw = bounds.getSouthWest();
        var ne = bounds.getNorthEast();
        var lngSpan = Math.abs(sw.lng - ne.lng);
        var latSpan = Math.abs(ne.lat - sw.lat);
        
        for (var i = 0; i < 10; i ++) {
            var point = new BMap.Point(sw.lng + lngSpan * (Math.random() * 0.7), ne.lat - latSpan * (Math.random() * 0.7));
            addMarker(point);
        }
    }
    
    // 向地图添加10个标注
    function addTenMarkers(){
        var longS = 114.04554;
        var latS = 22.561666;
        for (var i = 0; i < 10; i ++) {
             var point = new BMap.Point(longS + 0.001*i, latS + 0.0001*i);
             addMarker(point);
             
        }
    }
    
    
    
    //设置marker图标为水滴矢量图标
    var vectorMarker = new BMap.Marker(new BMap.Point(point.lng,point.lat-0.0003), {
    // 指定Marker的icon属性为Symbol
        icon: new BMap.Symbol(BMap_Symbol_SHAPE_POINT, {
        scale: 1.2,//图标缩放大小
        fillColor: "blue",//填充颜色
        fillOpacity: 0.8//填充透明度
            })
    });
    map.addOverlay(vectorMarker);
    vectorMarker.hide();
    function showVectorMarker(){vectorMarker.show();}
    function hideVectorMarker(){vectorMarker.hide();}
    vectorMarker.enableDragging();// 可拖拽
        //获取marker的位置
    vectorMarker.addEventListener("click",getAttr);
    function getAttr(){
        var p = vectorMarker.getPosition();       //获取vectorMarker的位置
        alert("vectorMarker的位置是" + p.lng + "," + p.lat);   
    }
    
    
    
    //步行线路图
    var walking = new BMap.WalkingRoute(map, { 
        renderOptions: { 
            map: map, 
            autoViewport: true 
        }
    });
    var start = new BMap.Point(114.038143,22.547901);
    var end = new BMap.Point(114.053495,22.548226);
    function addWalking(){ walking.search(start, end);}
   


</script>

效果图:

map.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容