微信小程序---- 外卖小程序查看实时地图路线(骑手端&用户端)【高德地图】

这篇具有很好参考价值的文章主要介绍了微信小程序---- 外卖小程序查看实时地图路线(骑手端&用户端)【高德地图】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信小程序---- 外卖小程序查看地图路线(骑手端&用户端)【高德地图】

前言:1. 在小程序中需要使用map组件,文档链接:https://developers.weixin.qq.com/miniprogram/dev/component/map.html
2.使用的是高德地图,所以需要引进相关的js,下载链接:https://lbs.amap.com/api/wx/download
3.去往高德官方申请需要用的key,操作链接:https://lbs.amap.com/api/wx/guide/create-project/get-key/

html

<map id="map" style="width: 100%;height: 100vh;" longitude="{{longitude}}" latitude="{{latitude}}" markers="{{markers}}" scale="{{scale}}" polyline="{{polyline}}" show-location enable-zoom>
      <cover-view id="top">
        <cover-view class="ibody">
          <cover-view class="leftz">
            <cover-view>预计时长:{{duration}}分钟</cover-view>
          </cover-view>
          <cover-view class="leftz leftz1">           
            <cover-view>剩余公里数:{{distance}}米</cover-view>
          </cover-view>
        </cover-view>
      </cover-view>
  </map>

JS ( tag 1是司机端进入查看 2是用户端身份查看)

