微信小程序-路线规划功能

wxml

<view class="container">
  <view class="mapTop">
    <van-tabs active="{{ active }}" color="#2A82E4" bind:change="onChange">
      <view wx:for="{{scenicList}}" wx:key="id">
        <van-tab title="{{item.name}}" />
      </view>
    </van-tabs>

    <!-- 显示地图 -->
    <view class="view" style="position: absolute;width: 100%;height: 80%;bottom: 20%">
      <map id="myMap" 
           style="width: 100%; height: 100vh;" 
           longitude="{{longitude}}" 
           latitude="{{latitude}}" 
           scale="16" 
           polyline="{{polyline}}" 
           show-location="true" 
           markers="{{markers}}">
      </map>
    </view>
  </view>
</view>

wxss

/* pages/atlas/index.wxss */
.container {
    background-color: #ffffff;
    padding-bottom: 10px;
}

/* 顶部导航栏 */
.top {
    width: 100%;
    height: 90px;
    color: #636363;
    display: flex;
    top: 0;
    position: fixed;
    font-size: 14px;
    text-align: center;
    align-items: center;
    z-index: 5;
    background-color: #ffffff;
    border-bottom: 1px #e1e1e1 solid;
}

.top text {
    position: absolute;
    bottom: 10px;
}

.left {
    width: 65px;
    height: 25px;
    margin-left: 10px;
    display: flex;
    justify-content: space-around;
    align-items: center;
    border: 1px #d4d4d4 solid;
    border-radius: 20px;
    position: absolute;
    bottom: 10px;
}

.left image {
    width: 15px;
    height: 15px;
}

.return {
    transform: rotate(180deg);
}

.line {
    width: 1px;
    height: 60%;
    background-color: #d7c3ac;
}

#house {
    width: 20px;
    height: 20px;
}

.mapTop {
    width: 100%;
}

.mapTop-block {
    width: 15%;
    height: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    font-size: 0.9rem;
    background-color: brown;
}

.mapTop-line {
    width: 80%;
    height: 2px;
    margin-top: 5px;
    background-color: chartreuse;
}

js

var QQMapWX = require('./qqmap-wx-jssdk');

// 实例化API核心类
var qqmapsdk = new QQMapWX({
    key: 'HLBBZ-UXNCV-OUOPC-5AT7V-Y3UG6-UYB5U' // 必填
});

Page({
    // 返回上一页
    returnClick() {
        wx.navigateBack();
    },

    targetHouse() {
        wx.switchTab({
            url: '/pages/goods-list/index',
        });
    },

    data: {
        srcLat: '35.280000',  // 起点纬度(字符串)
        srcLng: '113.980000',  // 起点经度(字符串)
        strategyArrlat: '34.52',  // 终点纬度(字符串)
        strategyArrlng: '110.07', // 终点经度(字符串)
        polyline: [], // 用于存储路线的多段路径
        markers: [] // 用于存储起点和终点的标记
    },

    onLoad() {
        var _this = this;

        // 将坐标转换为数字类型
        var srcLat = parseFloat(_this.data.srcLat);
        var srcLng = parseFloat(_this.data.srcLng);
        var strategyArrlat = parseFloat(_this.data.strategyArrlat);
        var strategyArrlng = parseFloat(_this.data.strategyArrlng);

        // 请求页面数据
        wx.login({
            success: (res) => {
                if (res.code) {
                    // 请求自己的后台服务器,传递 code 获取 session_key 和 openid
                    // 请求景区分类列表
                    wx.request({
                        url: 'https://jingqu.kuxia.top/app/maps/index', // 替换为你自己的服务器地址
                        method: 'POST',
                        data: {
                            scenic_id: 3
                        },
                        success: (response) => {
                            if (response.data.code == 1) {
                                console.log('景区分类列表', response.data.data);
                                this.setData({
                                    scenicList: response.data.data // 更新数据
                                });
                            }
                        },
                        fail: (err) => {
                            console.error('请求失败', err);
                        }
                    });
                }
            }
        });

        // 调用距离计算接口
        qqmapsdk.direction({
            mode: 'driving',
            from: {
                latitude: srcLat,
                longitude: srcLng
            },
            to: {
                latitude: strategyArrlat,
                longitude: strategyArrlng
            },
            success: function (res) {
                var ret = res;
                var coors = ret.result.routes[0].polyline,
                    pl = [];
                var kr = 1000000;
                for (var i = 2; i < coors.length; i++) {
                    coors[i] = Number(coors[i - 2]) + Number(coors[i]) / kr;
                }

                for (var i = 0; i < coors.length; i += 2) {
                    pl.push({
                        latitude: coors[i],
                        longitude: coors[i + 1]
                    });
                }

                // 设置polyline属性,将路线显示出来
                _this.setData({
                    latitude: pl[0].latitude,
                    longitude: pl[0].longitude,
                    polyline: [{
                        points: pl,
                        color: '#2A82E4',
                        width: 5
                    }],
                    markers: [{
                        id: 1,
                        latitude: srcLat,
                        longitude: srcLng,
                        iconPath: '/images/start.png', // 起点图标路径
                        width: 30,
                        height: 30
                    }, {
                        id: 2,
                        latitude: strategyArrlat,
                        longitude: strategyArrlng,
                        iconPath: '/images/end.png', // 终点图标路径
                        width: 30,
                        height: 30
                    }]
                });
            },
            fail: function (error) {
                console.error(error);
            }
        });
    }
});

引入文件

相关推荐
HappyAcmen3 小时前
关于微信小程序的面试题及其解析
微信小程序·小程序·notepad++
乔冠宇3 小时前
微信小程序修改个人信息头像(uniapp开发)
微信小程序·小程序·uni-app
爱上大树的小猪7 小时前
微信小程序模仿快播标签云滚动特效
微信小程序·小程序
從南走到北11 小时前
挪车小程序挪车二维码php+uniapp
微信小程序·小程序·开源·微信公众平台
黑云压城After11 小时前
uniapp小程序自定义日历(签到、补签功能)
小程序·uni-app
黑云压城After12 小时前
小程序(物流、快递),接入GPS北斗获取路线以及当前车辆位置
小程序
万岳科技程序员小金13 小时前
互联网医院系统源码解析:如何开发智能化的电子处方小程序?
小程序·app开发·互联网医院系统源码·智慧医疗小程序·医院app
Java Fans14 小时前
微信小程序——访问服务器媒体文件的实现步骤
服务器·微信小程序·小程序
Evaporator Core17 小时前
微信小程序数据绑定与事件处理:打造动态交互体验
微信小程序·小程序·交互