WebApp如何调用百度地图API

一、百度地图API的应用场景和方法
百度地图接口有三种调用方式:
第一种是WEB浏览器端调用(H5);
第二种是Android;
第三种是IOS;
附上文档地址:
第一种当你调用API时会在浏览器端打开百度地图页面(Web和WebAPP打开后样子不同),后两种则是直接打开移动端的百度APP应用
以上三种调用方式其实都是通过调用百度地图来展示你要的导航或路径规划;如果你想在自己的应用里面嵌入地图或者类似百度地图功能,有两种方法:
第一种是利用百度javascript开发文档;
附上文档地址:http://lbsyun.baidu.com/index.php?title=jspopular
第二种使用组件化的百度地图,如果你使用VUE框架可以用 vue-baidu-map这个插件,适用于React,Angular的map组件我还没研究,直接用npm安装也行,script标签引入也可以;
附上文档地址:https://dafrok.github.io/vue-baidu-map/#/zh/index
不管以上那种方法,只要你想要调用百度地图API,就必须登录以下网址申请秘钥ak:
https://passport.baidu.com/v2/?login&u=http%3A%2F%2Flbsyun.baidu.com%2Fapiconsole%2Fkey%3Fapplication%3Dkey
二、功能的实现

1.要改变百度地图标注ICON图标

var map =new BMap.Map('container');  
map.centerAndZoom(new BMap.Point(116.380797, 39.918497), 18);  //其中18是地图放大的倍数
var icon = new BMap.Icon('pin.png', new BMap.Size(20, 32), {   //(20,30)是显示图标的范围,这个尺寸最好就是图标的大小,因为无法对图标进行缩放操作
//此处的icon路径必须是服务器上地址,不可以使用本地的图片(我试了好多次用本地都不可以)
    anchor: new BMap.Size(10, 30)  //偏移量
});
var mkr =new BMap.Marker(new BMap.Point(116.38075,39.918986), {  //Marker是一个用来往地图上添加点标记的类。
    icon: icon  //Marker的构造函数的参数为Point和MarkerOptions(可选)
});  
map.addOverlay(mkr); 

其中 上面 anchor表示 即定位点距离图片左上角的偏移量

// 向地图添加标注
    for( var i = 0;i < points.length; i++){
        var myIcon = new BMap.Icon("http://7xic1p.com1.z0.glb.clouddn.com/markers.png", new BMap.Size(23, 25), {
            // 指定定位位置
            offset: new BMap.Size(10, 25),
            // 当需要从一幅较大的图片中截取某部分作为标注图标时,需要指定大图的偏移位置   
            imageOffset: new BMap.Size(0, 0 - i * 25) // 设置图片偏移  
        });
        var point = new BMap.Point(points[i][0],points[i][1]);
        // 创建标注对象并添加到地图 
        var marker = new BMap.Marker(point,{icon: myIcon});
        map.addOverlay(marker);
    };

2.路径规划

目前百度没有向外提供多目的地路径规划的接口,即多目的地的最优路径,现在百度API仅有两点之间的路径规划。所以这个功能目前我还没有找到实现方法。

3.关闭百度默认的POI信息点。

一开始接触地图,我都不晓得什么是POI,最后才知道是下图的这个东东


image.png
var map = new BMap.Map("allmap", {enableMapClick:false});//构造底图时,关闭底图可点功能

4.地址转码

WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
GCJ02:又称火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标。
非中国地区地图,服务坐标统一使用WGS84坐标。
如果你是用的手机自带GPS定位,则使用WGS84坐标,而百度对外接口的坐标系为BD09坐标系,所以如果你调用的是手机GPS定位,又想让其显示在百度地图上,那么必须先将原始坐标转化成百度地图的坐标。
参见例子:http://lbsyun.baidu.com/jsdemo.htm#a5_2

5.定位

由于不是正式的app形式,只能通过html5的地理定位方法去获取。html5 geolocation 特性可以实现浏览器定位,百度API对其进行了封装,代码如下:

var geolocation = new BMap.Geolocation(); //实例化浏览器定位对象。
    geolocation.getCurrentPosition(function(r) {
        if(this.getStatus() == BMAP_STATUS_SUCCESS) {
        var mk = new BMap.Marker(r.point);
            getAddress(r.point);
        } else {
            alert('failed' + this.getStatus());
        }
    });
    //获取地址信息,设置地址label
    function getAddress(point) {
        var gc = new BMap.Geocoder();
        gc.getLocation(point, function(rs) {
            console.log(point)
        var addComp = rs.addressComponents;
            var address = addComp.province + addComp.city + addComp.district + addComp.street +           addComp.streetNumber; //获取地址
      //console.log(addComp.province + addComp.city);

      });
}
//关于状态码

