微信小程序地图导航功能实现完整源代码附效果图(推荐)

yizhihongxing

微信小程序地图导航功能实现完整源代码附效果图攻略

一、效果介绍

此攻略实现了微信小程序地图导航功能,用户可以输入起点和终点,点击导航按钮即可在地图上显示导航路线,并提供导航提示功能。

二、实现方式

1. 准备工作

在微信小程序开发者工具中创建一个新项目,在app.json配置文件中添加需要使用的组件:

{
  "usingComponents": {
    "map": "../../miniprogram_npm/@vivaxy/wechat-map/index"
  }
}

@vivaxy/wechat-map是一款第三方组件,可以在小程序中使用高德地图。

2. 实现导航功能

在页面中使用map组件显示地图,使用小程序的input组件来获取起点和终点位置的输入,并使用高德地图API获取导航路线。

首先,在wxml文件中添加起点和终点位置的输入框和导航按钮:

<view class="form">
  <form>
    <label for="start">起点位置:</label>
    <input id="start" type="text" placeholder="请输入起点位置" bindinput="bindStartInput">
  </form>
  <form>
    <label for="destination">终点位置:</label>
    <input id="destination" type="text" placeholder="请输入终点位置" bindinput="bindDestinationInput">
  </form>
  <button type="primary" bindtap="navigate">导航</button>
</view>

然后,在js文件中实现获取起点和终点位置的函数和导航函数:

Page({
  data: {
    startLocation: '', // 起点位置
    destination: '', // 终点位置
    map: null, // 地图对象
    polyline: [], // 导航路线
  },

  // 获取起点位置
  bindStartInput(e) {
    this.setData({ startLocation: e.detail.value });
  },

  // 获取终点位置
  bindDestinationInput(e) {
    this.setData({ destination: e.detail.value });
  },

  // 点击导航按钮
  navigate() {
    const that = this;
    //获取高德地图的 key,可在高德地图开放平台申请
    wx.request({
      url: 'https://restapi.amap.com/v3/geocode/geo?key=您在高德地图开放平台的key值&address=' + that.data.startLocation,
      success: res => {
        const startLocation = res.data.geocodes[0].location.split(',');
        wx.request({
          url: 'https://restapi.amap.com/v3/geocode/geo?key=您在高德地图开放平台的key值&address=' + that.data.destination,
          success: res => {
            const destination = res.data.geocodes[0].location.split(',');
            wx.request({
              url: 'https://restapi.amap.com/v3/direction/walking?key=您在高德地图开放平台的key值&origin=' + startLocation[1] + ',' + startLocation[0] + '&destination=' + destination[1] + ',' + destination[0],
              success: res => {
                const steps = res.data.route.paths[0].steps;
                const polyline = [];
                steps.forEach(step => {
                  step.polyline.split('|').forEach(point => {
                    const latlng = point.split(',');
                    polyline.push({
                      latitude: parseFloat(latlng[1]),
                      longitude: parseFloat(latlng[0])
                    });
                  });
                });
                that.setData({ polyline });
                // 显示地图并设置地图的中心点和缩放
                that.data.map = wx.createMapContext('map');
                that.data.map.includePoints({
                  padding: [10],
                  points: polyline
                });
              }
            });
          }
        });
      }
    });
  }
})

至此,即可在小程序中完成地图导航功能。

3. 实现导航提示功能

为了让用户更方便地进行导航,我们可以添加导航提示功能。首先,在wxml文件中添加提示框:

<view class="tip">
  <view class="tip-content">{{tipText}}</view>
</view>

然后,在js文件中实现导航提示功能:

Page({
  data: {
    startLocation: '', // 起点位置
    destination: '', // 终点位置
    map: null, // 地图对象
    polyline: [], // 导航路线
    stepIndex: 0, // 当前导航到第几步
    tipText: '', // 导航提示文字
  },

  // 中途更新提示
  onHandleTip(data) {
    this.setData({
      stepIndex: data.step.index,
      tipText: data.step.instruction,
    });
  },

  // 更新完导航
  onHandleEnd(data) {
    this.setData({
      tipText: '已到达终点!',
    });
  },

  // 点击导航按钮
  navigate() {
    const that = this;
    // 获取高德地图的 key,可在高德地图开放平台申请
    wx.request({
      url: 'https://restapi.amap.com/v3/geocode/geo?key=您在高德地图开放平台的key值&address=' + that.data.startLocation,
      success: res => {
        const startLocation = res.data.geocodes[0].location.split(',');
        wx.request({
          url: 'https://restapi.amap.com/v3/geocode/geo?key=您在高德地图开放平台的key值&address=' + that.data.destination,
          success: res => {
            const destination = res.data.geocodes[0].location.split(',');
            wx.request({
              url: 'https://restapi.amap.com/v3/direction/walking?key=您在高德地图开放平台的key值&origin=' + startLocation[1] + ',' + startLocation[0] + '&destination=' + destination[1] + ',' + destination[0],
              success: res => {
                const steps = res.data.route.paths[0].steps;
                const polyline = [];
                steps.forEach(step => {
                  step.polyline.split('|').forEach(point => {
                    const latlng = point.split(',');
                    polyline.push({
                      latitude: parseFloat(latlng[1]),
                      longitude: parseFloat(latlng[0])
                    });
                  });
                });
                that.setData({ polyline });
                // 显示地图并设置地图的中心点和缩放
                that.data.map = wx.createMapContext('map');
                that.data.map.includePoints({
                  padding: [10],
                  points: polyline
                });
                // 导航提示
                wx.getSystemInfo({
                  success: function (res) {
                    const navHeight = 64 * (res.windowHeight / 750);
                    const promptTip = that.selectComponent('#prompt-tip');
                    promptTip.startNavigation({
                      steps: steps,
                      windowHeight: res.windowHeight,
                      statusBarHeight: res.statusBarHeight * (res.windowWidth / 750),
                      navHeight: navHeight,
                      that: that,
                    });
                  }
                });
              }
            });
          }
        });
      }
    });
  }
})

