利用uniapp开发一个简单的地图导航
更新时间:2023-10-14需求分析
地图导航一般都需要定位功能,这就需要使用到地图API。在此我们将使用高德地图的API。通过定位获取用户的当前位置,找出目的地的经纬度,再在地图上进行导航。因此我们需要使用uniapp提供的定位API和高德地图SDK。
代码实现
首先在manifest.json文件中添加高德地图的key,如下所示:
{ "app-plus": { "res": { "apiKey": "在此处输入高德地图apiKey" } } }
接下来在需要使用地图的页面的js文件中,引入高德地图sdk和uniapp提供的定位API,如下所示:
import { getSetting, openSetting, getLocation } from '@uni/location'; import $ from 'jquery'; let AMap = require('@/common/libs/amap-wx.js'); // 引入UI组件库 import AMapUI from '@amap/amapui-plugin-react'
通过定位API获取用户当前位置,如下所示:
async getLocation() { let setting = await getSetting(); if (!setting.authSetting['scope.userLocation']) { await openSetting(); } let location = await getLocation(); console.log('当前位置', location); // 返回值示例: // { // longitude: 116.409119, // latitude: 39.904577 // } return { longitude: location.longitude, latitude: location.latitude }; }
在获取到用户的位置后,我们可以调用高德地图的导航功能,将用户当前位置和目的地位置,在地图上进行导航。代码如下所示:
async navigate() { // 获取用户当前位置 let location = await this.getLocation(); let { longitude, latitude } = location; let destPosition = new AMap.LngLat(this.dest.longitude, this.dest.latitude); let currentPosition = new AMap.LngLat(longitude, latitude); AMap.plugin('AMap.Driving', () => { var driving = new AMap.Driving({ policy: AMap.DrivingPolicy.LEAST_TIME, map: this.map, panel: 'panel' }); driving.search([currentPosition, destPosition], (status, result) => { // ... }); }); }
代码规范
在编写代码时,应注意命名规范,变量名要能够清晰的表达出变量的含义,函数和类的命名要符合常规,代码注释要够详细,这样有助于其他开发人员维护代码。此外,在使用sdk时要注意版本号,不能使用过期的sdk版本,否则会有兼容性问题。
最后,遵循前后端分离的开发模式,前端只负责视图展示和用户交互,不应该在前端中处理业务逻辑;而业务逻辑应该交给后端,这样有利于代码维护和后续开发。