邵彬 发表于 2023-1-10 13:42:01

uniapp小程序使用高德地图api实现路线规划

路线规划

简介

路线规划常用于出行路线的提前预览,我们提供4种类型的路线规划,分别为:驾车、步行、公交和骑行,满足各种的出行场景。
高德开放平台
本例是驾车路线规划功能和位置选择地图api:chooseLocation

示例:

1、在页面的 js 文件中,实例化 AMapWX 对象,请求进行驾车路线规划。
首先,引入 amap-wx.js 文件(amap-wx.js从相关下载页面下载的 zip 文件解压后得到)。
import amapFile from "@/libs/amap-wx.js";然后在 onLoad 实例化 AMapWX 对象
onLoad() {
       this.myAmapFunT = new amapFile.AMapWX({
                key: 你申请的key
       })
        },最后生成请求进行驾车路线规划数据
                /**
                       *@author ZY
                       *@date 2023/1/9
                       *@Description:生成规划路线
                       *@param {string} start 开始位置
                       *@param {string} end 结束位置
                       *@param {number} strategy 10 默认多策略 策略 https://lbs.amap.com/api/webservice/guide/api/direction#driving
                       *
                       10,返回结果会躲避拥堵,路程较短,尽量缩短时间,与高德地图的默认策略也就是不进行任何勾选一致
                       * 4,躲避拥堵,但是可能会存在绕路的情况,耗时可能较长
                       2,距离优先,仅走距离最短的路线,但是可能存在穿越小路/小区的情况
                       */
                        getPlanningRoute(start, end, strategy = 10) {
                                let that = this
                                uni.showLoading({
                                        title: '加载中'
                                });
                                that.myAmapFunT.getDrivingRoute({
                                        origin: start,
                                        destination: end,
                                        strategy: strategy, //备选方案
                                        success: function(data) {
                                                // console.log('所有路径',data)
                                                if (data.paths && data.paths && data.paths.steps) {
                                                        // 默认 10 会 对返回多条路径的方案按照时间短的
                                                        let goodRouter = data.paths.sort((a, b) => {
                                                                return a.duration - b.duration
                                                        })

                                                        that.distance = (goodRouter.distance * 0.001).toFixed(2) + '公里'
                                                        that.duration = '大约' + (goodRouter.duration / 60).toFixed(2) + '分钟'

                                                        let steps = goodRouter.steps
                                                        let points = []
                                                        for (var i = 0; i < steps.length; i++) {
                                                                var poLen = steps.polyline.split(';');
                                                                for (var j = 0; j < poLen.length; j++) {
                                                                        points.push({
                                                                                longitude: parseFloat(poLen.split(',')),
                                                                                latitude: parseFloat(poLen.split(','))
                                                                        })
                                                                }
                                                        }
                                                        that.polyline = [{
                                                                points: points,
                                                                color: strategy === 10 ? '#0ee532' : strategy === 2 ? '#0742d9' :
                                                                        '#ee6b06',
                                                                width: 8,
                                                        }]
                                                }
                                                uni.hideLoading();
                                        },
                                        fail: function(info) { //失败回调
                                                console.log('路线规划失败')
                                                console.log(info)
                                                uni.hideLoading();
                                                uni.showToast({
                                                        title: '路线规划失败',
                                                        icon: 'error'
                                                });
                                        },
                                })
                        },2.完整源码组件
<template>
        <view >
                <view@click="toBack">
                        <image src="http://img.wisdomtaxi.com/toBack.png" ></image>
                </view>
                <map:latitude="startPoint.latitude" :longitude="startPoint.longitude" show-location
                        :polyline="polyline" @markertap="markertap" :key="polyline.length + new Date().getTime()"
                        :markers="markers">
                        <cover-view slot="callout">
                                <block v-for="(item,index) in markers" :key="index">
                                        <cover-view:marker-id="item.id">
                                                <cover-view >
                                                        {{item.title}}
                                                </cover-view>
                                        </cover-view>
                                </block>
                        </cover-view>
                </map>
                <view >
                        <viewv-if="endPoint.address">
                                <viewv-for="item in btnList" :key="item.value"
                                        : @click="selectRouteType(item.value)">
                                        {{item.name}}
                                </view>
                        </view>
                        <viewv-if="distance || duration">
                                <u-icon name="file-text-fill" color="#FFA500" size="17"></u-icon>
                                <view >
                                        距离:{{distance}} 时间:{{duration}}
                                </view>
                        </view>
                        <view >
                                <u-icon name="map-fill" color="#33a63b" size="17"></u-icon>
                                <view >
                                        您将在 <text >{{startPoint.name | fmtEndAddr}}</text> 上车
                                </view>
                        </view>
                        <viewv-if="endPoint.name">
                                <u-icon name="map-fill" color="#ee642b" size="17"></u-icon>
                                <view >
                                        {{endPoint.name|fmtEndAddr}}
                                </view>
                        </view>
                        <view@click="openChooseLocation">
                                <u-icon name="search" color="#ffa602" size="23"></u-icon>
                                <view >
                                        请选择目的地
                                </view>
                        </view>
                        <view v-if="endPoint.name" @click="submitToDriver" >
                                发送给司机
                        </view>
                </view>
        </view>
</template>
来源:https://www.cnblogs.com/zy-mg/p/17039609.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: uniapp小程序使用高德地图api实现路线规划