最近在项目中在添加客户功能时需要实现对客户地址进行地图选址的功能,包括添加页面的选址以及编辑页面的地址定位。现将第一次使用的心得记录下来。首先搜索百度地图的官网“http://lbsyun.baidu.com/”。找到“开发文档——web开发——JavaScript ApI”。在API文档中有详细的开发步骤和相关的Demo。

第一步:  申请百度账号和ak。应用名称可以自己随便取一个名字,只要符合其命名规范即可。应用类型需要选择浏览器端。由于是本地自己使用,我就将白名单设为*。点击提交去激活。激活成功后就会获得相关的ak。

第二步:将javaScript文件引入到我们的页面当中来。

  1. <script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=您的密钥"></script>

第三步:创建地图容器元素。地图需要一个HTML元素作为容器,这样才能展现到页面上。这里我们创建了一个div元素。

  1. <div id="container"></div>
第四步:位于BMap命名空间下的Map类表示地图,通过new操作符可以创建一个地图实例。其参数可以是元素id也可以是元素对象。
  1. var map = new BMap.Map("BDMap",{enableMapClick: false});

注意:

1.在调用此构造函数时应确保容器元素已经添加到地图上。

2.命名空间 API使用BMap作为命名空间,所有类均在该命名空间之下,比如:BMap.Map、BMap.Control、BMap.Overlay。

3.第一个参数“BDMap”表示在id为BDMap的容器内添加一个地图。第二个参数主要为了防止选址时出现相关公交线路信息。如下所示。

第五步:设置地图中心点

这里我们使用BMap命名空间下的Point类来创建一个坐标点。Point类描述了一个地理坐标点,其中116.404表示经度,39.915表示纬度。(为天安门坐标)

  1. var point = new BMap.Point(116.404, 39.915);

请注意:在使用百度地图JavaScript API服务时,需使用百度BD09坐标,如使用其他坐标( WGS84、GCJ02)进行展示,需先将其他坐标转换为BD09,详细说明请参考坐标转换说明,请勿使用非官方的转换方法!!!

第六步:地图初始化,同时设置地图展示级别

在创建地图实例后,我们需要对其进行初始化,BMap.Map.centerAndZoom()方法要求设置中心点坐标和地图级别。 地图必须经过初始化才可以执行其他操作。

  1. map.centerAndZoom(point, 15);

注意:这里的point也可以使用String来代替,例如“北京”,这样的话zoom就会根据center自动调整。

以上就可以绘制出一副基本的地图了。

