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;
|
this.geolocation = 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;
|
that.geolocation = new qq.maps.Geolocation("T7RBZ-62U3X-RSQ4P-ZZVCB-WE7JT-HRBOG", "mapqq");
|
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;
|
}
|
if (this.geolocation) {
|
this.geolocation = 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();
|
// uni定位
|
console.log(uni.getLocation)
|
//qq定位
|
// var geolocation = new qq.maps.Geolocation("T7RBZ-62U3X-RSQ4P-ZZVCB-WE7JT-HRBOG", "mapqq");
|
// console.log(that.geolocation)
|
// var options = {
|
// // timeout: 1000
|
// };
|
|
// function showPosition(position) {
|
// console.log("position:", position)
|
// console.log("position:", JSON.stringify(position))
|
// let lat = position.lat; //
|
// let lng = position.lng; //火星坐标 //TODO 实现业务代码逻辑
|
// that.onceNowPosition = [lng, lat];
|
// // console.log(that.onceNowPosition)
|
// that.state = false;
|
// ok = true;
|
// outit();
|
// }
|
|
// function showErr(data) {
|
// console.log(data)
|
// that.onceNowPosition = data;
|
// that.state = false;
|
// ok = true;
|
// outit();
|
// };
|
// that.geolocation.getLocation(showPosition, showErr, options);
|
// 高德定位
|
// console.log(AMap)
|
// AMap.plugin("AMap.Geolocation", function() {
|
// var geolocation = new AMap.Geolocation({
|
// // 是否使用高精度定位,默认:true
|
// enableHighAccuracy: true,
|
// // 设置定位超时时间,默认:无穷大
|
// timeout: 10000,
|
// // 定位按钮的停靠位置的偏移量,默认:Pixel(10, 20)
|
// // buttonOffset: new AMap.Pixel(10, 20),
|
// // 定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
|
// // zoomToAccuracy: true,
|
// // 定位按钮的排放位置, RB表示右下
|
// // buttonPosition: "RB",
|
// });
|
// 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;
|
// that.onceNowPosition = [lat, lon];
|
// that.state = false;
|
// ok = true;
|
// outit();
|
// }
|
|
// function onError(data) {
|
// // 定位出错
|
// console.log(data);
|
// that.onceNowPosition = data.message;
|
// that.state = false;
|
// ok = false;
|
// outit();
|
// }
|
// });
|
// return
|
// 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;
|