import {
  showdriverupdata,
  getdata,
  updata
} from '../server/post';
var amapFile = require('../../common/amap-wx.130.js'); //引入高德js
Page({
  data: {
    tag: 1, //1是小车身份进入查看 2是特殊商户身份查看
    latitude: '', //起始经度
    longitude: '', //终点纬度
    zhongdianjingdu: '', //终点经度
    zhongdianweidu: '', //终点纬度
    scale: 12,
    markers: [{
      iconPath: "../../image/car.png",
      id: 0,
      latitude: '',
      longitude: '',
      width: 33,
      height: 30
    }, {
      iconPath: "../../image/end.png",
      id: 1,
      latitude: '',
      longitude: '',
      width: 35,
      height: 40
    }],
    distance: '',
    polyline: [],
    scatterlongitude: '', //特殊商户身份 单个小车位置的经纬度
    timer: null,
  },
  onLoad: function (options) {
    this.setData({
      tag: options.tag || 1,
      scatterlongitude: options.scatterlongitude,
      timer:null
    })
    clearInterval(this.data.timer);
  },
  onShow() {
    this.getCarinfo();
  },

  // 高德地图划线
  getDrivingRoute(origin, destination) {
    var that = this;
    var myAmapFun = new amapFile.AMapWX({
      key: 'XXXXXXXXXX'
    });
    myAmapFun.getDrivingRoute({
      origin: origin,
      destination: destination,
      success: function (data) {
        console.log('高德划线数据-----', data)
        var points = [];
        if (data.paths && data.paths[0] && data.paths[0].steps) {
          var steps = data.paths[0].steps;
          for (var i = 0; i < steps.length; i++) {
            var poLen = steps[i].polyline.split(';');
            for (var j = 0; j < poLen.length; j++) {
              points.push({
                longitude: parseFloat(poLen[j].split(',')[0]),
                latitude: parseFloat(poLen[j].split(',')[1])
              })
            }
          }
        }
        that.setData({
          polyline: [{
            points: points,
            color: "#0091ff",
            width: 6
          }]
        });
        if (data.paths[0] && data.paths[0].distance) { //公里数
          that.setData({
            distance: data.paths[0].distance
          });
        }
        if (data.paths[0] && data.paths[0].duration) { //花费时间
          let miu = parseInt(Number(data.paths[0].duration) / 60)
          that.setData({
            duration: miu
          });
        }
      },
      fail: function (info) {

      }
    })
  },

  //这个函数是一开始点击事件触发的:
  async authorization() {
    let that = this;
    try { //等待
      await this.getWxLocation() //小车身份
    } catch (error) {
      wx.showModal({
        title: '温馨提示',
        tip: '获取权限失败,是否授权获取地理位置?',
        showCancel: true,
        confirmText: '授权位置',
        cancelText: '取消',
        sureCall() {
          that.openSetting()
        },
        cancelCall() {}
      })
      return
    }
  },

  // 获取当前位置 (小车身份调用)
  getWxLocation() {
    let that = this,
      v = that.data;
    wx.showLoading({
      title: '定位中...',
      mask: true,
    })
    return new Promise((resolve, reject) => {
      let _locationChangeFn = (res) => {
        console.log('location change', res)
        let sonlinecopyId = wx.getStorageSync('lineId');
        const latitude = res.latitude;
        const longitude = res.longitude;
        let origin = longitude + ',' + latitude; //将经纬度拼接
        let destination = v.zhongdianweidu + ',' + v.zhongdianjingdu;
        console.log('当前经纬度---', origin)
        that.setData({
          latitude,
          longitude,
          ['markers[0].latitude']: latitude,
          ['markers[0].longitude']: longitude,
          ['markers[1].latitude']: v.zhongdianjingdu,
          ['markers[1].longitude']: v.zhongdianweidu,
        })

        that.getDrivingRoute(origin, destination); //路况划线
        //小车增加当前位置经纬度 latitude纬度
        updata(sonlinecopyId, latitude, longitude).then(res => {
          console.log('小车增加当前位置经纬度----', latitude, longitude)
          wx.hideLoading();
        })
        // wx.offLocationChange(_locationChangeFn)
      }
      wx.startLocationUpdate({
        success: (res) => {
          wx.onLocationChange(_locationChangeFn)
          resolve()
        },
        fail: (err) => {
          console.log('获取当前位置失败', err)
          wx.hideLoading()
          reject()
        }
      })
    })
  },

  // 开启权限
  openSetting() {
    let self = this
    wx.openSetting({
      success(res) {
        console.log(res)
        if (res.authSetting["scope.userLocation"]) {
          // res.authSetting["scope.userLocation"]为trueb表示用户已同意获得定位信息,此时调用getlocation可以拿到信息
          self.authorization()
        }
      }
    })
  },


  // 特殊商户身份 获取小车经纬度
  getsmallCar() {
    wx.showLoading({
      title: '获取中...',
      mask: true,
    })
    let copyId = wx.getStorageSync('lineId');
    let v = this.data;
    v.timer = setInterval(() => {
      getdata(copyId).then(res => {
        if (res.data.code != 500) {
          let datas = res.data.data;
          let latitude = '',
            longitude = "";

          if (datas.msg == "未获取到司机实时位置!") {
            let arr = [];
            arr = v.scatterlongitude.split(',');
            latitude = arr[1];
            longitude = arr[0];
          } else {
            datas.weidu > 90 ? (latitude = datas.jingdu, longitude = datas.weidu) :
              (latitude = datas.weidu, longitude = datas.jingdu);
          }
          this.setData({
            latitude,
            longitude,
            ['markers[0].latitude']: latitude,
            ['markers[0].longitude']: longitude,
            ['markers[1].latitude']: v.zhongdianjingdu,
            ['markers[1].longitude']: v.zhongdianweidu,
          })

          let origin = longitude + ',' + latitude;
          let destination = v.zhongdianweidu + ',' + v.zhongdianjingdu;
          console.log('特殊商户身份 获取小车经纬度--', origin)
          this.getDrivingRoute(origin, destination); //路况划线
          wx.hideLoading();
        }else{
          wx.hideLoading();
          wx.showToast({
            title: '网络繁忙,请稍后再试!',
            icon:'none'
          })
        }
      })
    }, 5000);
  },

  // 获取小车信息
  getCarinfo() {
    let that = this;
    let sonlinecopyId = wx.getStorageSync('lineId');
    showdriverupdata(sonlinecopyId).then(res => {

      let datas = res.data.data;
      this.setData({
        carnub: datas.chepaihao,
        driverName: datas.driverName,
        begintime: datas.kaishi,
        peisonging: datas.peisongzhong,
        peisonglist: datas.daipeisong,
        zhongdianjingdu: datas.zhongdianjingdu,
        zhongdianweidu: datas.zhongdianweidu
      })
      // this.getLocation();

      console.log('小车信息----', datas);
      // that.authorization(); //小车身份地图
      if (that.data.tag == 1) {
        that.authorization(); //小车身份地图
      } else {
        that.getsmallCar() //特殊商户身份
      }

    })
  },

  onUnload() {
    clearInterval(this.data.timer);
  },
  onHide: function () {
    clearInterval(this.data.timer);
  },

})

