百度地图路线规划

驾车效果图:

 

 

公交效果图

骑行效果图

步行效果图

代码如下:

首先引入地图js 这里用的是3.0 AK需要去申请

<script type="text/javascript" src="//api.map.baidu.com/api?v=3.0&ak=你的AK"></script>
<template>
  <!--地图-->
  <div style="width: 100%;height: 700px;">
    <!--始和结束地址-->
    <div id="r-result">
      请输入开始地点:
      <el-input id="startKeyword" v-model="startKeyword" clearable maxlength="20" show-word-limit style="width: 400px"/>
      <br>
      请输入结束地点:
      <el-input id="endKeyword" v-model="endKeyword" clearable maxlength="20" show-word-limit style="width: 400px"/>
      <br>
      请输入出行方式:
      <el-radio-group v-model="travelMode">
        <el-radio :label="1">驾车</el-radio>
        <el-radio :label="2">公交</el-radio>
        <el-radio :label="3">骑行</el-radio>
        <el-radio :label="4">步行</el-radio>
      </el-radio-group>
      <br>
      <el-button type="success" @click="search">检索</el-button>
    </div>
    <div id="searchResultPanel" style="border:1px solid #C0C0C0;width:150px;height:auto; display:none;"></div>
    <div></div>
    <div id="allmap" style="width:100%; height:450px;"></div>
    <div id="result" style="margin-top:600px;margin-left: 200px; width: 100%;height: 300px;text-align: left;overflow:auto;">根据起点和终点经纬度驾车导航路线</div>
  </div>
</template>

<script>
  import $ from 'jquery'

  export default {
    name: "index",
    data() {
      return {
        startKeyword: '',  //开始地址
        endKeyword: '',//结束地址
        travelMode: null,//出行方式
        localSearch:null,//自动搜索
        map:null,

        driving: null,  //驾车
        transit: null,  //公交
        walking: null,//步行
        riding:null,  //汽车
        startPoint: {
          lnt: null,
          lat: null
        },
        endPoint: {
          lnt: null,
          lat: null
        },
        time: null, //时间
        distance: null, //距离
      }
    },
    mounted() {
      this.init();
    },
    created() {

    },
    methods: {
      //驾车
      checkDriving(){
        var start = new BMap.Point(this.startPoint.lng, this.startPoint.lat);
        var end = new BMap.Point(this.endPoint.lng, this.endPoint.lat);
        this.driving.search(start, end);
        this.driving.search(end, start);
        let str = "从"+this.startKeyword+"到"+this.endKeyword+"需要"+this.time+", 距离"+this.distance
        $("#result").text(str);
      },
      //公交
      checkTransit(){
        var start = new BMap.Point(this.startPoint.lng, this.startPoint.lat);
        var end = new BMap.Point(this.endPoint.lng, this.endPoint.lat);
        this.transit.search(start, end);
      },
      //骑行
      checkRiding(){
        var start = new BMap.Point(this.startPoint.lng, this.startPoint.lat);
        var end = new BMap.Point(this.endPoint.lng, this.endPoint.lat);
        this.riding.search(start, end);
      },
      //步行
      checkWalking(){
        var start = new BMap.Point(this.startPoint.lng, this.startPoint.lat);
        var end = new BMap.Point(this.endPoint.lng, this.endPoint.lat);
        this.walking.search(start, end);
      },
      search(){
        this.map.clearOverlays();    //清除地图上所有覆盖物
        if (this.startKeyword!='' && this.END!='' && this.travelMode!=null){
          if (this.travelMode == 1){
            this.checkDriving();
          }else if (this.travelMode == 2){
            this.checkTransit();
          }else if(this.travelMode == 3){
            this.checkRiding();
          }else{
            this.checkWalking();
          }
        }else{
          this.$message.error("请输入起点,终点和交通方式")
        }

      },
      init() {
        var that = this;
        //初始化
        var map = new BMap.Map("allmap");
        map.centerAndZoom(new BMap.Point(116.404, 39.915), 14);
        map.setMapStyleV2({styleId: 'bf6890d1f6963aa54a40f7c18e9227a1'});
        map.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放
        map.addControl(new BMap.NavigationControl());               // 添加平移缩放控件
        map.addControl(new BMap.ScaleControl());                    // 添加比例尺控件
        map.addControl(new BMap.OverviewMapControl());              //添加缩略地图控件
        that.map = map;

        //开始地址
        var start = new BMap.Autocomplete(    //建立一个自动完成的对象
          {
            "input": "startKeyword"
            , "location": map
          });

        //鼠标放在下拉列表上的事件
        start.addEventListener("onhighlight", function (e) {
          var str = "";
          var _value = e.fromitem.value;
          var value = "";
          if (e.fromitem.index > -1) {
            value = _value.province + _value.city + _value.district + _value.street + _value.business;
          }
          str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;

          value = "";
          if (e.toitem.index > -1) {
            _value = e.toitem.value;
            value = _value.province + _value.city + _value.district + _value.street + _value.business;
          }
          str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;
          //G("searchResultPanel").innerHTML = str;
        });

        var myValue;
        start.addEventListener("onconfirm", function (e) {    //鼠标点击下拉列表后的事件
          var _value = e.item.value;
          myValue = _value.province + _value.city + _value.district + _value.street + _value.business;
          setPlace();
        });

        function setPlace(){
          map.clearOverlays();    //清除地图上所有覆盖物
          function myFun(){
            var pp = local.getResults().getPoi(0).point;    //获取第一个智能搜索的结果
            //this.startPoint = pp
            that.startPoint.lng = pp.lng
            that.startPoint.lat = pp.lat
            map.centerAndZoom(pp, 18);
            map.addOverlay(new BMap.Marker(pp));    //添加标注
          }
          var local = new BMap.LocalSearch(map, { //智能搜索
            onSearchComplete: myFun
          });
          //this.startKeyword = myValue
          local.search(myValue);
        }

        //结束地址
        var end = new BMap.Autocomplete(    //建立一个自动完成的对象
          {
            "input": "endKeyword"
            , "location": map
          });

        //鼠标放在下拉列表上的事件
        end.addEventListener("onhighlight", function (e) {
          var str = "";
          var _value = e.fromitem.value;
          var value = "";
          if (e.fromitem.index > -1) {
            value = _value.province + _value.city + _value.district + _value.street + _value.business;
          }
          str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;

          value = "";
          if (e.toitem.index > -1) {
            _value = e.toitem.value;
            value = _value.province + _value.city + _value.district + _value.street + _value.business;
          }
          str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;
          //G("searchResultPanel").innerHTML = str;
        });

        var myValue2;
        end.addEventListener("onconfirm", function (e) {    //鼠标点击下拉列表后的事件
          var _value = e.item.value;
          myValue2 = _value.province + _value.city + _value.district + _value.street + _value.business;
          setPlace2();
        });

        function setPlace2(){
          map.clearOverlays();    //清除地图上所有覆盖物
          function myFun2(){
            var pp = local.getResults().getPoi(0).point;    //获取第一个智能搜索的结果
            //this.endPoint = pp
            that.endPoint.lng = pp.lng
            that.endPoint.lat = pp.lat
            map.centerAndZoom(pp, 18);
            map.addOverlay(new BMap.Marker(pp));    //添加标注
          }
          var local = new BMap.LocalSearch(map, { //智能搜索
            onSearchComplete: myFun2
          });
          //this.endKeyword = myValue2
          local.search(myValue2);
        }


        //驾车
        var output = "从" + that.startKeyword + "到" + that.endKeyword + "驾车需要";
        var searchComplete = function (results) {
          if (that.driving.getStatus() != BMAP_STATUS_SUCCESS) {
            return;
          }
          var plan = results.getPlan(0);
          output += plan.getDuration(true) + "\n";                //获取时间
          output += "总路程为:";
          output += plan.getDistance(true) + "\n";             //获取距离

          that.time = plan.getDuration(true);
          that.distance = plan.getDistance(true);
        }

        that.driving = new BMap.DrivingRoute(map, {
          renderOptions: {
            map: map,
            autoViewport: true,
            panel: "result"
          },
          onSearchComplete: searchComplete,
          onPolylinesSet: function () {
            //console.log(output)
            //$("#result").text(output);
            //setTimeout(function(){alert(output)},"1000");
          }
        });

        //公交
        that.transit = new BMap.TransitRoute(map, {
          renderOptions: {
            map: map,
            autoViewport: true,
            panel: "result"

          },
          // 配置跨城公交的换成策略为优先出发早
          intercityPolicy: BMAP_INTERCITY_POLICY_EARLY_START,
          // 配置跨城公交的交通方式策略为飞机优先
          // transitTypePolicy: BMAP_TRANSIT_TYPE_POLICY_AIRPLANE
        });

        //步行
        that.walking = new BMap.WalkingRoute(map, {
          renderOptions: {
            map: map,
            autoViewport: true,
            panel: "result"
          }
        });

        //骑行
        that.riding = new BMap.RidingRoute(map, {
          renderOptions: {
            map: map,
            autoViewport: true,
            panel: "result"
          }
        });
      },
    },
  }
