首先:https://lbs.qq.com/miniProgram/plugin/pluginGuide/routePlan 這是騰訊地圖地址


安裝一波( 這是為了防止出現騰訊地圖跨域問題 )
npm i --save vue-jsonp
在 main.js 文件
// 引入騰訊地圖
import {VueJsonp} from 'vue-jsonp'
Vue.use(VueJsonp)
manifest.json 文件開始配置
復制進去就行
搜索:usingComponents "plugins": { "routePlan": { "version": "1.0.12", "provider": " 小程序的APPID " } }, "permission": { "scope.userLocation": { "desc": "位置信息效果展示" } }
配置上自己的小程序appid
配置上去騰訊地圖創建的key

最后,在應用的文件
<!-- :polyline="polyline" --> //點 連城線,需要的可以自己配置 <map style="width: 100%; height: 300px;" :circles="circles" :scale="scale" :latitude="latitude" :longitude="longitude" :markers="covers"> <!-- <cover-view class="cover-view" @click="onControltap"></cover-view> --> </map>
data定義 顯示默認定位
// title: 'map',
latitude: 22.571164, // 默認的經緯度
longitude: 113.926937,
covers: [{
// 開始的經緯度
latitude: 22.573164, //緯度
longitude: 113.926937, //經度
// #ifdef APP-PLUS
iconPath: '../../../static/image/location@3x.png', //顯示的圖標
// #endif
// #ifndef APP-PLUS
iconPath: '../../../static/location.png', //顯示的圖標
// #endif
// title: '阿打算', //標注點名
label: {
//為標記點旁邊增加標簽
// content: '文本1', //文本
color: '#F76350', //文本顏色
// anchorX: 0, //label的坐標,原點是 marker 對應的經緯度
// anchorY: -80, //label的坐標,原點是 marker 對應的經緯度
bgColor: '#fff', //背景色
padding: 5, //文本邊緣留白
borderWidth: 1, //邊框寬度
borderColor: '#D84C29', //邊框顏色
textAlign: 'right' //文本對齊方式。
},
callout: {
content: '當前所在',
color: '#F76350',
fontSize: 12
}
},
{
// 圓圈所在的點 =》 終點
latitude: 22.57147,
longitude: 113.92663,
// #ifdef APP-PLUS
iconPath: '../../../static/image/location@3x.png', //顯示的圖標
// #endif
// #ifndef APP-PLUS
iconPath: '../../../static/location.png', //顯示的圖標
// #endif
// iconPath: '../../static/image/personal_center.png',
// title: '阿迪達斯',
// x: 39.9,
// y: 116.399,
label: {
// content: '打卡范圍',
color: '#F76350',
bgColor: '#fff',
padding: 5,
borderRadius: 4
},
callout: {
content: '打卡范圍',
color: '#F76350',
fontSize: 12
}
}
],
scale: 15, //地圖層級
// controls: [{
// //在地圖上顯示控件,控件不隨着地圖移動
// id: 1, //控件id
// // iconPath: '../../static/image/equipment_deployment_two.png', //顯示的圖標
// position: {
// //控件在地圖的位置
// left: 15,
// top: 15,
// width: 50,
// height: 50
// }
// }],
//在地圖上顯示圓
circles: [{
latitude: 22.57147,
longitude: 113.92663,
fillColor: '#AACCEE32', //填充顏色
color: '#AACCEE', //描邊的顏色
radius: 100, //半徑
strokeWidth: 2 //描邊的寬度
}],
// polyline: [{ //根據點畫線
// //指定一系列坐標點,從數組第一項連線至最后一項 => 第一個輸入開始點, 第二個輸入結束點
// // points: [{ latitude: 22.57147, longitude: 113.92663 }, { latitude: 22.57091694019413, longitude: 113.9270532131195 }],
// points: [],
// color: '#0000AA', //線的顏色
// width: 2, //線的寬度
// dottedLine: true, //是否虛線
// arrowLine: true //帶箭頭的線 開發者工具暫不支持該屬性
// }]
methods 方法 /=
//坐標轉騰訊地圖坐標
bMapTransQQMap(lng, lat) {
let locationObj = lat + ',' + lng;
let url = 'https://apis.map.qq.com/ws/coord/v1/translate';
var that = this
this.$jsonp(url, {
key: 'KKSBZ-53WRP-GBSD7-LE373-SGAQO-6UB7I',
locations: locationObj,
type: 1,
output: 'jsonp'
}).then(res => {
that.latitude = res.locations[0].lat
that.longitude = res.locations[0].lng
that.covers[0].latitude = res.locations[0].lat
that.covers[0].longitude = res.locations[0].lng
//判斷是否在規定打卡距離以內
that.GetDistance(that.covers[0].latitude, that.covers[0].longitude, that.covers[1].latitude,
that.covers[1].longitude)
})
},
//獲取當前位置 =》 由於騰訊地圖獲取定位會飄,因此采用原生獲取定位的方法。目前項目應用中屬於最准確的一個,沒有之一。
getAddress() {
if (navigator.geolocation) {
var that = this
var timer = navigator.geolocation.watchPosition(
function(ev) { //step3:用經緯度描述具體位置
// alert(parseFloat(ev.coords.longitude));
// alert(parseFloat(ev.coords.latitude));
that.bMapTransQQMap(parseFloat(ev.coords.longitude), parseFloat(ev.coords.latitude))
},
function(err) {
alert('定位超時,請稍后再試!')
// alert(err.code)
// alert(err.message)
//清除多次地理位置定位
navigator.geolocation.clearWatch(timer);
}, {
/*數據收集 : json的形式
enableHighAcuracy : 更精確的查找,默認false
timeout :指定獲取地理位置的超時時間,默認不限時,單位為毫秒
maximumAge :最長有效期,在重復獲取地理位置時,此參數指定多久再次獲取位置。
*/
enableHighAccuracy: true,
maximumAge: 2000
})
} else {
alert('您的瀏覽器不支持geolocation定位!,請更換瀏覽器');
}
},
// 方法定義 lat,lng 計算距離
GetDistance(lat1, lng1, lat2, lng2) {
var radLat1 = lat1 * Math.PI / 180.0;
var radLat2 = lat2 * Math.PI / 180.0;
var a = radLat1 - radLat2;
var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * 6378137.0; // EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
this.dakajuli = parseFloat(s)
},
騰訊地圖坐標轉換API: https://lbs.qq.com/service/webService/webServiceGuide/webServiceTranslate

