190 lines
4.9 KiB
JavaScript
190 lines
4.9 KiB
JavaScript
const tools = require('../tools.js')
|
||
// 解决微信小程序
|
||
var QQMapWX = require('./qqmap-wx-jssdk.min.js');
|
||
// 腾讯地图
|
||
var qqmapsdk = new QQMapWX({
|
||
key: 'QNHBZ-55RKF-OMFJJ-NPU7O-EPSDH-ACBAA'
|
||
});
|
||
// 解决H5跨域
|
||
const jsonp = function(url, data) {
|
||
return new Promise((resolve, reject) => {
|
||
// 1.初始化url
|
||
let dataString = url.indexOf('?') === -1 ? '?' : '&'
|
||
let callbackName = `jsonpCB_${ Date.now() }`;
|
||
url += `${ dataString }callback=${ callbackName }`
|
||
if(data) {
|
||
// 2.有请求参数,依次添加到url
|
||
for(let k in data) {
|
||
url += `&${ k }=${ data[k] }`
|
||
}
|
||
}
|
||
let scriptNode = document.createElement('script');
|
||
scriptNode.src = url;
|
||
// 3. callback
|
||
window[callbackName] = (result) => {
|
||
result ? resolve(result) : reject('没有返回数据');
|
||
delete window[callbackName];
|
||
document.body.removeChild(scriptNode);
|
||
}
|
||
// 4. 异常情况
|
||
scriptNode.addEventListener('error', () => {
|
||
reject('接口返回数据失败');
|
||
delete window[callbackName];
|
||
document.body.removeChild(scriptNode);
|
||
}, false)
|
||
// 5. 开始请求
|
||
document.body.appendChild(scriptNode)
|
||
})
|
||
}
|
||
const yayaMap = {
|
||
// 平台判断
|
||
platformEv(){
|
||
// #ifdef APP-PLUS
|
||
this.getAddress();
|
||
// #endif
|
||
// #ifdef MP-WEIXIN
|
||
this.getAddressWx();
|
||
// #endif
|
||
// #ifdef H5
|
||
this.getAddressH5();
|
||
// #endif
|
||
},
|
||
/**
|
||
* @description app获取经纬度和详细地址方法
|
||
*/
|
||
getAddress(){
|
||
uni.getLocation({
|
||
type: 'gcj02',
|
||
geocode:true,
|
||
success: (res)=> {
|
||
// console.log(res,'地址信息');
|
||
let params = {
|
||
latitude:res.latitude,
|
||
longitude:res.longitude,
|
||
address:`${res.address.province}${res.address.city}${res.address.district || ''}${res.address.street || ''}${res.address.streetNum || ''}${res.address.poiName || ''}`
|
||
}
|
||
console.log(params,'APP');
|
||
}
|
||
});
|
||
},
|
||
/**
|
||
* @description 微信获取经纬度和详细地址方法
|
||
*/
|
||
getAddressWx(){
|
||
uni.getLocation({
|
||
type: 'gcj02',
|
||
geocode:true,
|
||
success: (res)=> {
|
||
// console.log(res,'地址信息');
|
||
qqmapsdk.reverseGeocoder({
|
||
location: {latitude: res.latitude, longitude: res.longitude},
|
||
success:(res)=> {
|
||
// console.log(res,'WX');
|
||
let params = {
|
||
latitude:res.result.location.lat,
|
||
longitude:res.result.location.lng,
|
||
address:`${res.result.address}`
|
||
}
|
||
console.log(params,'WX');
|
||
},
|
||
fail(err) {
|
||
console.log(err)
|
||
}
|
||
})
|
||
}
|
||
});
|
||
},
|
||
/**
|
||
* @description H5获取经纬度和详细地址方法
|
||
*/
|
||
getAddressH5(){
|
||
uni.showLoading({
|
||
title: '定位中...',
|
||
mask:true
|
||
});
|
||
uni.getLocation({
|
||
type: 'gcj02', // wgs84 gcj02
|
||
altitude: true,
|
||
// geocode: true, // wgs84
|
||
success: (res)=> {
|
||
let str = `output=jsonp&key=QNHBZ-55RKF-OMFJJ-NPU7O-EPSDH-ACBAA&location=${res.latitude},${res.longitude}`
|
||
jsonp('https://apis.map.qq.com/ws/geocoder/v1/?'+str,{}).then(res=>{
|
||
// console.log(res,'H5');
|
||
uni.hideLoading();
|
||
if(res.status == 0){
|
||
// that.locationName = res.result.address; //当前定位
|
||
let params = {
|
||
latitude:res.result.location.lat,
|
||
longitude:res.result.location.lng,
|
||
address:`${res.result.address}`
|
||
}
|
||
console.log(params,'H5');
|
||
}
|
||
})
|
||
}
|
||
});
|
||
},
|
||
/**
|
||
* @description 打开地图导航
|
||
*/
|
||
openLocation(latitude,longitude,name,address){
|
||
uni.openLocation({
|
||
latitude: parseFloat(latitude),
|
||
longitude: parseFloat(longitude),
|
||
name:name,
|
||
address:address,
|
||
success: function () {
|
||
console.log('success');
|
||
},
|
||
fail:function(err){
|
||
console.log(err)
|
||
}
|
||
});
|
||
},
|
||
/**
|
||
* @description 传入目的地的经纬度、地点名称、详细地址,打开地图导航到达目的地
|
||
*/
|
||
goFlag:true,
|
||
goThere(latitude=30.656693,longitude=104.136425,name="大向天诚有限责任公司",address="四川省成都市成华区双店路B口"){
|
||
if(this.goFlag){
|
||
this.goFlag = false;
|
||
// #ifdef MP-WEIXIN
|
||
wx.getLocation({//获取当前经纬度
|
||
type: 'wgs84', //返回可以用于wx.openLocation的经纬度,官方提示bug: iOS 6.3.30 type 参数不生效,只会返回 wgs84 类型的坐标信息
|
||
success: (res)=> {
|
||
wx.openLocation({//使用微信内置地图查看位置。
|
||
latitude: parseFloat(latitude),//要去的纬度-地址
|
||
longitude: parseFloat(longitude),//要去的经度-地址
|
||
name: name,
|
||
address: address,
|
||
fail:err=>{
|
||
tools.showToast('地址信息错误');
|
||
}
|
||
})
|
||
}
|
||
})
|
||
// #endif
|
||
|
||
// #ifdef APP-PLUS || H5
|
||
uni.openLocation({
|
||
latitude: parseFloat(latitude),
|
||
longitude: parseFloat(longitude),
|
||
name:name,
|
||
address:address,
|
||
success:()=> {
|
||
console.log('success');
|
||
},
|
||
fail:err=>{
|
||
console.log(err)
|
||
}
|
||
});
|
||
// #endif
|
||
setTimeout(()=>{
|
||
this.goFlag = true;
|
||
},2000)
|
||
} else {
|
||
tools.showToast('请勿多次点击');
|
||
}
|
||
}
|
||
}
|
||
export default yayaMap; |