location.service.ts 2.44 KB
Newer Older
1
2
3
4
5
6
7
import { Injectable } from '@angular/core';
import { Geolocation } from '@ionic-native/geolocation/ngx';
import { Subject } from 'rxjs';
@Injectable({
  providedIn: 'root'
})
export class LocationService {
8
9
  public preiousUserPosition = { lat: 48.783480, lng: 9.180319, altitude: 250};
  public currentUserPosition = { lat: 48.783480, lng: 9.180319, altitude: 250};
10
11
12
13
14
15

  liveLocationSubject = new Subject<any>(); //Decalring new RxJs Subject

  constructor(private geolocation: Geolocation) {
    let watch = this.geolocation.watchPosition({ enableHighAccuracy: true, maximumAge: 10000 });
    watch.subscribe((position) => {
16
17
18
19
20
      console.log(position);
      let altitude = position.coords.altitude;
      if (!altitude) {
        altitude = 250;
      }
21
22
      this.currentUserPosition.lat = position.coords.latitude;
      this.currentUserPosition.lng = position.coords.longitude;
23
24
      this.currentUserPosition.altitude = altitude;

25
26
      this.preiousUserPosition.lat = position.coords.latitude;
      this.preiousUserPosition.lng = position.coords.longitude;
27
28
      this.preiousUserPosition.altitude = altitude;

29
30
      this.getUserLiveLocation(this.currentUserPosition);
    }, (errorObj) => {
31
      console.log('Error getting live location, setting to previous location');
32
33
34
35
36
37
38
39
      this.getUserLiveLocation(this.preiousUserPosition);
    });
  }

  getUserLocation(): Promise<any> {
    return new Promise((resolve, reject) => {

      this.geolocation.getCurrentPosition().then((resp) => {
40
        console.log(resp);
41
42
        let lat = resp.coords.latitude;
        let lng = resp.coords.longitude;
43
44
45
46
47
        let altitude = resp.coords.altitude;
        if (!altitude) {
          altitude = 250;
        }

48
49
        this.currentUserPosition.lat = resp.coords.latitude;
        this.currentUserPosition.lng = resp.coords.longitude;
50
51
        this.currentUserPosition.altitude = altitude;

52
53
        this.preiousUserPosition.lat = resp.coords.latitude;
        this.preiousUserPosition.lng = resp.coords.longitude;
54
        this.preiousUserPosition.altitude = altitude;
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
        resolve(this.currentUserPosition);
      }, er => {
        console.log('error getting location setting to previous location');
        resolve(this.preiousUserPosition);
      }).catch((error) => {
        console.log('error getting location setting to previous location');
        resolve(this.preiousUserPosition);
      });
    });
  }

  getUserLiveLocation(location) {
    this.liveLocationSubject.next(location);
  }
}