class $getPositions { constructor(arg) { this.id = arg.id || 0; //任务id this.fn = arg.fn ? function(data) { arg.fn(data); } : function(data) { console.log("未设置输出回调") return data; }; this.ourPosition = []; //全部位置 this.nowPosition = []; //当前位置 this.onceNowPosition = []; //当前一次位置 this.getOnceSPosition = null; this.state = false; this.isContinued = false; this.isContinuedTimeInt = null; this.isContinuedTimeOut = null; return this; } //开始获取 init() { //判断权限 return this; } continued() { //开始持续获取定位 console.log("开始持续定位") let that = this; this.isContinued = true; if (this.isContinuedTimeInt) { console.log("重复开始持续定位") return; } else { that.once(function(res) { if (res.state == false) { console.log(res.intlat) } }) this.isContinuedTimeInt = setInterval(() => { that.once(function(res) { if (res.state == false) { console.log(res.intlat) } }) }, 5000) } } continuedTime(val) { //开始持续获取定位 let that = this; if (val != 1) { console.log("开始持续定位") this.isContinued = true; that.once(function(res) { if (res.state == false) { // console.log(res.intlat) that.outData(); } }) if (this.isContinuedTimeOut) { console.log("重复开始持续定位") return; } } this.isContinuedTimeOut = setTimeout(() => { that.once(function(res) { if (res.state == false) { // console.log(res.intlat) that.outData(); if (res.ok) { //返回成功 that.continuedTime(1); } else { //返回失败 that.continuedTime(1); } } }) }, 5000) } overContinued() { console.log("结束持续定位") let that = this; if (this.isContinued) { this.isContinued = false; if (this.isContinuedTimeInt) { clearInterval(that.isContinuedTimeInt); this.isContinuedTimeInt = null; } if (this.isContinuedTimeOut) { clearTimeout(that.isContinuedTimeOut); this.isContinuedTimeOut = null; } } } // overContinued() { // console.log("结束持续定位") // let that = this; // if (this.isContinued) { // this.isContinued = false; // clearInterval(that.isContinuedTimeInt); // this.isContinuedTimeInt = null; // } // } once(fn) { console.log("开始获取一次定位"); this.state = true; let ok = true; let that = this, fns = fn, outit = function() { if (fns) { fns({ state: that.state, intlat: that.onceNowPosition, ok: ok }) } else { that.outData(); } }; outit(); let success = function(position) { // console.log(position); var lat = position.coords.latitude; var lon = position.coords.longitude; // console.log("成功返回经纬度信息"); // console.log(lon, lat, "成功"); that.onceNowPosition = [lat, lon]; that.state = false; ok = true; outit(); }; let error = function(error) { // console.log(error, "失败"); let msg = "none"; switch (error.code) { case error.PERMISSION_DENIED: msg = "User denied the request for Geolocation."; break; case error.POSITION_UNAVAILABLE: msg = "Location information is unavailable."; break; case error.TIMEOUT: msg = "The request to get user location timed out."; break; case error.UNKNOWN_ERROR: msg = "An unknown error occurred."; break; } that.onceNowPosition = msg; that.state = false; ok = true; outit(); }; let options = { enableHighAccuracy: true, // timeout: 5000, timeout: Infinity, maximumAge: 0, }; this.getOnceSPosition = navigator.geolocation.getCurrentPosition( success, error, options ); //高德定位 // console.log("开始获取一次定位"); // this.state = true; // let that = this; // that.outData(); // AMap.plugin("AMap.Geolocation", function() { // var geolocation = new AMap.Geolocation({ // // 是否使用高精度定位,默认:true // enableHighAccuracy: true, // // 设置定位超时时间,默认:无穷大 // // timeout: 10000, // }); // geolocation.getCurrentPosition(); // AMap.event.addListener(geolocation, "complete", onComplete); // AMap.event.addListener(geolocation, "error", onError); // function onComplete(data) { // // data是具体的定位信息 // // console.log(data); // var lat = data.position.lat; // var lon = data.position.lng; // // console.log("成功返回经纬度信息"); // // console.log(lon, lat, "成功"); // that.onceNowPosition = [lon, lat]; // this.state = false; // that.outData(); // } // function onError(data) { // // 定位出错 // // console.log(data); // that.onceNowPosition = data; // this.state = false; // that.outData(); // } // }); } //结束获取 outInit() { } //抛出数据 outData() { let d = { state: this.state, intlat: this.onceNowPosition } this.fn(d) } }