//BMAP_STATUS_SUCCESS
检索成功。对应数值“0”。

//BMAP_STATUS_CITY_LIST
城市列表。对应数值“1”。

//BMAP_STATUS_UNKNOWN_LOCATION
位置结果未知。对应数值“2”。

//BMAP_STATUS_UNKNOWN_ROUTE
导航结果未知。对应数值“3”。

//BMAP_STATUS_INVALID_KEY
非法密钥。对应数值“4”。

//BMAP_STATUS_INVALID_REQUEST
非法请求。对应数值“5”。

//BMAP_STATUS_PERMISSION_DENIED
没有权限。对应数值“6”。(自 1.1 新增)

//BMAP_STATUS_SERVICE_UNAVAILABLE
服务不可用。对应数值“7”。(自 1.1 新增)

//BMAP_STATUS_TIMEOUT
超时。对应数值“8”。(自 1.1 新增)

6.添加信息窗口

vue中使用采用全局注册
全局注册将一次性引入百度地图组件库的所有组件,然后在各个页面可以直接使用

import Vue from 'vue'
import BaiduMap from 'vue-baidu-map'

Vue.use(BaiduMap, {
// ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */
ak: 'YOUR_APP_KEY'
})

<baidu-map class="map" :center=center :zoom="15">
    <bm-marker :position=center animation="BMAP_ANIMATION_BOUNCE"  @click="infoWindowOpen">
      <bm-info-window :position=center :show="infoWindow.show" @close="infoWindowClose" @open="infoWindowOpen">
          <div>
            <ul class="list" v-show="point.deviceType == 1">
                <li ><i>开合状态:{{point.angle_1 | angle_1Fil}}</i></li>
              <li ><i>电压量:{{point.battery}}V</i></li>
              </ul>         
          </div>
      </bm-info-window>
  </bm-marker>
</baidu-map>

//methods:
infoWindowClose(e) {
    this.infoWindow.show = false
},
infoWindowOpen(e) {
    this.infoWindow.show = true
},

JS API :下面代码为多点添加信息窗体

let map = new BMap.Map("amap");
let point = new BMap.Point(this.points[0].lng, this.points[0].lat);
map.centerAndZoom(point, 15);
let pointArray = new Array();
for(let i=0;i<this.points.length;i++){
    let imgUrl = "http://*********/img/"+this.points[i].imgUrl;
    let myIcon =  new BMap.Icon(imgUrl, new BMap.Size(100, 100), {  
          //offset: new BMap.Size(10, 25), // 指定定位位置  一般只有icon图片为雪碧图时用到
         // imageOffset: new BMap.Size(0, 0 - 10 * 25) // 设置图片偏移  
         });  
        let marker = new BMap.Marker(new BMap.Point(this.points[i].lng, this.points[i].lat),{icon:myIcon}); // 创建点
        // 创建信息窗口对象
        addClickHandler(this.points[i],marker);
        map.addOverlay(marker);    //增加点
        pointArray[i] = new BMap.Point(this.points[i].lng, this.points[i].lat);
        marker.addEventListener("click",attribute);
}
//让所有点在视野范围内
map.setViewport(pointArray);
//获取覆盖物位置
function attribute(e){
    var p = e.target;
    //alert("marker的位置是" + p.getPosition().lng + "," + p.getPosition().lat);    
}   
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);
    var sContent ='<div>'
        +'<ul class="list">'
        +'<li style="width: 4.3rem;height: 0.78rem;line-height: 0.78rem;border-bottom: 1px solid #ccc;"><i>开合状态:' + status + '</i></li>'
        +'</ul>'
        +'</div>';
    var infoWindow = new BMap.InfoWindow(sContent); // 创建信息窗口对象 
    map.openInfoWindow(infoWindow,point); //开启信息窗口
}
  

7.查询两点间路径并进行导航

a.原生APP则可以直接调起百度地图APP来实现;
参见文档:http://lbsyun.baidu.com/index.php?title=uri/api/android
b.WebAPP则可以调起浏览器百度API实现,

http://api.map.baidu.com/direction?origin=latlng:34.264642646862,108.95108518068|name:我家&destination=大雁塔&mode=driving&region=西安&output=html&src=yourCompanyName|yourAppName
//调起百度PC或Web地图,展示"西安市"从(lat:34.264642646862,lng:108.95108518068 )"我家"到"大雁塔"的驾车路线。

其中目的地也可以用经纬度描述,类同origin;region参数也必须要有

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

推荐阅读更多精彩内容