uniapp h5地图必须选择腾讯地图,这是uniapp规定的 1.引入定位服务 首先来到腾讯地图开放平台,申请一个key 这是可以多选的,但必须勾选webservice api,如果你报这个问题了,就是没勾选
接下来就可以用定位功能
如果需要具体信息,只能为app端,因为H5只有经纬度
https://uniapp.dcloud.io/api/location/location.html#getlocation
uni.getLocation({
type: 'gcj02',
geocode: true,
success: (res) => {
console.log(res)
},
complete: (e) => {
console.log(e);
},
fail: (e) => {
console.log(e);
}
});
下面介绍怎么获取两个点,或者多个点之间距离
点击跳转到腾讯地图api
它这里其实就是发了个网络请求,但是你需要注意的是,如果使用axios,或者uni.request
一定会跨域问题,所以这时候,你就需要使用jsonp,这也是腾讯官网推荐的
推荐使用vue-jsonp
外部数据结构
onLoad() {
computeDistance([[38.8626430801, 121.5300857178],[38.8626430801, 121.5300857178]]).then((res)=>{
console.log(res);
})
}
import { jsonp } from 'vue-jsonp'
export const computeDistance = (...fromList) => {
return new Promise((resolve, reject) => {
uni.getLocation({
type: 'gcj02',
geocode: true,
success: (res) => {
const latitude = res.latitude;
const longitude = res.longitude;
const newFormList = fromList.reduce((previousValue, currentValue) => {
return previousValue.concat(currentValue)
}, [])
getDistanceData([latitude, longitude], newFormList);
},
fail: (e) => {
console.error(e);
}
});
function isAvailableArray(arr) {
return arr && Array.isArray(arr) && arr.length > 0;
}
function parmaHandler(from, to) {
let distanceFrom = undefined;
let distanceTo = undefined;
distanceFrom = [...from].toString();
if (to.length === 1) {
distanceTo = [...to].toString();
}
if (to.length > 1) {
distanceTo = to.reduce((str, cur, index) => {
return str += index + 1 === to.length ? cur.toString() : cur.toString() + ';'
}, '');
}
return {
distanceFrom: distanceFrom,
distanceTo: distanceTo
}
}
function getDistanceData(from, to) {
let distanceData = [];
if (!from || !to) return;
if (!isAvailableArray(from) || !isAvailableArray(to)) return;
let data = parmaHandler(from, to);
jsonp('https://apis.map.qq.com/ws/distance/v1/matrix', {
mode: 'walking',
from: data.distanceFrom,
to: data.distanceTo,
key: '你的key',
output: 'jsonp'
}).then((data) => {
if (!isAvailableArray(data.result.rows)) return;
const row = data.result.rows;
row.forEach((item) => {
if (isAvailableArray(item.elements)) {
distanceData = item.elements.map(item => item.distance);
resolve(distanceData);
}
})
})
}
})
};
最后如果你有更好的方式,可以留言,看到这里了,点个赞吧!!
|