</script>

<style scoped>

  #result {
    position: fixed;
    top: 10px;
    left: 20px;
    width: 300px;
    height: 40px;
    line-height: 40px;
    text-align: center;
    background: #fff;
    box-shadow: 0 2px 6px 0 rgba(27, 142, 236, 0.5);
    border-radius: 7px;
    z-index: 99;
  }
</style>

 

注意:

如果提示BMap未定义

在vue.config.js  ----  configureWebpack中添加

externals:{
   'BMap':'BMap'
},

地图初始化不能放在created 中 应放在mounted中

 

百度地图路径规划 驾车不提示行车路线 参考官方的API也无法实现

如有需要途经点 和 解决驾车不提示行车路线 请参考后面的高德路线规划

 

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
对于您提到的问题,我可以给出一些建议。首先,关于路径查询中出现的问题,您可以尝试使用其他地图服务提供商的API,比如高德地图或谷歌地图,以获得更准确的路径规划结果。其次,关于道路上自动生成的路桩图标不等距和数量不足的问题,您可以尝试手动添加路桩图标,以确保它们的位置和数量符合您的需求。您可以使用百度地图的自定义覆盖物功能来实现这一点。最后,关于代码优化的建议,您可以考虑使用异步加载地图的方式,以提高页面加载速度,并且在地图初始化时只加载必要的功能和控件,以减少不必要的资源消耗。希望这些建议对您有帮助。 #### 引用[.reference_title] - *1* [Vue中使用百度地图做路径分析并根据起终点坐标模拟道路里程桩](https://blog.csdn.net/L863683305/article/details/105169930)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [vue结合百度地图api实现地址检索、路线规划等功能](https://blog.csdn.net/weixin_52641692/article/details/122646517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值