当前位置:   article > 正文

JS实现百度地图_js 百度导航

js 百度导航

使用JavaScript技术,利用api接口开发百度地图简单方便。


1.设置整体页面的布局样式

  1. <style type="text/css">
  2. body, html{width:100%;height:100%;margin:0;font-family:"微软雅黑";}
  3. #point{width:980px;min-height:160px;margin-left:12px;margin-top:6px;margin:0 auto;padding-left:2px;}
  4. #map{height:1060px;width:1160px;margin:0 auto;margin-top:16px;margin-bottom:8px;}
  5. #r-result{width:1080px;min-height:80px;margin-top:10px;padding-left:2px;margin:0 auto;}
  6. #r-result table{width:100%;}
  7. </style>

2. 最重要的就是利用api接口获取地图数据,设置Maker标记,选择出行策略

  1. <!-- js技术 -->
  2. <script type="text/javascript">
  3. window.onload = loadScript;
  4. // 首次加载的函数
  5. function loadScript() {
  6. var script = document.createElement("script");
  7. // 申请的AK
  8. script.src = "http://api.map.baidu.com/api?v=2.0&ak=YBPGfONGeN2ENSn9YzACYCGzazCKsZsb&callback=initialize";//此为v2.0版本的引用方式
  9. // 百度地图API功能
  10. document.body.appendChild(script);
  11. // 自动定位启动
  12. autoLocation();
  13. }
  14. // 定义全局变量
  15. var map ;
  16. var startAddr,endAddr;
  17. var startCity = "天津",endCity="";
  18. // 初始化处理 : Called first
  19. function initialize()
  20. {
  21. map = new BMap.Map("map");
  22. //初始化地图,设置城市和地图级别
  23. // 默认定位点设置
  24. map.centerAndZoom(startCity,12);
  25. document.getElementById("start").value = startCity;
  26. if(endCity != ""){
  27. }
  28. map.enableScrollWheelZoom();
  29. map.enableInertialDragging();
  30. map.enableContinuousZoom();
  31. // var pointA = new BMap.Point(106.486654,29.490295); // 创建点坐标A--大渡口区
  32. // var pointB = new BMap.Point(106.581515,29.615467); // 创建点坐标B--江北区
  33. //alert('从大渡口区到江北区的距离是:'+(map.getDistance(pointA,pointB)).toFixed(2)+' 米。'); //获取两点距离,保留小数点后两位
  34. //var polyline = new BMap.Polyline([pointA,pointB], {strokeColor:"red", strokeWeight:8, strokeOpacity:0.5}); //定义折线
  35. //map.addOverlay(polyline); //添加折线到地图上
  36. // 地图控制控件
  37. var bottom_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});// 左下角,添加比例尺
  38. var bottom_left_navigation = new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_LEFT}); //左下角,添加默认缩放平移控件
  39. /*缩放控件type有四种类型:
  40. BMAP_NAVIGATION_CONTROL_SMALL:仅包含平移和缩放按钮;BMAP_NAVIGATION_CONTROL_PAN:仅包含平移按钮;BMAP_NAVIGATION_CONTROL_ZOOM:仅包含缩放按钮
  41. */
  42. //添加控件和比例尺
  43. map.addControl(bottom_left_control);
  44. map.addControl(bottom_left_navigation);
  45. // 添加手动定位控件
  46. var geolocationControl = new BMap.GeolocationControl({anchor: BMAP_ANCHOR_BOTTOM_LEFT});
  47. geolocationControl.addEventListener("locationSuccess", function(e){
  48. // 定位成功事件
  49. var address = "";
  50. address += e.addressComponent.province;
  51. address += e.addressComponent.city;
  52. address += e.addressComponent.district;
  53. address += e.addressComponent.street;
  54. address += e.addressComponent.streetNumber;
  55. // 改变定位后的城市名
  56. startCity = address;
  57. document.getElementById("start").value = address;
  58. // 清空Maker
  59. map.clearOverlays();
  60. alert("当前定位地址为:" + address);
  61. initialize();
  62. });
  63. geolocationControl.addEventListener("locationError",function(e){
  64. // 定位失败事件
  65. alert(e.message);
  66. });
  67. map.addControl(geolocationControl);
  68. //2D图,卫星图
  69. var mapType1 = new BMap.MapTypeControl({anchor: BMAP_ANCHOR_TOP_RIGHT,mapTypes: [BMAP_NORMAL_MAP,BMAP_HYBRID_MAP]});
  70. map.addControl(mapType1);
  71. // 默认选择步行策略
  72. //showPolicy(1);
  73. }
  74. // 自动定位处理 : 根据浏览器的地址获取经纬度
  75. function autoLocation()
  76. {
  77. var geolocation = new BMap.Geolocation();
  78. geolocation.getCurrentPosition(function(r){
  79. if(this.getStatus() == BMAP_STATUS_INVALID_REQUEST){
  80. alert("非法请求");
  81. return;
  82. }
  83. if(this.getStatus() == BMAP_STATUS_PERMISSION_DENIED){
  84. alert("没有开启定位权限");
  85. return;
  86. }
  87. if(this.getStatus() == BMAP_STATUS_SERVICE_UNAVAILABLE){
  88. alert("服务不可用");
  89. return;
  90. }
  91. if(this.getStatus() == BMAP_STATUS_TIMEOUT){
  92. alert("网络超时");
  93. return;
  94. }
  95. if(this.getStatus() == BMAP_STATUS_SUCCESS){
  96. var geoc = new BMap.Geocoder();
  97. var startPoint = new BMap.Point(r.point.lng,r.point.lat);
  98. var mk = new BMap.Marker(startPoint);
  99. map.panTo(r.point);
  100. map.addOverlay(mk);
  101. geoc.getLocation(startPoint, function(rs){
  102. // 根据经纬度获取物理地址信息
  103. var addComp = rs.addressComponents;
  104. // 改变定位后的城市名
  105. startCity = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;
  106. document.getElementById("start").value = startCity;
  107. alert(addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);
  108. });
  109. // alert('当前位置:'+r.point.lng+','+r.point.lat);
  110. }else {
  111. alert('failed'+this.getStatus());
  112. }
  113. },{enableHighAccuracy: true})
  114. //关于状态码
  115. //BMAP_STATUS_SUCCESS 检索成功。对应数值“0”。
  116. //BMAP_STATUS_CITY_LIST 城市列表。对应数值“1”。
  117. //BMAP_STATUS_UNKNOWN_LOCATION 位置结果未知。对应数值“2”。
  118. //BMAP_STATUS_UNKNOWN_ROUTE 导航结果未知。对应数值“3”。
  119. //BMAP_STATUS_INVALID_KEY 非法密钥。对应数值“4”。
  120. //BMAP_STATUS_INVALID_REQUEST 非法请求。对应数值“5”。
  121. //BMAP_STATUS_PERMISSION_DENIED 没有权限。对应数值“6”。(自 1.1 新增)
  122. //BMAP_STATUS_SERVICE_UNAVAILABLE 服务不可用。对应数值“7”。(自 1.1 新增)
  123. //BMAP_STATUS_TIMEOUT 超时。对应数值“8”。(自 1.1 新增)
  124. }
  125. // 地址解析
  126. // 逆地址解析 :输入框发生变化事件
  127. function onChangeS()
  128. {
  129. // 起始
  130. var start = document.getElementById("start").value;
  131. var myGeo = new BMap.Geocoder();
  132. // 将地址解析结果显示在地图上,并调整地图视野
  133. myGeo.getPoint(start, function(point){
  134. if (point) {
  135. startCity = start;
  136. map.clearOverlays();
  137. map.centerAndZoom(startCity,12);
  138. map.panTo(point);
  139. map.addOverlay(new BMap.Marker(point));
  140. document.getElementById("start").value = startCity;
  141. //initialize();
  142. }else{
  143. alert("您输入地址没有解析到结果!");
  144. }
  145. }, "");
  146. }
  147. function onChangeE()
  148. {
  149. // 终止
  150. var end = document.getElementById("end").value;
  151. var myGeo = new BMap.Geocoder();
  152. // 将地址解析结果显示在地图上,并调整地图视野
  153. myGeo.getPoint(end, function(point){
  154. if (point) {
  155. endCity = end;
  156. map.clearOverlays();
  157. map.centerAndZoom(endCity,12);
  158. map.panTo(point);
  159. map.addOverlay(new BMap.Marker(point));
  160. document.getElementById("end").value = endCity;
  161. //initialize();
  162. }else{
  163. alert("您输入地址没有解析到结果!");
  164. }
  165. }, "");
  166. }
  167. // 对起终点设置的处理函数
  168. function theLocation()
  169. {
  170. // 通过经纬度设置Maker标记
  171. if(document.getElementById("longitude").value != "" && document.getElementById("latitude").value != "")
  172. {
  173. map.clearOverlays();
  174. var new_point = new BMap.Point(document.getElementById("longitude").value,document.getElementById("latitude").value);
  175. var marker = new BMap.Marker(new_point); // 创建标注
  176. map.addOverlay(marker); // 将标注添加到地图中
  177. map.panTo(new_point);
  178. }
  179. }
  180. // 出行策略
  181. /*
  182. * 1. 步行 2. 驾车
  183. */
  184. function showPolicy(index)
  185. {
  186. if(startCity == ""){
  187. alert("请输入出发点");
  188. return;
  189. }
  190. if(endCity == ""){
  191. alert("请输入目的地");
  192. return;
  193. }
  194. if(index == 1){
  195. // 步行
  196. map.clearOverlays();
  197. map.centerAndZoom(startCity,12);
  198. var walking = new BMap.WalkingRoute(map, {renderOptions: {map: map, panel: "r-result",autoViewport: true }});
  199. walking.search(startCity, endCity);
  200. }
  201. if(index == 2){
  202. //公交
  203. map.clearOverlays();
  204. map.centerAndZoom(startCity,12);
  205. var routePolicy = [BMAP_TRANSIT_POLICY_LEAST_TIME,BMAP_TRANSIT_POLICY_LEAST_TRANSFER,BMAP_TRANSIT_POLICY_LEAST_WALKING,BMAP_TRANSIT_POLICY_AVOID_SUBWAYS];
  206. var transit = new BMap.TransitRoute(map, {renderOptions: {map: map, panel: "r-result",autoViewport: true}});
  207. transit.setPolicy(routePolicy[0]);
  208. transit.search(startCity, endCity);
  209. }
  210. if(index == 3){
  211. // 驾车
  212. map.clearOverlays();
  213. map.centerAndZoom(startCity,12);
  214. var driving = new BMap.DrivingRoute(map, {renderOptions: {map: map, panel: "r-result", autoViewport: true}});
  215. driving.search(startCity, endCity);
  216. }
  217. }
  218. // 获取搜索框输入的内容
  219. function submitSearch()
  220. {
  221. var value = document.getElementById("searchValue").value;
  222. if(value != ""){
  223. search("'"+value+"'");
  224. }else{
  225. alert("请输入搜索关键字");
  226. }
  227. }
  228. // 搜索内容并返回结果
  229. function search(str)
  230. {
  231. if(str != ""){
  232. map.clearOverlays();
  233. map.centerAndZoom(startCity,12);
  234. var local = new BMap.LocalSearch(map, {renderOptions: {map: map, panel: "r-result",autoViewport: true}});
  235. local.search(str);
  236. }else{
  237. alert("搜索内容错误");
  238. }
  239. }
  240. </script>

