最近在项目中在添加客户功能时需要实现对客户地址进行地图选址的功能,包括添加页面的选址以及编辑页面的地址定位。现将第一次使用的心得记录下来。首先搜索百度地图的官网“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. virtualBox NAT模式,设置虚拟机可上网,宿主机可访问虚拟机的方法
  2. c 调用易语言dll字节集,总结VC与易语言DLL互相调用的方法
  3. extjs之TypeError: d.read is not a function解决方案
  4. CSharp关键字----using
  5. 二分图----最大匹配,最小点覆盖,最大点独立集
  6. (二)Cypher语言常用方法举例
  7. 使用jaxb根据xsd逆向生成java代码
  8. 计算机一级在线解析,2016年计算机一级试题及答案解析
  9. marker 头像 高德地图_高德地图上线马丽导航语音
  10. Linux 系统恢复误删除 Linux文件
  11. 聚类:Python遗传算法
  12. 软件测试qtp教程,QTP功能测试教程 - zero点 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  13. Java对List集合排序
  14. pandas学习之df.sample
  15. asp.net 后台生成二维码及生成带logo的二维码
  16. _csv.Error: field larger than field limit (131072)
  17. 对象和String之间转换(包含基本类型转换)
  18. 使用 PSCP将文件从 Windows 计算机快速传输到 Linux计算机
  19. Vert.x + Protobuf二进制协议解析
  20. Javascript或HTML代码该怎么进行压缩美化?

热门文章

  1. #JavaScript# 合并数组的多种方法 (附源码)
  2. unknown code for readObject at 0x3c XXL-job错误
  3. 东方不败自宫的真正原因
  4. 第一行代码android的读后感,《第一行代码》读书笔记
  5. 学成在线案例(完整版)
  6. 《梦华录》配色太可了!配色这样玩古风十足!
  7. shader变体是什么_GitHub - 7732050/ShaderVariantCollector
  8. 单IP服务器利用ProxmoxVE建立IPv4-NAT和IPv6虚拟机
  9. 潇洒老师总结的汽车发动机结构种类汇总
  10. 09_方法重写丶多态丶抽象类