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 = { // 判断app、小程序是否开启GPS定位服务 checkOpenGPSServiceByAndroidIOS() { // #ifdef APP-PLUS let system = uni.getSystemInfoSync(); // 获取系统信息 if (system.platform === 'android') { // 判断平台 var context = plus.android.importClass("android.content.Context"); var locationManager = plus.android.importClass("android.location.LocationManager"); var main = plus.android.runtimeMainActivity(); var mainSvr = main.getSystemService(context.LOCATION_SERVICE); if (!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) { uni.showModal({ title: '提示', content: '请打开定位服务功能', showCancel: false, // 不显示取消按钮 success() { if (!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) { var Intent = plus.android.importClass('android.content.Intent'); var Settings = plus.android.importClass('android.provider.Settings'); var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); main.startActivity(intent); // 打开系统设置GPS服务页面 } else { console.log('GPS功能已开启'); } } }); } } else if (system.platform === 'ios') { console.log("苹果"); var cllocationManger = plus.ios.import("CLLocationManager"); var enable = cllocationManger.locationServicesEnabled(); var status = cllocationManger.authorizationStatus(); plus.ios.deleteObject(cllocationManger); if (enable && status != 2) { console.log("手机系统的定位已经打开"); } else { console.log("手机系统的定位没有打开"); uni.showModal({ title: '提示', content: '请前往设置-隐私-定位服务打开定位服务功能', showCancel: false, // 不显示取消按钮 success() { var UIApplication = plus.ios.import("UIApplication"); var application2 = UIApplication.sharedApplication(); var NSURL2 = plus.ios.import("NSURL"); // var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES"); // var setting2 = NSURL2.URLWithString("App-Prefs:root=LOCATION_SERVICES"); var setting2 = NSURL2.URLWithString("app-settings:"); //var setting2 = NSURL2.URLWithString("App-Prefs:root=Privacy&path=LOCATION"); // var setting2 = NSURL2.URLWithString("App-Prefs:root=Privacy&path=LOCATION_SERVICES"); application2.openURL(setting2); plus.ios.deleteObject(setting2); plus.ios.deleteObject(NSURL2); plus.ios.deleteObject(application2); } }); } } // #endif // #ifdef MP-WEIXIN wx.getSetting({ success: (res) => { console.log(res,99); if (!res.authSetting['scope.userLocation']) { //打开提示框,提示前往设置页面 uni.showModal({ title:'为了更好的体验,请开启定位服务', confirmText:'开启', cancelText:'关闭', success:(res)=> { if(res.confirm) { wx.openSetting({success (res) {}}) } } }) } } }) // #endif }, // 平台判断 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;