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

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

一、效果介绍

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

二、实现方式

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://output和php://stdout的区别

    当我们在PHP中使用echo或print输出内容时,输出的内容将被发送到标准输出流(stdout),然后发送到Web服务器或客户端浏览器。在PHP中有两个不同的I/O流,即php://output和php://stdout。这两个I/O流虽然看起来很类似,但它们的功能上有一些重要的区别。 分析php://output和php://stdout的区别 php:…

    PHP 2023年5月26日
    00
  • 微信小程序 wx.request方法的异步封装实例详解

    下面是关于“微信小程序 wx.request方法的异步封装实例详解”的攻略: 前言 在进行微信小程序开发时,我们经常会用到wx.request()方法发起网络请求,但是该方法是异步的,这就需要我们充分掌握异步编程的知识。本文将结合两个示例详细讲解wx.request()方法的异步封装实例。 示例一 首先介绍一个简单的异步封装实例,来发起一个get请求: co…

    PHP 2023年5月23日
    00
  • 删除数组元素实用的PHP数组函数

    下面是删除数组元素实用的PHP数组函数的完整攻略: 一、背景 在实际开发中,我们经常需要对数组进行操作,其中删除数组元素是常见的一种操作。PHP提供了多个函数帮助我们快速实现这一操作。 二、常用的删除数组元素函数 以下是PHP中常用的删除数组元素函数: 1. unset() unset() 函数用于释放指定的变量。在使用时,我们可以将需要删除的数组元素的下标…

    PHP 2023年5月26日
    00
  • PHP实现多进程并行操作的详解(可做守护进程)

    我可以给你详细讲解如何使用PHP实现多进程并行操作并作为守护进程运行的方法。 什么是多进程并行操作 多进程并行操作是指程序可以同时运行多个进程,每个进程可以独立地执行不同的任务。这个功能在某些场景下非常有用,特别是在需要执行耗时任务或需要处理大量数据时。对于PHP程序员来说,使用多进程并行操作可以提高程序的性能。 如何实现多进程并行操作 在PHP中,实现多进…

    PHP 2023年5月23日
    00
  • PHPThumb PHP 图片缩略图库

    PHPThumb 是一个开源的 PHP 图片缩略图库,它能够动态生成缩略图,并且还支持水印、旋转、裁剪等功能。下面是 PHPThumb 的使用攻略。 安装 PHPThumb 是一个 PHP 库,可以通过 Composer 进行安装。在项目根目录下运行下面的命令即可: composer require masterexploder/phpthumb 基本用法 …

    PHP 2023年5月27日
    00
  • PHP游戏编程25个脚本代码

    PHP游戏编程25个脚本代码是一个包含了25个PHP脚本的项目,该项目旨在向开发者展示游戏开发中常用的技术和编程方法。接下来,我将为您详细介绍该项目的完整攻略。 项目概述 该项目包含25个PHP脚本,每个脚本都实现了一个小游戏,涉及到了游戏开发中的常用技术和编程方法,如物理引擎、音效、碰撞检测等。 安装与配置 该项目可以通过从GitHub克隆或下载ZIP文件…

    PHP 2023年5月24日
    00
  • 为Nginx和Apache配置多版本PHP、切割多个conf文件

    有时候我们的项目不可能都是同一个PHP版本,需要每个项目都配置不同版本的PHP,宝塔和PHPStudy就是通过以下配置实现的: Nginx 切割conf(非选) 在nginx.conf添加 include vhosts/*.conf; 这样Nginx会自动引入当前目录->vhosts目录下的所有*.conf文件,方便每个项目单独管理Nginx配置文件 …

    PHP 2023年4月18日
    00
  • java分布式基于RestTemplate的使用方法

    下面是我为您提供的“Java分布式基于RestTemplate的使用方法”的完整攻略: 1. 什么是RestTemplate? RestTemplate是Spring框架提供的一个用于访问Rest服务的客户端,它通过简单的RESTful API从远程HTTP资源中提取数据。在使用RestTemplate之前,需要为应用程序提供Restful服务的API,其中…

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