微信小程序物流地图,微信小程序,小程序,微信小程序,前端文章来源地址https://www.toymoban.com/news/detail-597161.html

到了这里,关于微信小程序---- 外卖小程序查看实时地图路线(骑手端&用户端)【高德地图】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp实现微信小程序用户实时位置定位并显示地图

    目前,我们可以通过一些现成的api来实现此功能。下面我将介绍一下通过腾讯位置服务来实现此功能的具体操作流程。 1、在Hbuilder x中对项目进行权限开放 进入到manifest.json文件中   2、获取调用腾讯位置服务所需的key 登录腾讯地图api: 腾讯位置服务 - 立足生态,连接未来

    2024年02月09日
    浏览(59)
  • 微信小程序学习实录6(百度经纬度采集、手动调整精度、H5嵌入小程序、百度地图jsAPI、实时定位、H5更新自动刷新)

    viewport,手机端的适配; layui,手机端界面UI; jweixin-1.6.0,H5与微信小程序通信的API接口文件 getBdGeo ();定位封装函数; marker.addEventListener(\\\'dragend\\\', function () {}, 监听标注事件,手动调整景点 getCurrentPosition, 加载即自动采集当前位置的经纬度信息和城市地址信息; 通过web-view

    2024年02月05日
    浏览(62)
  • 基于微信小程序的外卖小程序+ssm

    社会的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。 本文从管理员、用户和商家的功能要

    2024年01月18日
    浏览(46)
  • 微信小程序餐饮外卖系统设计与实现

    摘 要 随着现在的“互联网+”的不断发展。现在传统的餐饮业也朝着网络化的方向不断的发展。现在线上+线下的方式来实现餐饮的获客渠道增加,可以更好地帮助餐饮企业实现更多、更广的获客需求,实现更好的餐饮销售。截止到2021年末,我国的外卖市场已经突破万亿,高

    2024年02月10日
    浏览(33)
  • 【微信小程序】外卖点餐效果展示

    外卖点餐效果展示,左右布局,快速点餐,商家信息展示等...程序是模仿人家的,所以界面没做什么调整,功能是没啥问题,可以正常使用... 直接看效果图: 可以把这个点餐这个功能分为5部分组成 1、第一部分头部信息 2、第二部分左布局 3、第三部分右布局 4、第四部分点

    2024年02月08日
    浏览(47)
  • 规划路线(微信小程序、H5)

    2024年02月13日
    浏览(35)
  • springboot基于微信小程序的外卖系统小程序

    专业技术开发,收藏关注不迷路 自从计算机发展开始,计算机软硬件相关技术的发展速度越来越快,在信息化高速发展的今天,计算机应用技术似乎已经应用到了各个领域。在餐饮行业,除了外卖以外就是到店里就餐,在店里就餐如果需要等待点餐的话,用户的体验度就会急

    2024年02月03日
    浏览(45)
  • 基于微信小程序的外卖点餐小程序

    文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器:谷歌浏览器 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软件:微信开发者 随着信息技术在管

    2024年02月09日
    浏览(55)
  • 微信小程序实现路线规划demo

    本文旨在以mpvue框架为基础,探讨地图类小程序的开发思路。 原作者利用mpvue + 腾讯地图的能力做了一个地铁路线规划的小程序,主要提供全球主要城市的地铁线网图及旅游介绍,其中国内城市支持查看地图和路线规划。 目前腾讯位置服务也推出了路线规划插件、地铁图插件

    2024年02月08日
    浏览(48)
  • 微信小程序毕业设计作品成品(06)微信小程序外卖点餐平台系统设计与实现

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包