至此,即可在小程序中完成导航提示功能。

总结

通过以上步骤的实现,即可完成微信小程序地图导航功能。要注意实现过程中需要获取高德地图的key值,同时在进行步骤提示功能时,建议使用高级搜索来获取更为精确的结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序地图导航功能实现完整源代码附效果图(推荐) - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • php入门学习知识点六 PHP文件的读写操作代码

    让我们来详细讲解一下PHP文件的读写操作。首先,我们需要了解一下PHP文件读写的基本知识。 PHP文件读写操作 在PHP中,我们可以使用以下函数来进行文件的读写操作: fopen() 函数:用于打开一个文件,返回一个文件指针。 fgets() 函数:用于读取文件中的一行。 fwrite() 函数:用于向文件中写入内容。 fclose() 函数:用于关闭文件。…

    PHP 2023年5月23日
    00
  • php集成动态口令认证

    PHP集成动态口令认证攻略 本文将介绍如何使用PHP集成动态口令认证来保护Web应用程序免受恶意攻击。动态口令是一种基于时间和独立加密密钥计算得出的单次有效性的一种过程,可以提高安全。本文将使用Google Authenticator实现动态口令功能。 步骤1:PHP服务端安装 在服务器上安装PHP。 安装PHP扩展程序google-authenticato…

    PHP 2023年5月23日
    00
  • 文件上传程序的全部源码

    我会详细解释如何编写一个文件上传程序的完整源码,包括前端HTML代码和后端PHP代码。 HTML代码 我们可以使用HTML的form元素来实现文件上传功能。表单需要设置enctype属性为multipart/form-data,表示需要上传二进制文件。其中需要一个input元素用于选择文件,input元素的type属性需要设置为file。以下是HTML代码:…

    PHP 2023年5月23日
    00
  • 解析用PHP读写音频文件信息的详解(支持WMA和MP3)

    解析用PHP读写音频文件信息的详解(支持WMA和MP3) 背景介绍 随着音频流行,数字音频文件越来越受欢迎。通常,这些文件存储有关音频的元数据,例如标题,表演者和发行日期等信息。在PHP中,有多种方法可以读取和写入这些元数据,例如ID3v2标签,APEv2标签和Windows Media Audio(WMA)标记,本文将详细讲解如何解析WMA或MP3文件中的…

    PHP 2023年5月26日
    00
  • PHP 实现类似js中alert() 提示框

    要在 PHP 中实现类似 JavaScript 的 alert() 提示框,可以通过 PHP 中的 echo 函数输出 JavaScript 代码来实现。 下面是实现的具体步骤: 定义一个名为 alert() 的 PHP 函数,该函数接收一个字符串参数作为提示框中显示的文本。 在 PHP 函数中使用 echo 输出 JavaScript 代码,调用 aler…

    PHP 2023年5月27日
    00
  • 秒杀场景的缓存、队列、锁使用Redis优化设计方案

    以下是“秒杀场景的缓存、队列、锁使用Redis优化设计方案”的完整使用攻略,包括场景分析、方案设计和示例说明等内容。 场景分析 在秒杀场景中,由于大量用户同时访问,容易导致系统崩溃或响应缓慢。为了解决这个问题,我们可以使用Redis来优化设计方案,包括缓存、队列和锁等。 具体来说,我们可以使用Redis缓存商品信息和用户信息,使用Redis队列来处理用户请求…

    PHP 2023年5月12日
    00
  • php的array数组和使用实例简明教程(容易理解)

    PHP的Array数组和使用实例简明教程 什么是Array数组 Array数组是PHP中最常用的数据类型之一。它能够处理不同类型的数据,并通过索引或键值对的方式进行存储和访问。 Array数组可以使用以下两种方式进行声明: // 使用array()函数进行声明 $my_array = array("apple", "banana…

    PHP 2023年5月26日
    00
  • 浅谈Python项目的服务器部署

    一、概述 Python是一门十分流行的脚本语言,使用Python语言开发的Web应用也是很方便的。但是,开发完Web应用之后,如何将其部署到服务器上却是一件比较困难的事情。在本文中,我们将从准备工作、环境搭建、代码部署等多个方面来讲解Python Web项目的服务器部署攻略。 二、准备工作 在进行Python项目的服务器部署之前,我们需要做好以下准备工作: …

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部