亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序使用map組件實現路線規劃功能示例

2020-03-21 16:02:58
字體:
來源:轉載
供稿:網友

本文實例講述了微信小程序使用map組件實現路線規劃功能。分享給大家供大家參考,具體如下:

效果圖

微信小程序,map組件,路線規劃

實現原理

1. 通過map組件標記起始點和繪制路線圖;
2. 通過高德地圖API獲取不同類型的路線坐標點,以及耗費時間和路程。

WXML

<view class="flex-style"> <view class="flex-item {{status == 'car' ? 'active' : ''}}" data-status="car" bindtouchstart="goTo">駕車</view> <view class="flex-item {{status == 'walk' ? 'active' : ''}}" data-status="walk" bindtouchstart="goTo">步行</view> <view class="flex-item {{status == 'bus' ? 'active' : ''}}" data-status="bus" bindtouchstart="goTo">公交</view> <view class="flex-item {{status == 'ride' ? 'active' : ''}}" data-status="ride" bindtouchstart="goTo">騎行</view></view><view class="map-inputtips-input"> <input bindinput="bindInput" placeholder="輸入終點" focus="true" /></view><view class="map-search-list {{isShow ? '' : 'map-hide'}}"> <view bindtouchstart="bindSearch" wx:key="searchId" data-keywords="{{item.name}}" data-location="{{item.location}}" class="map-box" wx:for="{{tips}}">  {{item.name}} </view></view><view class="map_box {{detailStatus ? 'active' : ''}}"> <map id="navi_map" longitude="{{longitude}}" latitude="{{latitude}}" scale="14" include-points='{{points}}' markers="{{markers}}" polyline="{{polyline}}"></map></view><view class="text_box {{detailStatus ? '' : 'map-hide'}}"> <view class="text">路程:{{distance}}米</view> <view class="text">耗時:{{cost}}分鐘</view> <view class="detail_button" bindtouchstart="goDetail">詳情</view></view>

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_box{ position:absolute; top: calc(35px + 80rpx); bottom: 0px; left: 0px; right: 0px;}.map_box.active{bottom: 90px;}#navi_map{ width: 100%; height: 100%;}.text_box{ position:absolute; height: 90px; bottom: 0px; left: 0px; right: 0px;}.text_box .text{ margin: 15px; color: lightseagreen;}.detail_button{ position:absolute; bottom: 30px; right: 10px; padding: 3px 5px; color: #fff; background: #0091ff; width:50px; text-align:center; border-radius:5px;}.map-inputtips-input{ height: 80rpx; line-height: 80rpx; width: 100%; box-sizing: border-box; font-size: 30rpx; padding: 0 10px; background-color: #fff; position: fixed; top: 35px; left: 0; z-index: 1000; border-bottom:1px solid #c3c3c3;}.map-inputtips-input input{ border: 1px solid #ddd; border-radius: 5px; height: 60rpx; line-height: 60rpx; width: 100%; box-sizing: border-box; padding: 0 5px; margin-top: 10rpx;}.map-box{ margin: 0 10px; border-bottom:1px solid #c3c3c3; height: 80rpx; line-height: 80rpx;}.map-box:last-child{border: none;}.map-search-list{ position: fixed; top: calc(80rpx + 35px); left: 0; width: 100%; z-index: 1000; background-color: #fff;}

JS

