185 lines
4.9 KiB
JavaScript
185 lines
4.9 KiB
JavaScript
|
let app = getApp();
|
||
|
var QQMapWX = require("./qqmap-wx-jssdk.min.js");
|
||
|
|
||
|
function checkGPS(t, fn=null) {
|
||
|
wx.authorize({
|
||
|
scope: "scope.userLocation",
|
||
|
success: function () {
|
||
|
console.log("get GPS success"), wx.getLocation({
|
||
|
success: function (n) {
|
||
|
console.log("get GPS location success"), app.globalData.location = {
|
||
|
lat: n.latitude,
|
||
|
lng: n.longitude
|
||
|
}, app.globalData.canGetGPS = true, fn;
|
||
|
wx.setStorage({
|
||
|
key: "latitude",
|
||
|
data: n.latitude
|
||
|
})
|
||
|
wx.setStorage({
|
||
|
key: "longitude",
|
||
|
data: n.longitude
|
||
|
})
|
||
|
},
|
||
|
fail: function () {
|
||
|
console.log("get GPS location fail"), app.globalData.canGetGPS = false, fn&&fn();
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
fail: function () {
|
||
|
console.log("get GPS fail checkGPS"), app.globalData.canGetGPS = false, fn&&fn();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function openSetting(t) {
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
wx.showModal({
|
||
|
content: "为了更好的服务您,需要您的地理位置",
|
||
|
confirmText: "去开启",
|
||
|
confirmColor: "#FF673F",
|
||
|
success: function(res1) {
|
||
|
if(res1.confirm) {
|
||
|
wx.openSetting({
|
||
|
success: function(result) {
|
||
|
console.log(result);
|
||
|
if(result.authSetting["scope.userLocation"]){
|
||
|
wx.getLocation({
|
||
|
success: function(res) {
|
||
|
console.log("get GPS location success");
|
||
|
getApp().globalData.location = {
|
||
|
lat: res.latitude,
|
||
|
lng: res.longitude
|
||
|
},
|
||
|
getApp().globalData.canGetGPS = true;
|
||
|
resolve(res);
|
||
|
},
|
||
|
fail: function (error) {
|
||
|
console.log("get GPS fail openSetting");
|
||
|
getApp().globalData.canGetGPS = false;
|
||
|
reject('取消', error);
|
||
|
}
|
||
|
});
|
||
|
} else {
|
||
|
reject('未开启');
|
||
|
}
|
||
|
},
|
||
|
fail: function(error) {
|
||
|
reject(error);
|
||
|
}
|
||
|
});
|
||
|
} else if(res1.cancel) {
|
||
|
reject('用户点击取消');
|
||
|
console.log('用户点击取消')
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取定位城市
|
||
|
*/
|
||
|
function getGps() {
|
||
|
let that = this;
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
wx.getLocation({
|
||
|
type: 'gcj02', //编码方式,
|
||
|
success: function (res) {
|
||
|
console.log("getGps-res", res);
|
||
|
resolve(res);
|
||
|
wx.setStorage({
|
||
|
key: "latitude",
|
||
|
data: res.latitude
|
||
|
})
|
||
|
wx.setStorage({
|
||
|
key: "longitude",
|
||
|
data: res.longitude
|
||
|
})
|
||
|
},
|
||
|
fail: (error) => {
|
||
|
console.log("getGps-error", error);
|
||
|
if (error.errMsg == "getLocation:fail auth deny"){
|
||
|
that.openSetting().then(function(res){
|
||
|
console.log(res);
|
||
|
// reject(res)
|
||
|
}).catch(function(){
|
||
|
console.log(error);
|
||
|
reject(error);
|
||
|
});
|
||
|
} else {
|
||
|
// reject(error);
|
||
|
console.log(error);
|
||
|
// reject(error);
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 通过GPS获取详细位置
|
||
|
*/
|
||
|
function getGpsLocation(lat, lon) {
|
||
|
var tx_map_key = wx.getStorageSync('tx_map_key');
|
||
|
if (tx_map_key) {
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
analyzeGps(tx_map_key, lat, lon).then((res)=>{
|
||
|
resolve(res);
|
||
|
});
|
||
|
})
|
||
|
} else {
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
app.util.request({
|
||
|
url: 'entry/wxapp/index',
|
||
|
data: {
|
||
|
controller: 'index.get_community_config'
|
||
|
},
|
||
|
dataType: 'json',
|
||
|
success: function (res) {
|
||
|
if (res.data.code == 0) {
|
||
|
tx_map_key = res.data.tx_map_key;
|
||
|
wx.setStorage({
|
||
|
key: "tx_map_key",
|
||
|
data: tx_map_key
|
||
|
})
|
||
|
analyzeGps(tx_map_key, lat, lon).then((res) => {
|
||
|
resolve(res);
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 解析GPS
|
||
|
*/
|
||
|
function analyzeGps(tx_map_key, lat, lon) {
|
||
|
var demo = new QQMapWX({
|
||
|
key: tx_map_key
|
||
|
});
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
demo.reverseGeocoder({
|
||
|
//腾讯地图api 逆解析方法 首先设置经纬度
|
||
|
location: {
|
||
|
latitude: lat,
|
||
|
longitude: lon
|
||
|
}, //逆解析成功回调函数
|
||
|
success: function (res) {
|
||
|
console.log(res)
|
||
|
let address_component = res.result.address_component || {};
|
||
|
let address_reference = res.result.address_reference;
|
||
|
address_component.town = address_reference.town&&address_reference.town.title || '';
|
||
|
resolve(address_component);
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
checkGPS,
|
||
|
openSetting,
|
||
|
getGps,
|
||
|
getGpsLocation
|
||
|
}
|