微信小程序地图开发总结-规划路线

news/2025/2/9 7:47:15 标签: 微信小程序, 小程序

在现代移动应用中,地图导航功能已成为必不可少的一部分。通过地图 API,我们可以轻松地在应用中集成位置服务和路径规划功能。本篇文章将带大家一起实现一个简单的路径导航功能,使用腾讯地图 API结合小程序>微信小程序,实现从当前位置到目标地点的路线规划和展示。

需求概述

我们需要实现以下功能:

  1. 获取用户当前的位置信息(经纬度)。
  2. 从后台获取目的地的经纬度。
  3. 使用腾讯地图的方向查询 API 获取起点到终点的驾车路线。
  4. 在地图上绘制路线和显示起点、终点的位置。

实现步骤

首先,我们需要安装腾讯地图 SDK。在小程序>微信小程序中使用腾讯地图 API,你需要创建一个腾讯云账号并获取到开发者密钥(Key)。

安装腾讯地图 SDK: 将腾讯地图 SDK 的 JavaScript 文件下载并放置到项目的 utils 目录下。例如,下载并使用 qqmap-wx-jssdk1.2 文件。

 初始化项目

小程序app.js 中,首先引入腾讯地图 SDK,之后我们可以在页面中使用该 SDK 进行路径规划。

// 引入腾讯地图 SDK
var QQMapWX = require('../../utils/qqmap-wx-jssdk1.2/qqmap-wx-jssdk');
const api = require('../../utils/api.js');

// 实例化腾讯地图 API 核心类
var qqmapsdk = new QQMapWX({
  key: 'HLBBZ-UXNCV-OUOPC-5AT7V-Y3UG6-UYB5U'  // 请替换成您自己的腾讯地图 API 密钥
});

页面逻辑实现

接下来我们实现小程序>微信小程序的页面逻辑,首先在 onLoad 生命周期函数中请求后端接口获取目的地的位置,然后通过 wx.getLocation() 获取当前用户的位置,再调用腾讯地图的 direction API 获取路径规划。
 

Page({
  data: {
    // 起点经纬度
    srcLat: null,
    srcLng: null,
    // 终点经纬度
    dstLat: null,
    dstLng: null,
    latitude: '',
    longitude: '',
    polyline: [],
    mapData: []
  },

  onLoad() {
    var _this = this;
    
    // 请求后端接口获取目的地位置
    api.post('/app/map/index', { map_id: 16 })
      .then((data) => {
        console.log(data.data[0]);
        this.setData({
          dstLat: data.data[0].lat,   // 终点纬度
          dstLng: data.data[0].lng    // 终点经度
        });
      })
      .catch((err) => {
        console.error('请求失败', err);
      });

    // 获取当前位置
    wx.getLocation({
      type: 'wgs84',  // 获取经纬度,默认为 wgs84
      success(res) {
        _this.setData({
          srcLat: res.latitude,   // 当前纬度
          srcLng: res.longitude   // 当前经度
        });

        // 调用腾讯地图 API 计算路线
        qqmapsdk.direction({
          mode: 'driving',  // 驾车模式
          from: {
            latitude: _this.data.srcLat,
            longitude: _this.data.srcLng
          },
          to: {
            latitude: _this.data.dstLat,
            longitude: _this.data.dstLng
          },
          success: function (res) {
            console.log(res);
            var coors = res.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;
            }
            // 将解压后的坐标放入点串数组 pl 中
            for (var i = 0; i < coors.length; i += 2) {
              pl.push({ latitude: coors[i], longitude: coors[i + 1] })
            }
            console.log(pl);
            // 设置 polyline 属性,绘制路线
            _this.setData({
              latitude: pl[0].latitude,
              longitude: pl[0].longitude,
              polyline: [{
                points: pl,
                color: '#449afb',
                width: 4
              }]
            });
          },
          fail: function (error) {
            console.error(error);
          },
          complete: function (res) {
            console.log(res);
          }
        });
      },
      fail(error) {
        console.error('获取当前位置失败:', error);
      }
    });
  }
});

展示地图和路径

我们在 wxml 文件中,使用小程序>微信小程序提供的 <map> 组件来展示地图,并通过 polyline 属性绘制路径。