下面贴上在项目的相关javaScript代码。

  1. // 百度地图API功能
  2. // 绘制地图
  3. var map = new BMap.Map("BDMap",{enableMapClick: false});
  4. // 定位并显示当前地址
  5. theLocation();
  6. map.enableScrollWheelZoom(); //启用滚轮放大缩小,默认禁用
  7. map.enableContinuousZoom(); //启用地图惯性拖拽,默认禁用
  8. var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});// 左上角,添加比例尺
  9. var top_left_navigation = new BMap.NavigationControl({type:BMAP_NAVIGATION_CONTROL_SMALL}); //左上角,添加默认缩放平移控件
  10. map.addControl(top_left_control);
  11. map.addControl(top_left_navigation);
  12. var ac = new BMap.Autocomplete( //建立一个自动完成的对象
  13. {"input" : "address"
  14. ,"location" : map
  15. });
  16. var c=document.getElementById("address").value;
  17. ac.setInputValue(c);
  18. ac.addEventListener("onhighlight", function(e) { //鼠标放在下拉列表上的事件
  19. var str = "";
  20. var _value = e.fromitem.value;
  21. var value = "";
  22. if (e.fromitem.index > -1) {
  23. value = _value.province + _value.city + _value.district + _value.street + _value.business;
  24. }
  25. str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;
  26. value = "";
  27. if (e.toitem.index > -1) {
  28. _value = e.toitem.value;
  29. value = _value.province + _value.city + _value.district + _value.street + _value.business;
  30. }
  31. str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;
  32. G("searchResultPanel").innerHTML = str;
  33. });
  34. var myValue;
  35. ac.addEventListener("onconfirm", function(e) { //鼠标点击下拉列表后的事件
  36. var _value = e.item.value;
  37. myValue = _value.province + _value.city + _value.district + _value.street + _value.business;
  38. G("searchResultPanel").innerHTML ="onconfirm<br />index = " + e.item.index + "<br />myValue = " + myValue;
  39. setPlace();
  40. });
  41. function G(id) {
  42. return document.getElementById(id);
  43. }
  44. function setPlace(){
  45. map.clearOverlays(); //清除地图上所有覆盖物
  46. function myFun(){
  47. var pp = local.getResults().getPoi(0).point; //获取第一个智能搜索的结果
  48. $("#longitude").val(pp.lng);//设置经纬度
  49. $("#latitude").val(pp.lat);
  50. map.centerAndZoom(pp, 18);
  51. map.addOverlay(new BMap.Marker(pp)); //添加标注
  52. }
  53. var local = new BMap.LocalSearch(map, { //智能搜索
  54. onSearchComplete: myFun
  55. });
  56. local.search(myValue);
  57. }
  58. // 用经纬度设置地图中心点
  59. function theLocation(){
  60. if(document.getElementById("longitude").value != "" && document.getElementById("latitude").value != ""){
  61. map.clearOverlays();
  62. var new_point = new BMap.Point(document.getElementById("longitude").value,document.getElementById("latitude").value);
  63. var marker = new BMap.Marker(new_point); // 创建标注
  64. map.centerAndZoom(new_point, 15);
  65. map.addOverlay(marker); // 将标注添加到地图中
  66. map.panTo(new_point);
  67. }else{
  68. map.centerAndZoom("无锡", 15);
  69. }
  70. }
  71. var geoc = new BMap.Geocoder();
  72. map.addEventListener("click", function(e){
  73. //通过点击百度地图,可以获取到对应的point, 由point的lng、lat属性就可以获取对应的经度纬度
  74. var pt = e.point;
  75. geoc.getLocation(pt, function(rs){
  76. //addressComponents对象可以获取到详细的地址信息
  77. var addComp = rs.addressComponents;
  78. var site = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;
  79. //将对应的HTML元素设置值
  80. $("#address").val(site);
  81. $("#longitude").val(pt.lng);
  82. $("#latitude").val(pt.lat);
  83. });
  84. });
在项目中遇到的最大的问题就是,当保存了客户的相关地址信息之后。再次编辑时,用户在地图中的选址点和地址信息会一闪而过,变成初始化的状态。解决方法时再次编辑时
1.获取之前的经纬度进行地图中的标注创建(也就是那个红点)
  1. var new_point = new BMap.Point(document.getElementById("longitude").value,document.getElementById("latitude").value);
  2. var marker = new BMap.Marker(new_point); // 创建标注
  3. map.centerAndZoom(new_point, 15);
  4. map.addOverlay(marker); // 将标注添加到地图中
2.设置地图中心点为选中的地址

  1. map.panTo(new_point);
3.将地址值设置再次设置到input框中,否则地址为空。

  1. var c=document.getElementById("address").value;
  2. ac.setInputValue(c);
最终的显示效果如下。

