liuyg
2022-02-21 e3dcaeb0180a4e37347ac9ceb44c8a59ae7af37f
leafletMapOur/grabOrdersMap/js/getPosition.js
@@ -0,0 +1,180 @@
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;