3. 页面布局css

  1. <body>
  2. <div id=""
  3. style="width:1120px;height:30px;margin:0 auto;font-size:18px;background:#0000cc;color:#fff;text-align:left;padding-left:24px;padding-top:8px;padding-bottom:6px;">
  4. | 出行游玩,定制属于自我的Map
  5. </div>
  6. <div id="point">
  7. 我的位置: <input id="start" type="text" size="28px" style="width:136px; margin-right:10px;" οnchange="onChangeS()"/>  ——>  
  8. 目的地: <input id="end" type="text" size="28px" style="width:136px; margin-right:10px;" οnchange="onChangeE()"/>
  9. <input type="button" value="确定" style="width:54px; font-size:18px;margin-right:10px;margin-top:16px;background:#888;" οnclick="showPolicy(1)" />
  10. <br/><p>
  11. <div style="width:100%;height:30px;margin-bottom:2px;padding-bottom:0px;">
  12. <div style="width:188px;float:left;background:#066;color:#fff;margin-bottom:4px;margin-top:0px;padding-top:4px;padding-bottom:4px;text-align:center;font-size:18px;">
  13. 出行策略
  14. </div>
  15. <div style="float:left;margin-left:6px;padding-top:5px;">
  16. <input type="radio" value="policy_1" name="policy"
  17. style="font-size:18px;margin-right:10px;color:#fff;" οnclick="showPolicy(1)" >步行</input>
  18. <input type="radio" value="policy_2" name="policy"
  19. style="font-size:18px;margin-right:10px;color:#fff;" οnclick="showPolicy(2)" >公交出行</input>
  20. <input type="radio" value="policy_3" name="policy"
  21. style="font-size:18px;margin-right:10px;color:#fff;" οnclick="showPolicy(3)" >驾车出行</input>
  22. </div>
  23. </div>
  24. <br/>
  25. <div style="width:100%;height:30px;margin-bottom:4px;margin-top:0px;">
  26. <div style="width:188px;float:left;background:#066;color:#fff;margin-top:4px;padding-top:4px;padding-bottom:4px;text-align:center;font-size:18px;">搜索周边</div>
  27. <div style="width:24px;float:left;margin-left:28px;margin-top:8px;margin-right:8px;">
  28. <input type="text" id="searchValue" size="22px"/>
  29. </div>
  30. <div style="width:36px;float:left;margin-top:8px;margin-left:168px;">
  31. <input type="button" οnclick="submitSearch()" style="font-size:16px;border:solid 1;"
  32. onMouseOver="JavaScript:this.style.background='#00ce00'" onMouseOut="this.style.background=''" value="搜索" />
  33. </div>
  34. </div>
  35. <div style="width:100%;margin-top:16px;margin-left:26px;margin-bottom:8px;">
  36. <input type="button" value="餐饮" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#c33;color:#fff;"
  37. onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" οnclick="search('餐饮')"/>
  38. <input type="button" value="酒店" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#068;color:#fff;"
  39. onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" οnclick="search('酒店')"/>
  40. <input type="button" value="地铁" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#c36;color:#fff;"
  41. onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" οnclick="search('地铁')"/>
  42. <input type="button" value="公交" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#888;color:#fff;"
  43. onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" οnclick="search('公交')"/>
  44. <input type="button" value="周围景点" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#033;color:#fff;"
  45. onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" οnclick="search('景点')"/>
  46. <input type="button" value="公园" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#09c;color:#fff;"
  47. onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" οnclick="search('公园')"/>
  48. <input type="button" value="小吃街" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#906;color:#fff;"
  49. onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" οnclick="search('小吃')"/>
  50. <input type="button" value="游乐场" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#936;color:#fff;"
  51. onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" οnclick="search('游乐场')"/>
  52. <input type="button" value="KTV" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#c00;color:#fff;"
  53. onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" οnclick="search('KTV')"/>
  54. <input type="button" value="商业街巷" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#963;color:#fff;"
  55. onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" οnclick="search('商业街巷')"/>
  56. <input type="button" value="搜索更多>>" style="background:#fff;color:#000;border:0;clickable:false;">
  57. </div>
  58. </div>
  59. <div id="map"></div>
  60. <div id="r-result"></div>
  61. </body>
  62. </html>

以下是结果截图

| 出行游玩,定制属于自我的Map
我的位置:   ——>   目的地:

出行策略
步行 公交出行 驾车出行

搜索周边
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/297668
推荐阅读
相关标签
  

闽ICP备14008679号