樣品介紹
本文介紹如何使用組件映射和API中的MapContext wx.getLocation執(zhí)行活動音軌播放。
最終效果:
實現(xiàn)過程
1、文件index.wxml代碼如下,這一塊比較簡單,可自行查看分析;
<!--index.wxml-->
<view class="container">
<map id="map" longitude="{{longitude}}" latitude="{{latitude}}" scale="14" markers="{{markers}}" polyline="{{polyline}}" enable-satellite="{{satellite}}" show-location style="width: 100%; height: 100vh;"></map>
</view>
2、文件index.js存放所有功能的邏輯代碼,相對比較復雜,主要分析幾個重點方法:
1)方法getDistance用于計算兩個坐標點之間的距離,參數(shù)為兩個坐標點的經緯度;
2)方法translateMarker使用translateMarker實現(xiàn)marker平移,為了實現(xiàn)多點之間連續(xù)平移,在內部嵌套方法translateMarker;
3)wx.getLocation用來獲取當前的坐標點。
Tips:
points中的“+-”0.01等,無特別意義,可以自己任意修改;實際情況可調用接口獲取軌跡數(shù)據(jù);
duration = getDistance * 2中的2,無特別意義,可根據(jù)實際情況自行調整。
// 全屏地圖路線圖并動畫移動
// polyline中的points可以獲取json用來繪制軌跡圖
// 獲取應用實例
const app = getApp()
Page({
data: {
markers: [], // 標記點集合
polyline: [], // 坐標點集合
satellite: true, // 是否開啟衛(wèi)星圖
i: 0 // 用于循環(huán)
},
onReady: function() {
= wx.createMapContext('map'); // 創(chuàng)建 map 上下文 MapContext 對象
},
onLoad: function() {
let that = this;
// 獲取當前坐標
wx.getLocation({
type: 'wgs84',
success: (res) => {
// 坐標集合
let points = [{
longitude: res.longitude,
latitude: res.latitude
}, {
longitude: res.longitude + 0.01,
latitude: res.latitude + 0.01
}, {
longitude: res.longitude - 0.01,
latitude: res.latitude + 0.02
}, {
longitude: res.longitude - 0.01,
latitude: res.latitude + 0.01
}, {
longitude: res.longitude,
latitude: res.latitude
}];
// 標記點集合
let markers = points;
markers.map((value, index) => {
markers[index].id = index + 1;
});
({
polyline: [{
points: points,
color: "#FF0000DD",
width: 2
}],
markers: markers,
latitude: res.latitude,
longitude: res.longitude
})
(markers);
}
})
},
// 平移marker,帶動畫
translateMarker: function(markers) {
let that = this;
let markerId = markers[].id;
let destination = {
longitude: markers[ + 1].longitude,
latitude: markers[ + 1].latitude
};
let getDistance = (markers[].latitude, markers[].longitude, markers[ + 1].latitude, markers[ + 1].longitude);
let duration = getDistance * 2; // 根據(jù)距離計算平移的速度,看起來保持勻速
.translateMarker({
markerId: markerId,
destination: destination,
autoRotate: true,
rotate: 30,
duration: duration,
success(res) {
({
i: + 1
});
// 小于長度減1才執(zhí)行
if ( < markers.length - 1) {
(markers);
}
},
fail(err) {
con('fail', err)
}
})
},
// 計算兩坐標點之間的距離
getDistance: function(lat1, lng1, lat2, lng2) {
let rad1 = lat1 * Ma / 180.0;
let rad2 = lat2 * Ma / 180.0;
let a = rad1 - rad2;
let b = lng1 * Ma / 180.0 - lng2 * Ma / 180.0;
let r = 6378137;
return (r * 2 * Ma(a / 2), 2) + Ma(rad1) * Ma(rad2) * Ma(b / 2), 2)))).toFixed(0)
}
})
1.《關于微信步數(shù)怎么看以前的,你需要知道這些微信小程序實現(xiàn)活動軌跡回放》援引自互聯(lián)網,旨在傳遞更多網絡信息知識,僅代表作者本人觀點,與本網站無關,侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《關于微信步數(shù)怎么看以前的,你需要知道這些微信小程序實現(xiàn)活動軌跡回放》僅供讀者參考,本網站未對該內容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉載時請保留本站內容來源地址,http://f99ss.com/gl/2971174.html