const app = getApp();const amap = app.data.amap;const key = app.data.key;Page({ data: {  longitude: '',  latitude: '',  isShow: false,  detailStatus: false,  status: '',  markers: [],  points: [],  distance: '',  cost: '',  city: '',  tips: {},  polyline: [] }, onLoad() {  var _this = this;  wx.getLocation({   success: function (res) {    if (res && res.longitude) {     _this.setData({      longitude: res.longitude,      latitude: res.latitude,      points: [{       longitude: res.longitude,       latitude: res.latitude      }],      markers: [{       id: 0,       longitude: res.longitude,       latitude: res.latitude,       iconPath: '../../src/images/navi_s.png',       width: 32,       height: 32      }]     })    }   }  }) }, bindInput: function (e) {  var _this = this;  var keywords = e.detail.value;  var myAmap = new amap.AMapWX({ key: key });  myAmap.getInputtips({   keywords: keywords,   location: '',   success: function (res) {    if (res && res.tips) {     var address = res.tips[0].district;     _this.setData({      isShow: true,      city: address.substring(address.indexOf('省') + 1, address.indexOf('市')),      tips: res.tips     });    }   }  }) }, bindSearch: function (e) {  var keywords = e.target.dataset.keywords;  var location = e.target.dataset.location;  location = location.split(',');  if (this.data.markers.length > 1 && this.data.points.length > 1){   this.data.markers.pop();   this.data.points.pop();   this.setData({ polyline:[]});  }  var markers = this.data.markers;  var points = this.data.points;  markers.push({   id: 0,   longitude: location[0],   latitude: location[1],   iconPath: '../../src/images/navi_e.png',   width: 32,   height: 32  });  points.push({   longitude: location[0],   latitude: location[1]  })  this.setData({   isShow: false,   markers: markers,   points: points  }) }, goTo(e) {  if (this.data.points.length < 2) {   wx.showToast({ title: '請輸入終點' })   return;  }  var status = e.target.dataset.status;  var myAmap = new amap.AMapWX({ key: key });  switch (status) {   case 'car':    myAmap.getDrivingRoute(this.getDataObj('#4B0082'));    break;   case 'walk':    myAmap.getWalkingRoute(this.getDataObj());    break;   case 'bus':    myAmap.getTransitRoute(this.getBusData('#008B8B'));    break;   case 'ride':    myAmap.getRidingRoute(this.getDataObj('#00FFFF'));    break;   default:    return;  }  this.setData({   detailStatus: true,   status: status  }) }, getDataObj(color) {  var _this = this;  var color = color || "#0091ff";  return {   origin: _this.data.points[0].longitude + ',' + _this.data.points[0].latitude,   destination: _this.data.points[1].longitude + ',' + _this.data.points[1].latitude,   success(data) {    var points = [];    if (!data.paths || !data.paths[0] || !data.paths[0].steps) {     wx.showToast({ title: '失??!' });     return;    }    if (data.paths && data.paths[0] && data.paths[0].steps) {     var steps = data.paths[0].steps;     for (var i = 0; i < steps.length; i++) {      var poLen = steps[i].polyline.split(';');      for (var j = 0; j < poLen.length; j++) {       points.push({        longitude: parseFloat(poLen[j].split(',')[0]),        latitude: parseFloat(poLen[j].split(',')[1])       })      }     }    }    _this.setData({     distance: data.paths[0].distance,     cost: parseInt(data.paths[0].duration / 60),     polyline: [{      points: points,      color: color,      width: 6     }]    });   },   fail(info) {    wx.showToast({ title: '失敗!' })   }  } }, getBusData(color) {  var _this = this;  var color = color || "#0091ff";  return {   origin: _this.data.points[0].longitude + ',' + _this.data.points[0].latitude,   destination: _this.data.points[1].longitude + ',' + _this.data.points[1].latitude,   city: _this.data.city,   success(data) {    var points = [], cost = 0;    if (data && data.transits) {     var transits = data.transits;     for (var i = 0; i < transits.length; i++) {      cost += parseInt(transits[i].duration);      var segments = transits[i].segments;      for (var j = 0; j < segments.length; j++) {       if (segments[j].bus.buslines[0] && segments[j].bus.buslines[0].polyline) {        var steps = segments[j].bus.buslines[0].polyline.split(';');        for (var k = 0; k < steps.length; k++) {         var point = steps[k].split(',');         points.push({          longitude: point[0],          latitude: point[1]         })         if (parseInt(point[0] * 100000) === parseInt(_this.data.points[1].longitude * 100000) && parseInt(point[1] * 100000) === parseInt(_this.data.points[1].latitude * 100000)){          _this.setData({           distance: data.distance,           cost: parseInt(cost / 60),           polyline: [{            points: points,            color: color,            width: 6           }]          });          return ;         }        }       }      }     }    }   },   fail(info) {    wx.showToast({ title: '失敗!' })   }  } }})

實現步驟

1. 利用 input 輸入終點地址關鍵字;
2. 通過關鍵字利用高德地圖API(getInputtips)獲取地址坐標列表;
3. 列表添加選中事件,獲取具體的 location ,進行地圖標記;
4. 選擇路線類型(駕車,騎行等),通過高德地圖對應的API獲取規劃坐標;
5. 繪制路線。
6. 注意:在返回的路線坐標數據格式,公交和其他三種方式的數據格式不同,需要單獨進行處理(單獨處理公交數據的方法: getBusData)。

