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

在现代移动应用中,地图导航功能已成为必不可少的一部分。通过地图 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 功能,例如:兴趣点查询、周边搜索、路线规划等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/967975.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【已解决】VSCode:“正在重新激活终端”

背景&#xff1a; 1、切换Python环境的时候有问题&#xff0c;然后一直显示“正在重新激活终端”。 2、此处电脑&#xff1a;MAC 解决方法&#xff1a; 打开命令面板&#xff08;按 CtrlShiftP 或 CmdShiftP&#xff09;。输入并选择 Python: Clear Cache and Reload Window…

Grafana-使用Button修改MySQL数据库

背景 众所周知&#xff0c;Grafana是一个用来展示数据的平台&#xff0c;但是有时候还是会有需求说能不能有一个按钮&#xff0c;点击的时候再对数据库进行修改&#xff0c;从而达到更新数据的效果 经过多方查证&#xff0c;终于实现了一个简单的&#xff0c;点击button执行sq…

Android 系统面试问题

一.android gki和非gki的区别 Android GKI&#xff08;Generic Kernel Image&#xff09;和非GKI内核的主要区别在于内核设计和模块化程度&#xff0c;具体如下&#xff1a; 1. 内核设计 GKI&#xff1a;采用通用内核设计&#xff0c;与设备硬件分离&#xff0c;核心功能统一…

CCFCSP备考第一天

第33次认证第一题——词频统计 时间限制&#xff1a; 1.0 秒 空间限制&#xff1a; 512 MiB 下载题目目录&#xff08;样例文件&#xff09; 题目描述 在学习了文本处理后&#xff0c;小 P 对英语书中的 n 篇文章进行了初步整理。 具体来说&#xff0c;小 P 将所有的英文单…

接口测试Day12-持续集成、git简介和安装、Gitee远程仓库、jenkins集成

持续集成 概念&#xff1a; 团队成员将自己的工作成果&#xff0c;持续集成到一个公共平台的过程。成员可以每天集成一次&#xff0c;也可以一天集成多 次。 相关工具&#xff1a; 本地代码管理&#xff1a;git远程代码管理&#xff1a;gitee(国内)、github(国外)、gitlib(公司…

C# OpenCV机器视觉:智能水果采摘

在一个风景如画的小镇边上&#xff0c;有一座阿强家祖传的果园。每到水果成熟的季节&#xff0c;果园里硕果累累&#xff0c;红彤彤的苹果、黄澄澄的梨子、紫莹莹的葡萄&#xff0c;散发着诱人的香气。然而&#xff0c;这丰收的喜悦却总被一件烦心事笼罩 —— 摘水果。 “哎呀…

腾讯云大数据套件TBDS与阿里云大数据能力产品对比

前言 博主在接触大数据方向研究的时候是在2016年,那时候正是大数据概念非常火热的一个时间段,最著名的Google的3篇论文。Google FS、MapReduce、BigTable,奠定了大数据框架产品的基础。Google文件系统,计算框架和存储框架。往后所有的大数据产品和过程域无一不是在三个模块…

设计高效的测试用例:从需求到验证

在现代软件开发过程中&#xff0c;测试用例的设计一直是质量保证&#xff08;QA&#xff09;环节的核心。有效的测试用例不仅能够帮助发现潜在缺陷&#xff0c;提升软件质量&#xff0c;还能降低后期修复成本&#xff0c;提高开发效率。尽管如此&#xff0c;如何从需求出发&…

荣耀手机Magic3系列、Magic4系列、Magic5系列、Magic6系列、Magic7系列详情对比以及最新二手价格预测

目录 荣耀Magic系列手机详细对比 最新二手价格预测 性价比分析 总结 以下是荣耀Magic系列手机的详细对比以及最新二手价格预测&#xff1a; 荣耀Magic系列手机详细对比 特性荣耀Magic3系列荣耀Magic4系列荣耀Magic5系列荣耀Magic6系列荣耀Magic7系列处理器骁龙888&#x…

JAVA-枚举的使用

目录 一、枚举的意义 二、enum类的使用 1.switch 2.常用方法 2.1 values() 和 ordinal() 2.1.1 Enum基本介绍 2.2 valueOf() 2.3 compareTo() 三、枚举的优点和缺点 四、枚举安全在什么地方 一、枚举的意义 public static final int RED 1; public static final int…

