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;
|