希望本文所述對大家微信小程序開發有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产999在线| 亚洲国产成人精品久久久国产成人一区| 亚洲免费影视第一页| 国模私拍视频一区| 日韩成人激情视频| 91高潮在线观看| 亚洲美女免费精品视频在线观看| 国产又爽又黄的激情精品视频| 国产精品网站大全| 日韩精品小视频| 91精品免费视频| 美日韩精品免费视频| 最好看的2019的中文字幕视频| 91po在线观看91精品国产性色| 久久视频在线免费观看| 国产区精品在线观看| 欧美激情视频网| 久久91精品国产91久久久| 爽爽爽爽爽爽爽成人免费观看| 亚洲一区二区日本| 亚洲精品视频播放| 欧美激情xxxxx| 欧美激情在线播放| 国产性猛交xxxx免费看久久| 欧美精品成人91久久久久久久| 国产网站欧美日韩免费精品在线观看| 亚洲一区二区三区毛片| 国产精品美女www| 欧美成人精品在线观看| 欧美丝袜一区二区三区| 欧美激情精品久久久久久| 国产精品女人久久久久久| 亚洲小视频在线| 欧美日本黄视频| 伊人一区二区三区久久精品| 日韩视频免费看| 午夜精品久久久久久久久久久久久| 国产精品精品久久久久久| 成人www视频在线观看| 深夜福利国产精品| 亚洲激情视频在线播放| 日本不卡视频在线播放| 亚洲性视频网址| 国产亚洲欧洲黄色| 国产97免费视| 亚洲精品黄网在线观看| 黑人与娇小精品av专区| 欧美成人精品一区二区| 国产脚交av在线一区二区| 97久久久久久| 欧美在线视频一区二区| 久久精品人人爽| 日韩中文字幕在线免费观看| 日韩av一卡二卡| 精品人伦一区二区三区蜜桃免费| 97国产在线观看| 成人av色在线观看| 欧美网站在线观看| 九九久久精品一区| 亚洲欧美成人一区二区在线电影| 国内伊人久久久久久网站视频| 国产玖玖精品视频| 亚洲一区二区精品| 色爱精品视频一区| 午夜精品国产精品大乳美女| 日韩日本欧美亚洲| 国产精品毛片a∨一区二区三区|国| 琪琪第一精品导航| 夜夜嗨av色综合久久久综合网| 亚洲大胆美女视频| 国内精品免费午夜毛片| 色老头一区二区三区在线观看| 日韩成人在线视频网站| 91免费国产网站| 久久中文字幕在线| 久久久精品国产一区二区| 国产欧美精品日韩精品| 在线免费观看羞羞视频一区二区| 欧美日韩国产中文精品字幕自在自线| 久久人人爽人人爽爽久久| 精品女厕一区二区三区| 国产男女猛烈无遮挡91| 78色国产精品| 综合激情国产一区| 亚洲免费av电影| 精品欧美aⅴ在线网站| 亚洲国产精品热久久| 日韩欧美大尺度| 国产精品久久久亚洲| 亚洲国产成人精品久久久国产成人一区| 久久av资源网站| 97视频在线观看亚洲| 亚洲精品视频在线播放| 欧美日韩在线视频一区二区| 91精品国产91久久久久| 国语自产精品视频在线看| 国产精品对白刺激| 国产精品露脸av在线| 国产一区二区三区网站| 精品国产一区二区三区四区在线观看| 亚洲人成在线观看| 4p变态网欧美系列| 日韩美女视频在线观看| 欧美激情在线观看视频| 精品人伦一区二区三区蜜桃免费| 国产精品揄拍一区二区| 成人国产精品免费视频| 91精品国产网站| 亚洲欧美另类中文字幕| 欧美激情精品久久久久久久变态| 亚洲黄色www网站| 亚洲午夜未删减在线观看| 欧美激情2020午夜免费观看| 91视频国产一区| 欧美日韩国产丝袜另类| 国产一区二区日韩| 久久久这里只有精品视频| 精品国产91乱高清在线观看| 国产精品亚洲欧美导航| 国产欧美久久久久久| 国产网站欧美日韩免费精品在线观看| 国产精品久久久久久影视| 国产精品69精品一区二区三区| 欧美日韩日本国产| 久久免费观看视频| 久久精品91久久香蕉加勒比| 亚洲国产一区二区三区四区| 疯狂蹂躏欧美一区二区精品| 久久久免费精品| 亚洲一区二区三区久久| 欧美黄网免费在线观看| 91亚洲精品久久久| 最新国产精品拍自在线播放| 国产精品黄色av| 欧美在线视频在线播放完整版免费观看| 亚洲美女又黄又爽在线观看| 欧美日韩在线视频首页| 亚洲欧美日韩一区二区三区在线| 日韩高清电影免费观看完整| 久久99亚洲热视| 成人免费淫片视频软件| 成人黄色中文字幕| 欧美xxxx14xxxxx性爽| 日韩大陆欧美高清视频区| 国产精品精品久久久| 色综合天天综合网国产成人网| 亚洲国产精品女人久久久| 国产精品劲爆视频| 欧美精品第一页在线播放| 亚洲成人aaa| 欧美激情性做爰免费视频| 成人网页在线免费观看| 88xx成人精品| 色偷偷9999www| www.日本久久久久com.| 国产美女精彩久久| 欧美肥婆姓交大片| 国产欧美精品一区二区三区-老狼| 欧美自拍大量在线观看| 精品亚洲夜色av98在线观看| 精品国产拍在线观看| 国产一区二区三区在线看| 亚洲美女视频网站| 国模精品一区二区三区色天香|