百度地图API入门使用

百度地图js开发API

本文将结合具体项目案例,带你初步认识百度地图API的使用方法

部分项目需求
  • 中间为地图区,地图区上显示的点位与左侧检索区对应
  • 配电箱状态为报警时,点位跳动,图标变为红色
  • 定时更新配电箱状态,界面上的点相应更新
  • 点击左侧检索结果的配电箱,或者点击地图区配电箱图标,在地图区显示配电箱详细信息
设计稿
效果图.jpg
具体操作
  1. 引入js
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script>

关于如何申请密钥请参照百度地图API密钥申请

  1. 初始化地图,设置中心点等参数。
var map = new BMap.Map("allmap");// 创建Map实例。
//'allmap'为html节点的id,建议放于body节点下
var pointCenter = new BMap.Point(120.204892, 30.161293); //创建点
map.centerAndZoom(pointCenter, 12); //中心点
map.enableScrollWheelZoom(true);  //支持鼠标滚动缩放

地图中心点也可以直接使用城市名称。后面的数字为深度,12表示市级深度

map.centerAndZoom('杭州', 12);
  1. 调用查询接口,返回配电箱列表信息,获取每个配电箱的经纬度,并在地图上创建点。如果配电箱状态为报警,则让该点跳动
var point = new BMap.Point(lo, la); //创建点
var marker = new BMap.Marker(point);  // 创建标注
map.addOverlay(marker);               // 将标注添加到地图中

if(该配电箱处于报警状态){
marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
}

  1. 在第一次获取配电箱列表后已经生成了所有的点,而点的坐标从始至终都是不变的,所以在更新状态的时候,并不需要重绘,只需要替换点的图标即可。
//第一次创建点,为其生成默认图标
var myIcon = new BMap.Icon("../statics/images/map/box0.png", new BMap.Size(300,157));   //创建Icon对象
marker = new BMap.Marker(point,{icon:myIcon});  // 创建标注,设置icon

//更新状态时,若状态改变,则替换图标
 if (//配电箱不在线) {
    var icon = marker.getIcon(); //获取icon对象
    icon.setImageUrl('../statics/images/map/box0.png'); //修改图标
 }
  1. 如果说页面内的点相对 较分散,可以使用点聚合
  • 首先是引入扩展链接
<script type="text/javascript" src="http://api.map.baidu.com/library/TextIconOverlay/1.2/src/TextIconOverlay_min.js"></script>
<script type="text/javascript" src="http://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></script>
  • 调用markerClusterer类即可
var markers = [];
for (; i < MAX; i++) {
     pt = new BMap.Point(Math.random() * 40 + 85, Math.random() * 30 + 21);
     markers.push(new BMap.Marker(pt));
}
//最简单的用法,生成一个marker数组,然后调用markerClusterer类。
var markerClusterer = new BMapLib.MarkerClusterer(map,{markers:markers});
点聚合.png

若页面中点很多,会造成页面卡顿,这种情况不建议使用点聚合

  1. 为点注册点击事件,并创建信息窗口
var content = "<div>这是一个信息窗口内容</div>"
var opts = {
            width : 250,     // 信息窗口宽度
            height: 80,     // 信息窗口高度
            title : "信息窗口" , // 信息窗口标题
            enableMessage:true//设置允许信息窗发送短息
};

var infoWindow = new BMap.InfoWindow(content,opts);  // 创建信息窗口对象 
marker.addEventListener("click", function(){          
        map.openInfoWindow(infoWindow,point); //开启信息窗口
});

  1. 为多个点创建信息窗口
 var data_info = [[116.417854,39.921988,"地址:北京市东城区王府井大街88号乐天银泰百货八层"],
                 [116.406605,39.921585,"地址:北京市东城区东华门大街"],
                 [116.412222,39.912345,"地址:北京市东城区正义路甲5号"]
];
var opts = {
            width : 250,     // 信息窗口宽度
            height: 80,     // 信息窗口高度
            title : "信息窗口" , // 信息窗口标题
            enableMessage:true//设置允许信息窗发送短息
           };

for(var i=0;i<data_info.length;i++){
        var marker = new BMap.Marker(new BMap.Point(data_info[i][0],data_info[i][1])); 
        var content = data_info[i][2]; //窗口内容
        map.addOverlay(marker);               
        addClickHandler(content,marker);    //为多个点注册事件
}
function addClickHandler(content,marker){
        marker.addEventListener("click",function(e){
            openInfo(content,e)}
        );
}
function openInfo(content,e){
        var p = e.target;
        //获取当前点击的点的坐标
        var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);
        map.panTo(point); //窗口移动到该点
        var infoWindow = new BMap.InfoWindow(content,opts);  // 创建信息窗口对象 
        map.openInfoWindow(infoWindow,point); //开启信息窗口
}
  1. 其他
    在完成核心功能后,还能在此基础上做一些优化
  • 将生成的所有点都显示在视图窗口内
map.setViewport(pointArray);
  • 选中某个配电箱,打开信息窗口,就将该配电箱移动至视图中央
map.panTo(point); //窗口移动到该点

持续更新

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,111评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,656评论 18 139
  • 因为要做一个地图操作的项目,需要用到这个地图库,但是查询官方API麻烦,而且这个地图框架的API做的用起来确实太麻...
    虚幻的锈色阅读 33,890评论 1 15
  • LBS 位置服务 基于位置的服务,它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(...
    景岳阅读 970评论 1 0
  • 高尔基说过:“谁爱孩子,孩子就爱他。只有爱孩子的人,才可以教育孩子。”要建立良好的师生关系,真诚地、由衷地热...
    宁静致远140702阅读 370评论 0 1