百度地图使用

最近要在微信增加地图功能,尝试了一下百度地图。下面仅对自己用到的功能进行了简单整理,方便自己查阅使用。

官方文档已经十分详细,更多信息可以直接查看:
概述:http://lbsyun.baidu.com/index.php?title=jspopular
示例:http://developer.baidu.com/map/jsdemo.htm
类参考:http://developer.baidu.com/map/reference/index.php



整理内容:

一、获取AK,引入JS文件
二、基本使用
1、创建地图、添加控件、设置中心点与缩放比例
2、坐标点
3、不同标准的坐标点转换
4、获取两点间距离
5、操作标注(类似DOM的操作)
6、添加事件:使用addEventListener绑定
三、坐标与路名的转换:Geocoder
四、关键字查询:LocalSearch
五、消息窗口
1、普通消息窗口
2、带检索功能的消息窗口
六、路线规划:步行、驾车、公交
七、云lbs数据:LocalSearch可以搜索自定义的数据
八、其它


一、获取AK,引入JS文件

1、注册账号,登陆百度地图API控制台 http://lbsyun.baidu.com/apiconsole/key
2、创建应用(类别:服务端),获取AK。IP范围按实际情况设置。
嫌麻烦就直接 0.0.0.0/0
3、引入JS文件:

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

二、基本使用:

1、创建地图、添加控件、设置中心点与缩放比例

<div id='map'></div>

<script>
//传入div的id值
var map = new BMap.Map("map");

//添加 地图类型(地图、卫星、三维) 控件
map.addControl(new BMap.MapTypeControl());

//添加 缩放地图的 + - 控件
map.addControl(new BMap.NavigationControl({type: BMAP_NAVIGATION_CONTROL_ZOOM}));

//设置中心点与缩放比例
map.centerAndZoom(point, zoom);  //zoom范围1-19,其中19的比例尺最小
</script>

2、坐标点:

坐标点是地图中最为常用的一个东西,几乎所有的内容都需要依靠坐标点来指定。
注意:此处的经纬度需要是百度标准的。

var lng = 120;  //经度
var lat = 30;  //纬度
var point = new BMap.Point(lng, lat);

3、不同标准的坐标点转换:

如果获取到的坐标不是百度标准,需要进行转换,否则会导致位置的偏移。
(比如获取到 GPS坐标:wgs84标准 火星坐标:gcj02标准)

//获取到 wgs84标准的坐标点
var lng_wgs84 = 120;
var lat_wgs84 = 30;
var point_wgs84 = new BMap.Point(lng_wgs84, lat_wgs84);

var convertor = new BMap.Convertor();
//第二个参数是原标准,第三个参数是新标准
//1--wgs84  5--bd09ll
convertor.translate(new Array(point_wgs84), 1, 5, function (data) {
    if (data.status === 0) {
       data.points[0];  // data.points[n] 转换成功后的坐标点
    }
});

4、获取两点间距离:

var distance = map.getDistance(point1, point2);

5、操作标注(类似DOM的操作):

//生成坐标点
var point = new BMap.Point(lng, lat);

//根据坐标点 创建标注
var marker = new BMap.Marker(point);  //默认样式
var marker = new BMap.Marker({icon:new BMap.Icon("url", new BMap.Size(10, 10))});  //自定义图标

//给标注增加文本框(类似DOM的文本节点)
var Label = new BMap.Label("title", {offset: new BMap.Size(0, -20)});  //文本框
marker.setLabel(Label);

//设置标注是否可以 拖拽
marker.enableDragging();  //可拖拽
marker.disableDragging();  //不可拖拽

//添加到地图上(类似DOM 将新节点加入到页面中)
map.addOverlay(marker);

//删除标注:
map.removeOverlay(marker);  //删除具体标注
map.clearOverlays();  //删除所有覆盖物(除了删除标注,还会删除其它内容)

6、添加事件:使用addEventListener绑定

//地图 点击事件
map.addEventListener("click", function(e){});

//标注 点击事件
marker.addEventListener("click", function(e){
  //event.stopPropagation();  //可以防止事件冒泡
});

//标注 拖拽(结束)事件:
marker.addEventListener("dragend", function (type, target, pixel, point) {
    //type.point  拖拽后的点
});

三、坐标与路名的转换:Geocoder

//创建 Geocoder对象
var geocoder = new BMap.Geocoder();

