热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

高德地图小程序步行路线显示_微信小程序高德地图路线规划实现过程详解

前言最近项目中做到相关网约车小程序。需要使用到地图中的路线规划,对3种地图进行了分析。这里稍微做一下总结:百度地图百度坐标(BD-09)腾讯地图火星坐标

前言

最近项目中做到相关网约车小程序。需要使用到地图中的路线规划,对3种地图进行了分析。这里稍微做一下总结:

百度地图 百度坐标 (BD-09)

腾讯地图 火星坐标(GCJ-02)

高德地图 火星坐标(GCJ-02)

微信小程序中使用的是腾讯地图作为底图。因此如果使用百度地图时,需要注意坐标的转换。此类坐标的转换函数在网上都有,这里不做过多解释

准备工作:

1、在做小程序 ---- 路线规划之前,需要准备小程序APPID 以及相应使用地图的KEY值。

2、微信小程序API 之 位置 API wx.getLocation(OBJECT)、wx.chooseLocation(OBJECT)、wx.openLocation(OBJECT)的相应用法:https://www.gxlcms.com/article/166968.htm

各地图平台-------小程序开发的官方文档

1、高德地图: 微信小程序-路线规划,地图导航功能基于高德地图API官方文档 https://lbs.amap.com/api/wx/guide/route/route

2、百度地图: 微信小程序Javascript API ----- http://lbsyun.baidu.com/index.php?title=wxjsapi (百度地图路线规划适用于:android / ios / web,故不适用,排除百度地图)

3、腾讯地图: 微信小程序Javascript SDK 路线规划 --------- https://lbs.qq.com/qqmap_wx_jssdk/method-direction.html

因此使用高德地图和腾讯地图都可以进行路线规划,通过学习官方文档,了解到其实这两个平台的代码思路是一样的,以下以高德地图为例作详细的说明:

高德地图-路线规划开发:根据官方文档demo进行开发 :https://lbs.amap.com/api/wx/guide/route/route

注意:数组数据在setData时候的使用方法

var markesName = "markers[" + 0 + "].name";

that.setData({

[markesName]: name,

})

注意需要先加载头部的相关文件

var amapFile = require('../../libs/amap-wx.js');

var config = require('../../libs/config.js');

文件config.js

var config = {

key: '1***********************'

}

module.exports.Config = config;

效果图:

相关代码:

location.js

var amapFile = require('../../libs/amap-wx.js');

var config = require('../../libs/config.js');

const app = getApp()

Page({

/**

* 页面的初始数据

*/

data: {

markers: [{

iconPath: "../../img/mapicon_navi_s.png",

id: 0,

latitude: 39.989643,

longitude: 116.481028,

width: 23,

height: 33

}, {

iconPath: "../../img/mapicon_navi_e.png",

id: 0,

latitude: 39.90816,

longitude: 116.434446,

width: 24,

height: 34

}],

distance: '',

cost: '',

state: 0,

polyline: []

},

/**

* 生命周期函数--监听页面加载

*/

onLoad: function(options) {

console.log(11);

var that = this

wx.showLoading({

title: "定位中",

mask: true

})

wx.getLocation({

type: 'gcj02',

altitude: true, //高精度定位

success: function(res) {

console.info(res);

var latitude = res.latitude

var longitude = res.longitude

var speed = res.speed

var accuracy = res.accuracy

that.setData({

markers: [{

name: '当前位置',

latitude: latitude,

longitude: longitude

}, {

name: '您要去哪儿?',

latitude: '',

longitude: ''

}]

})

},

fail: function() {

wx.showToast({

title: "定位失败",

icon: "none"

})

},

complete: function() {

wx.hideLoading()

}

})

},

getFormAddress: function() {

var that = this;

wx.chooseLocation({

success: function(res) {

console.log(res);

var name = res.name

var address = res.address

var latitude = res.latitude

var longitude = res.longitude

var markesName = "markers[" + 0 + "].name";

var markesLatitude = "markers[" + 0 + "].latitude";

var markeslongitude = "markers[" + 0 + "].longitude";

var markesiconPath = "markers[" + 0 + "].iconPath";

that.setData({

[markesName]: name,

[markesLatitude]: latitude,

[markeslongitude]: longitude,

[markesiconPath]: "../../img/mapicon_navi_s.png"

})

console.log('address1', that.data);

},

fail: function() {

wx.showToast({

title: '定位失败',

icon: "none"

})

},

complete: function() {

//隐藏定位中信息进度

wx.hideLoading()

}

})

},

getToAddress: function() {

var that = this;

wx.chooseLocation({

success: function(res) {

console.log(res);

var name = res.name

var address = res.address

var latitude = res.latitude

var longitude = res.longitude

var markesName = "markers[" + 1 + "].name";

var markesLatitude = "markers[" + 1 + "].latitude";

var markeslongitude = "markers[" + 1 + "].longitude";

var markesiconPath = "markers[" + 1 + "].iconPath";

that.setData({

[markesName]: name,

[markesLatitude]: latitude,

[markeslongitude]: longitude,

[markesiconPath]: "../../img/mapicon_navi_e.png"

})

console.log('address1', that.data);

},

fail: function() {

wx.showToast({

title: '定位失败',

icon: "none"

})

},

complete: function() {

//隐藏定位中信息进度

wx.hideLoading()

}

})

},

/**

* 确定

*/

getSure: function() {

var that = this;

var origin = that.data.markers[0].longitude + ',' + that.data.markers[0].latitude;

var destination = that.data.markers[1].longitude + ',' + that.data.markers[1].latitude;

app.origin = origin;

app.destination = destination;

console.log('origin', origin);

console.log('destination', destination);

var key = config.Config.key;

var myAmapFun = new amapFile.AMapWX({

key: key

});

myAmapFun.getDrivingRoute({

origin: origin,

destination: destination,

// origin: '116.481028,39.989643',

// destination: '116.434446,39.90816',

success: function(data) {

var points = [];

if (data.paths && data.paths[0] && data.paths[0].steps) {

var steps = data.paths[0].steps;

for (var i = 0; i

var poLen = steps[i].polyline.split(';');

for (var j = 0; j

points.push({

longitude: parseFloat(poLen[j].split(',')[0]),

latitude: parseFloat(poLen[j].split(',')[1])

})

}

}

}

that.setData({

state: 1,

polyline: [{

points: points,

color: "#0091ff",

width: 6

}]

});

if (data.paths[0] && data.paths[0].distance) {

that.setData({

distance: data.paths[0].distance + '米'

});

}

if (data.taxi_cost) {

that.setData({

cost: '打车约' + parseInt(data.taxi_cost) + '元'

});

}

console.log('that', that);

}

})

},

/**

* 详情页

*/

goDetail: function() {

var that = this;

wx.navigateTo({

url: '../detail/detail'

})

}

})