前端实现在PDF上添加标注(1)

前段时间接到一个需求&#xff0c;用户希望网页上预览PDF&#xff0c;同时能在PDF上添加文字&#xff0c;划线&#xff0c;箭头和用矩形框选的标注&#xff0c;另外还需要对已有的标注进行修改&#xff0c;删除。 期初在互联网上一通搜索&#xff0c;对这个需求来讲发现了两个问…

Visual Studio Code中文出现黄色框子的解决办法

Visual Studio Code中文出现黄色框子的解决办法 一、vsCode中文出现黄色框子-如图二、解决办法 一、vsCode中文出现黄色框子-如图 二、解决办法 点击 “文件”点击 “首选项”点击 “设置” 搜索框直接搜索unicode选择“文本编辑器”&#xff0c;往下滑动&#xff0c;找到“Un…

二分算法篇:二分答案法的巧妙应用

二分算法篇&#xff1a;二分答案法的巧妙应用 那么看到二分这两个字想必我们一定非常熟悉&#xff0c;那么在大学期间的c语言的教学中会专门讲解二分查找&#xff0c;那么我们来简单回顾一下二分查找算法&#xff0c;我们知道二分查找是在一个有序的序列中寻找一个数在这个序列…

项目6:基于大数据校园一卡通数据分析和可视化

1、项目简介 本项目是基于大数据的清华校园卡数据分析系统&#xff0c;通过Hadoop&#xff0c;spark等技术处理校园卡交易、卡号和商户信息数据。系统实现消费类别、男女消费差异、学院消费排行和年级对比等分析&#xff0c;并通过Web后端和可视化前端展示结果。项目运行便捷&…

怎么在win10系统批量生成下面目录示例文件?

环境&#xff1a; win10系统 问题描述&#xff1a; 怎么在win10系统批量生成下面目录示例文件&#xff0c;刚好有个开源项目要新建 GitHub地址&#xff1a;https://github.com/latiaoge/AI-Sphere-Butler ai-sphere-butler/ # 项目根目录 ├── docs/ …

Java在大数据处理中的应用:从MapReduce到Spark

Java在大数据处理中的应用&#xff1a;从MapReduce到Spark 大数据时代的到来让数据的存储、处理和分析变得前所未有的重要。随着数据量的剧增&#xff0c;传统的单机计算方式已经无法满足处理需求。为了解决这个问题&#xff0c;许多分布式计算框架应运而生&#xff0c;其中Ma…

Pdf手册阅读(1)--数字签名篇

原文阅读摘要 PDF支持的数字签名&#xff0c; 不仅仅是公私钥签名&#xff0c;还可以是指纹、手写、虹膜等生物识别签名。PDF签名的计算方式&#xff0c;可以基于字节范围进行计算&#xff0c;也可以基于Pdf 对象&#xff08;pdf object&#xff09;进行计算。 PDF文件可能包…

运放放大器

1 运放是什么 1.1 运算放大器&#xff0c;常用于做信号处理。如:信号放大、滤波、积分、微分、整流、甚至可以用来做电路主控等等。其功能非常强大 1.2 运放的重要特性 虚短 &#xff08;前提是要有负反馈&#xff09; 1.2.1 虚短的概念是指运放在正常工作过程中&#xff0c…

UE求职Demo开发日志#28 初期几个流程的实现

1 第一小节流程梳理 进入游戏--> 弹出几个文本框介绍背景--> 接取任务收集资源-> 打怪获得源能结晶--> 场景里获得一些金属碎片--> 用源能和金属修复合成台--> 完成第一个任务--> 接第二个任务&#xff0c;打带精英怪的一波&#xff08;小怪1换颜…

【Docker】从瀑布开发到敏捷开发

引言 软件开发方法论是指导团队如何规划、执行和管理软件项目的框架。随着软件行业的不断发展&#xff0c;开发方法论也在不断演进。从传统的瀑布开发到现代的敏捷开发&#xff0c;软件开发方法论经历了深刻的变革。本文将详细探讨瀑布开发和敏捷开发的定义、特点、优缺点以及…