// 坐标-->路名:
geocoder.getLocation(point, function (geocoder_result) {
    geocoder_result.address;
}

// 路名-->坐标:
geocoder.getPoint(address, function (point) {
    if(point){  //注意:可能解析失败
        //具体操作
    }
}, "上海市");

四、关键字查询:LocalSearch

var local = new BMap.LocalSearch(map, {
    onSearchComplete: function(results){
        console.log(local.getStatus());  //返回查询是否成功  BMAP_STATUS_SUCCESS == 0
        console.log(results.getNumPois());  //返回结果总数
        console.log(results.getCurrentNumPois());  //返回当前页结果总数 默认10
        console.log(results.getPoi(0));  //返回具体第几条数据
        console.log(results.getPoi(1));

        if (local.getStatus() == BMAP_STATUS_SUCCESS){
            //查询成功,具体操作
            for (i = 0; i < results.getCurrentNumPois(); i++) {
                 results.getPoi(i).point;
                results.getPoi(i).title;
            }
        }
    }
});
local.setPageCapacity(100);  //设置 一次返回最大数量 最大为100
local.searchNearby('key_word', point, 1000);  //设置范围 point的1000米内
local.searchNearby('key_word', point);  //第三个参数为空,则为最近的

五、消息窗口:

1、普通消息窗口:

//其中content完全可以写入 html内容 比如 button等
var infoWindow = new BMap.InfoWindow("content", {width: 200, height: 200});
map.openInfoWindow(infoWindow, point);  //在point位置显示出来

2、带检索功能的消息窗口(功能多点):需要多引入文件

<script type="text/javascript" src="http://api.map.baidu.com/library/SearchInfoWindow/1.5/src/SearchInfoWindow_min.js"></script>
<link rel="stylesheet" href="http://api.map.baidu.com/library/SearchInfoWindow/1.5/src/SearchInfoWindow_min.css" />
var searchInfoWindow = new BMapLib.SearchInfoWindow(map, 'content', {
    title  : "title",
    width  : 200,
    height : 20,
    panel  : "panel",  //检索结果面板 div 的 id
    enableAutoPan : true,     //自动平移
    searchTypes : [  //设置功能内容
        BMAPLIB_TAB_SEARCH,    //周边检索
        BMAPLIB_TAB_TO_HERE,   //到这里去
        BMAPLIB_TAB_FROM_HERE  //从这里出发
    ]
});
searchInfoWindow.open(marker/point);  //传入显示的位置:marker或point

六、路线规划:步行、驾车、公交

//在下一次的查询前,手动清除上一次的路线(覆盖物)
map.clearOverlays();  //或者自定义清除方式

//步行路线
var walking_route = new BMap.WalkingRoute(map, {
    renderOptions: {
        map: map,
        panel: "map_route",  //路线 文字版显示位置:div的id值
        autoViewport: true
    }
});
walking_route.search(point_departure, point_destination);  //起点, 终点

//驾车路线
//BMAP_DRIVING_POLICY_LEAST_TIME  0  最少时间
//BMAP_DRIVING_POLICY_LEAST_DISTANCE  1  最短距离
//BMAP_DRIVING_POLICY_AVOID_HIGHWAYS  2  避开高速
var driving = new BMap.DrivingRoute(map, {
    renderOptions: {
        map: map,
        panel: "map_route",  //路线 文字版显示位置:div的id值
        autoViewport: true
    }, policy: 0  //规则
});
driving.search(point_departure, point_destination);  //起点, 终点

//公交路线
//BMAP_TRANSIT_POLICY_LEAST_TIME  0  最少时间
//BMAP_TRANSIT_POLICY_LEAST_TRANSFER  2  最少换乘
//BMAP_TRANSIT_POLICY_LEAST_WALKING  3  最少步行
//BMAP_TRANSIT_POLICY_AVOID_SUBWAYS  4  不乘地铁
var transit = new BMap.TransitRoute(map, {
    renderOptions: {
        map: map,
        panel: "map_route"  //路线 文字版显示位置:div的id值
    }, policy: 0  //规则
});
transit.search(point_departure, point_destination);  //起点, 终点


//可以单独设置规则:比如在下拉框中进行选择:
driving.setPolicy(n);
transit.setPolicy(n);

七、云lbs数据:LocalSearch可以搜索自定义的数据

1、添加数据:
API控制面板--数据管理平台:http://lbsyun.baidu.com/data/mydata
创建表,编辑具体需要的坐标点信息
2、需要选择:是否将数据发布至云检索
3、根据表ID进行搜索

localsearch.searchNearby('keyword', point, 999, {customData: {geotableId: 123456}});

八、其它:

1、因为用在微信端,微信JS来定位,所以上面没有涉及百度地图的定位。
2、去除百度地图的logo图标:隐藏图标的div

.anchorBL {
    display: none;
}

3、使用Geocoder类进行坐标与路名的转换,只能取得具体的路名(xx路xx号),而没有地点名(xx大楼)。
如果需要后者,得用LocalSearch。
4、标注的跳动动画,在移动端尝试无效果。

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

推荐阅读更多精彩内容