第一次使用百度地图API相关推荐

  1. html5 geolocation 百度地图,html5 geolocation配合百度地图api实现定位

    1.了解html5 geolocation HTML5 Geolocation(地理定位)用于定位用户的位置. 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的.=> 使用 ...

  2. 百度地图API的第一次接触

    因为项目的需求,第一次接触了百度API. 第一步:引用百度地图API的脚本 如果在局域网环境中,要把地图文件和js文件都要下载下来 <script type="text/javascr ...

  3. 百度地图api,第一次定位成功,后面505错误

    百度地图api,第一次定位成功,后面505错误 1.查看key对不对 2.查看AndroidManifest中放的位置对不对,是放在 <application里面与 <activity a ...

  4. 使用百度地图API制作线路轨迹播放

    1.使用百度地图API制作轨迹播放: 可应用于车辆跟踪.行驶线路回放.跑步行程的记录等地图应用场景, 1.1绘制静态轨迹图 获取多个轨迹点point(必须包含经度.纬度) 使用polyline对象依次 ...

  5. 百度地图API开发指南

    百度地图API开发指南 本文为百度地图API官方版本的开发指南,供各位51CTO的网友进行参考. 简介什么是百度地图API? 百度地图API是一套由JavaScript语言编写的应用程序接口,它能够帮 ...

  6. 百度地图API如何申请?(自认为比较详细,如解决了你的问题请收藏、点赞、关注!)

    (请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 注意:自己申请的AK要保存好,最好不要外借,避免不必要的 ...

  7. 地图上制作线路的动画_使用百度地图API制作线路轨迹播放

    1.使用百度地图API制作轨迹播放: 可应用于车辆跟踪.行驶线路回放.跑步行程的记录等地图应用场景, 1.1绘制静态轨迹图 获取多个轨迹点point(必须包含经度.纬度) 使用polyline对象依次 ...

  8. 项目一、调用百度地图api实现电子围栏和报警信息关联

    前段时间香克斯去实习去了,由于一些原因只实习了12天,不过第一次实习,觉得还是有必要记录一下.事先声明,这个博客也是获得同意的,目前这个项目完成度还不是很高,有的地方我的想法不成熟的,希望大家多多提意 ...

  9. react项目使用百度地图API

    文章目录 前言 一.接入API 1.登录百度地图 2.创建应用,获取密钥 3.引入API 4.当作模块导入BMap 二.使用 1.引入 2.展示地图 三.效果展示 总结 前言 最近在开发一款react ...

最新文章

  1. 两个列表之间移动数据
  2. 华章IT图书书讯(2012年第9期)
  3. 让串口可以自动分辨一帧数据
  4. MyEclipse中消除frame引起的“the file XXX can not be found.Please check the location and try again.”的错误...
  5. [译]提案:在Go语言中增加对持久化内存的支持
  6. 隐马尔科夫模型-前向算法
  7. WeX5 Model 里data ,baasData 数据过滤条件清除 数据初始化
  8. 7.1 XHTML的规范化
  9. win7误删计算机,Win7系统下文件数据被误删了怎么办
  10. 自己总结一下wpf image source 绑定的几种方式
  11. maven setting 设置jdk版本
  12. Animation in Windows 8 apps
  13. 如何搭建一个简单的QQ机器人(基于mirai)
  14. 天善智能8月18日上海线下沙龙分享主题— 金融领域的客户洞察与标签体系构建...
  15. zbb20181006 eclipse、编辑YAML插件-YEdit
  16. L01n matlab,matlab常用语法
  17. 常见的http服务器软件
  18. java邮箱和手机正则表达式
  19. el-select 展示 2*2、1*1、3*3、4*4 视频 分屏展示
  20. stm32f103 id绑定软件加密破解方法

热门文章

  1. 关于深度学习(deep learning)的常见疑问 --- 谷歌大脑科学家 Caffe缔造者 贾扬清
  2. ubuntu繁体字简体字切换
  3. [观点][幽默网文]所谓......(全集)
  4. 原生js三种选项卡效果(轮播)
  5. 大数据安全分析与架构设计
  6. 好看的抖音小视频不小心手滑刷过去了怎么办?Python帮你解决烦恼
  7. Android刘海屏适配精炼详解
  8. [0CTF/TCTF 2022] real_magic_dlog
  9. 圣修改服务器剑联盟,《英雄联盟》4月9日测服 剑圣再度调整无限火力开测
  10. 动员计算机二级考试主题班会,考前动员主题班会