location.wxml

出发地:

目的地:

确定

{{distance}}

{{cost}}

详情

location.wxss

.flex-style{

display: -webkit-box;

display: -webkit-flex;

display: flex;

}

.flex-item{

height: 35px;

line-height: 35px;

text-align: center;

-webkit-box-flex: 1;

-webkit-flex: 1;

flex: 1

}

.flex-item.active{

color:#0091ff;

}

.map_title{

position:absolute;

top: 10px;

bottom: 110px;

left: 0px;

right: 0px;

}

.map_btn{

position:absolute;

top: 120px;

bottom: 220px;

left: 0px;

right: 0px;

}

.map_box{

position:absolute;

top: 160px;

bottom: 90px;

left: 0px;

right: 0px;

}

#navi_map{

width: 100%;

height: 100%;

}

.text_box{

position:absolute;

height: 90px;

bottom: 0px;

left: 0px;

right: 0px;

}

.text_box .text{

margin: 15px;

}

.detail_button{

position:absolute;

bottom: 30px;

right: 10px;

padding: 3px 5px;

color: #fff;

background: #0091ff;

width:50px;

text-align:center;

border-radius:5px;

}

点击详情跳转页,显示导航详细说明:

detail.js

var amapFile = require('../../libs/amap-wx.js');

var config = require('../../libs/config.js');

const app = getApp()

Page({

data: {

steps: {}

},

onLoad: function () {

var that = this;

var key = config.Config.key;

var myAmapFun = new amapFile.AMapWX({ key: key });

myAmapFun.getDrivingRoute({

origin: app.origin,

destination: app.destination,

success: function (data) {

if (data.paths && data.paths[0] && data.paths[0].steps) {

that.setData({

steps: data.paths[0].steps

});

}

},

fail: function (info) {

}

})

}

})

detail.wxml

{{i.instruction}}

这只是个人的一个demo用例。仅做参考。其中还有很多瑕疵,不要介意哈。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网



推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 本文探讨为何Request对象的外观设计被认为是精妙的,重点在于其如何利用门面模式确保数据安全,同时保持系统的高效交互。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • WebBenchmark:强大的Web API性能测试工具
    本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 本文详细介绍了在Luat OS中如何实现C与Lua的混合编程,包括在C环境中运行Lua脚本、封装可被Lua调用的C语言库,以及C与Lua之间的数据交互方法。 ... [详细]
  • 本文探讨了使用lightopenid库实现网站登录,并在用户成功登录后,如何获取其姓名、电子邮件及出生日期等详细信息的方法。特别针对Google OpenID进行了说明。 ... [详细]
  • 函子(Functor)是函数式编程中的一个重要概念,它不仅是一个特殊的容器,还提供了一种优雅的方式来处理值和函数。本文将详细介绍函子的基本概念及其在函数式编程中的应用,包括如何通过函子控制副作用、处理异常以及进行异步操作。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
author-avatar
我还没公主
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有