| | |
| | | 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(that.id,"开始持续定位") |
| | | 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); |
| | | } |
| | | } |
| | | }) |
| | | }, 3000) |
| | | |
| | | } |
| | | 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; |
| | | } |
| | | } |
| | | this.isContinued = false; |
| | | that.outData('out'); |
| | | } |
| | | 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.longitude;//经度 |
| | | var lon = position.coords.latitude;//纬度 |
| | | // 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 = false; |
| | | outit(); |
| | | }; |
| | | let options = { |
| | | enableHighAccuracy: true, |
| | | // timeout: 5000, |
| | | timeout: Infinity, |
| | | maximumAge: 0, |
| | | }; |
| | | this.getOnceSPosition = navigator.geolocation.getCurrentPosition( |
| | | success, |
| | | error, |
| | | options |
| | | ); |
| | | } |
| | | //结束获取 |
| | | outInit() { |
| | | |
| | | } |
| | | //抛出数据 |
| | | outData(val) { |
| | | let d = { |
| | | state: this.state, |
| | | intlat: this.onceNowPosition |
| | | } |
| | | if (val) { |
| | | d[val] = val |
| | | } |
| | | this.fn(d) |
| | | } |
| | | } |
| | | |
| | | // export default $getPositions; |