<view class="container">
  <map 
    longitude="{
  
  {longitude}}" 
    latitude="{
  
  {latitude}}" 
    scale="16" 
    polyline="{
  
  {polyline}}" 
    markers="{
  
  {markers}}" 
    show-compass 
    enable-3D 
    enable-overlooking 
    enable-zoom
    style="width: 100%; height: 500px;">
  </map>
</view>

通过 latitudelongitude 来设置地图的初始中心位置,通过 polyline 来绘制起点到终点的路径。polyline 是一个包含多个点(经纬度)的数组,路线会依次连接每个点,展示出路径的轨迹

总结

在本篇文章中,我们使用腾讯地图 API 和小程序>微信小程序实现了一个简单的路径导航功能,展示了如何获取用户当前位置,计算从起点到终点的路径,并在小程序中展示该路径。通过结合腾讯地图的方向查询 API 和小程序>微信小程序的地图组件,我们可以快速地开发出强大的地图导航功能。

如果你对地图开发感兴趣,可以深入学习腾讯地图的更多 API 功能,例如:兴趣点查询、周边搜索、路线规划等


http://www.niftyadmin.cn/n/5845786.html

相关文章

GitHub Pages + Jekyll 博客搭建指南(静态网站)

目录 &#x1f680; 静态网站及其生成工具指南&#x1f30d; 什么是静态网站&#xff1f;&#x1f4cc; 静态网站的优势⚖️ 静态网站 VS 动态网站 &#x1f680; 常见的静态网站生成器对比&#x1f6e0;️ 使用 GitHub Pages Jekyll 搭建个人博客&#x1f4cc; 1. 创建 GitHu…

什么是网络安全审计?网络安全审计的作用...

网络安全审计通过对网络数据的采集、分析、识别&#xff0c;实时动态监测通信内容、网络行为和网络流量&#xff0c;发现和捕获各种敏感信息、违规行为&#xff0c;实时报警响应&#xff0c;全面记录网络系统中的各种会话和事件&#xff0c;实现对网络信息的智能关联分析、评估…

element-plus el-tree-select 修改 value 字段

element-plus el-tree-select 修改 value 字段 &#xff0c;不显示label 需要注意两个地方&#xff1a; <el-tree-select v-model"value" :data"data" multiple :render-after-expand"false" show-checkbox style"width: 240px" …

FPGA高端项目:实时视频缩放+UltraScale GTH光编码+UDP图传架构,高速接口转网络视频传输,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案我这里已有的以太网方案我这里已有的FPGA图像缩放方案 3、工程详细设计方案工程设计原理框图输入视频之-->ADV7611芯片解码HDMI动…

Centos挂载镜像制作本地yum源,并补装图形界面

内网环境centos7.9安装图形页面内网环境制作本地yum源 上传镜像到服务器目录 创建目录并挂载镜像 #创建目录 cd /mnt/ mkdir iso#挂载 mount -o loop ./CentOS-7-x86_64-DVD-2009.iso ./iso #前面镜像所在目录&#xff0c;后面所挂载得目录#检查 [rootlocalhost mnt]# df -h…

除了try...catch,还有其他处理异步错误的方法吗?

在处理异步操作时&#xff0c;除了使用 try...catch 语句捕获错误&#xff0c;还有其他几种方法可以有效处理异步错误。以下是一些常用的方法&#xff1a; 1. Promise 的 .catch() 方法 如果你的异步操作返回一个 Promise&#xff0c;可以使用 .catch() 方法来捕获错误。这种…

如何在Windows中配置MySQL?

MySQL是一个广泛使用的开源关系型数据库管理系统&#xff0c;它支持多种操作系统平台&#xff0c;其中包括Windows。无论是开发者进行本地开发&#xff0c;还是管理员为应用程序配置数据库&#xff0c;MySQL都是一个非常流行的选择。本篇文章将详细介绍如何在Windows操作系统中…

在离线的服务器上部署Python的安装库

在离线服务器上部署 Python 安装库&#xff08;如 SQLAlchemy、pandas、pyodbc 等&#xff09;&#xff0c;可以使用以下方法&#xff1a; 方法 1&#xff1a;在联网机器上下载依赖&#xff0c;拷贝到离线服务器 适用于&#xff1a;服务器完全无法访问互联网。 步骤 1. 在联网…