home.page.ts 7.56 KB
Newer Older
Rron Jahja's avatar
Rron Jahja committed
1
2
import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
import { Geolocation } from '@ionic-native/geolocation/ngx';
3
4
5
import { RestService } from '../rest.service';
import { Observable } from 'rxjs';
import { HttpClient, HttpHeaders } from '@angular/common/http';
6
import { Storage } from '@ionic/storage';
7
8


Rron Jahja's avatar
Rron Jahja committed
9
declare var H: any;
10

Rron Jahja's avatar
Rron Jahja committed
11
12
13
14
15
@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
16

Rron Jahja's avatar
Rron Jahja committed
17
export class HomePage {
Rron Jahja's avatar
Rron Jahja committed
18
  private platform: any;
19
  private map: any;
20
21
22
  bikes = [];
  bikeApi: Observable<any>;

23
  private currentLocation = { lat: 0, lng: 0 };
24

25
  public is3DChecked = false;
26
  public isDetailsVisible = false;
27
  public selectedBike ={id: 0};
28
29
30
31
32
33

  public tempArr = [1, 2];
  public locationArr = [{ lat: 48.778409, lng: 9.179252 },
  { lat: 48.780926, lng: 9.173456 },
  { lat: 48.775174, lng: 9.175459 },
  { lat: 48.793704, lng: 9.191112 }]
34
  public arrayLanLon = { lat: 0, lng: 0 };
35
36
37
38
39
40
41
42
43
  @ViewChild("mapElement2d", { static: false })
  public mapElement2d: ElementRef;

  @ViewChild("mapElement3d", { static: false })
  public mapElement3d: ElementRef;


  //@ViewChild("mapElement", { static: false })
  //public mapElement: ElementRef;
44

45
46
  constructor(private geolocation: Geolocation,
    public restService: RestService,
47
48
    public httpClient: HttpClient,
    private storage: Storage) {
49

Rron Jahja's avatar
Rron Jahja committed
50
51
52
53
    this.platform = new H.service.Platform({
      'apikey': 'tiVTgBnPbgV1spie5U2MSy-obhD9r2sGiOCbBzFY2_k'
    });
  }
54

55
56
57
  ngOnInit() {
    this.getBikesList();
  }
58

59
  ngAfterViewInit() {
Rron Jahja's avatar
Rron Jahja committed
60
    setTimeout(() => {
61
      this.loadmap("2D");
Rron Jahja's avatar
Rron Jahja committed
62
    }, 1000);
63
64
65
66

    window.addEventListener('resize', () => this.map.getViewPort().resize());
  }

67
  getBikesList() {
68
69
70
71
    this.geolocation.getCurrentPosition({
      maximumAge: 1000, timeout: 5000,
      enableHighAccuracy: true
    }).then((resp) => {
72
73
      this.currentLocation.lat = resp.coords.latitude;
      this.currentLocation.lng = resp.coords.longitude;
74

75
76
77
78
79
      this.storage.get('token').then((token) => {
        let url = 'http://193.196.52.237:8081/bikes' + '?lat=' + this.currentLocation.lat + '&lng=' + this.currentLocation.lng;
        const headers = new HttpHeaders().set("Authorization", "Bearer " + token);
        this.bikeApi = this.httpClient.get(url, { headers });
        this.bikeApi.subscribe((resp) => {
80
          console.log('my data: ', resp);
81
          this.bikes = resp;
82
        }, (error) => console.log(error));
83
      });
84
85
86
87
88
89
90
    }, er => {
      alert('Can not retrieve Location')
    }).catch((error) => {
      alert('Error getting location - ' + JSON.stringify(error))
    });
  }

91
92
93
94




95
  loadmap(style) {
96
    // Obtain the default map types from the platform object
97
98
99
100
101
102
    var mapStyle = "raster";
    var mapElement = "mapElement2d";
    if (style === "3D") {
      mapStyle = "vector";
      mapElement = "mapElement3d";
    }
103
104
    var defaultLayers = this.platform.createDefaultLayers();
    this.map = new H.Map(
105
106
      this[mapElement].nativeElement,
      defaultLayers[mapStyle].normal.map,
107
      {
108
        zoom: 17,
109
110
111
        pixelRatio: window.devicePixelRatio || 1
      }
    );
112

113
114
    var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(this.map));
    var ui = H.ui.UI.createDefault(this.map, defaultLayers);
115
116
117
118
119
120
    ui.removeControl("mapsettings");
    // create custom one
    var ms = new H.ui.MapSettingsControl({
      baseLayers: [{
        label: "3D", layer: defaultLayers.vector.normal.map
      }, {
121
        label: "Normal", layer: defaultLayers.raster.normal.map
122
      }, {
123
124
125
        label: "Satellite", layer: defaultLayers.raster.satellite.map
      }, {
        label: "Terrain", layer: defaultLayers.raster.terrain.map
126
127
128
129
130
131
132
133
134
135
136
137
      }
      ],
      layers: [{
        label: "layer.traffic", layer: defaultLayers.vector.normal.traffic
      },
      {
        label: "layer.incidents", layer: defaultLayers.vector.normal.trafficincidents
      }
      ]
    });
    ui.addControl("customized", ms);
    var mapSettings = ui.getControl('customized');
138
    var zoom = ui.getControl('zoom');
139

140
141
    mapSettings.setAlignment('top-right');
    zoom.setAlignment('left-top');
142
143
    if (style === "3D") {
      this.map.getViewModel().setLookAtData({ tilt: 60 });
144
    }
145
    this.getLocation(this.map);
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
    var img = ['../../../assets/images/100_percent.png', '../../../assets/images/75_percent.png', '../../../assets/images/50_percent.png','../../../assets/images/25_percent.png','../../../assets/images/0_percent.png'];
    for (let i = 0; i < this.bikes.length; i++) {
      if(this.bikes[i].batteryPercentage<100 &&this.bikes[i].batteryPercentage>=75){
        this.addMarker(Number(this.bikes[i].lat), Number(this.bikes[i].lon), img[0]);
      }
      else if(this.bikes[i].batteryPercentage<75 &&this.bikes[i].batteryPercentage>=50){
        this.addMarker(Number(this.bikes[i].lat), Number(this.bikes[i].lon), img[1]);
      }
      else if(this.bikes[i].batteryPercentage<50 &&this.bikes[i].batteryPercentage>=25){
        this.addMarker(Number(this.bikes[i].lat), Number(this.bikes[i].lon), img[2]);
      }else if(this.bikes[i].batteryPercentage<25 &&this.bikes[i].batteryPercentage>=0){
        this.addMarker(Number(this.bikes[i].lat), Number(this.bikes[i].lon), img[3]);
      }
      //console.log("rroni", this.bikes[i].lat);
     // this.addMarker(Number(this.bikes[i].lat), Number(this.bikes[i].lon), img[0]);
      // this.addMarker(Number(48.78077362), 9.17782398, img[i % 3]);
      //alert(this.bikes[i].lat);
163
    }
Rron Jahja's avatar
Rron Jahja committed
164
  }
165
  getCurrentPosition() {
166
167
    this.getLocation(this.map);
  }
Rron Jahja's avatar
Rron Jahja committed
168
169
170
171
172
173
174
175
176
  getLocation(map) {
    this.geolocation.getCurrentPosition(
      {
        maximumAge: 1000, timeout: 5000,
        enableHighAccuracy: true
      }
    ).then((resp) => {
      let lat = resp.coords.latitude
      let lng = resp.coords.longitude
177
178
      this.currentLocation.lat = resp.coords.latitude;
      this.currentLocation.lng = resp.coords.longitude;
Rron Jahja's avatar
Rron Jahja committed
179
180
181
182
183
184
185
      this.moveMapToGiven(map, lat, lng);
    }, er => {
      alert('Can not retrieve Location')
    }).catch((error) => {
      alert('Error getting location - ' + JSON.stringify(error))
    });
  }
186

Rron Jahja's avatar
Rron Jahja committed
187
  moveMapToGiven(map, lat, lng) {
188

189
    var icon = new H.map.Icon('../../../assets/images/current_location.png');
190
191
192
193
194
    // Create a marker using the previously instantiated icon:
    var marker = new H.map.Marker({ lat: lat, lng: lng }, { icon: icon });

    // Add the marker to the map:
    map.addObject(marker);
Rron Jahja's avatar
Rron Jahja committed
195
196
    map.setCenter({ lat: lat, lng: lng });
  }
197

198
199
200
  expandBikeList() {
    for (let i = 0; i < 20; i++) {
      this.tempArr.push(i + 3);
201
202
203
    }
  }

204
  addMarker(lat, lng, img) {
205
206
207
208
209
210
211
    var icon = new H.map.Icon(img);
    // Create a marker using the previously instantiated icon:
    var marker = new H.map.Marker({ lat: lat, lng: lng }, { icon: icon });

    // Add the marker to the map:
    this.map.addObject(marker);
  }
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227

  toggle3DMaps() {
    console.log(this.is3DChecked);
    if (!this.is3DChecked) {
      setTimeout(() => {
        this.loadmap("3D");
      }, 1000);
    }
  }

  enable3DMaps() {
    this.is3DChecked = true;
    setTimeout(() => {
      this.loadmap("3D");
    }, 100);
  }
228
229
230
231

  showBikeDetails(bike) {

    this.selectedBike=bike;
232
    this.selectedBike.id=bike.id;
233
234
    this.isDetailsVisible = true;
  }
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
  reserveBike()
  {
    //this.selectedBike=bikeS;
    this.storage.get('token').then((token) => {
      let url = 'http://193.196.52.237:8081/reservation' + '?bikeId=' + this.selectedBike.id;
      const headers = new HttpHeaders().set("Authorization", "Bearer " + token);
      this.bikeApi = this.httpClient.get(url, { headers });
      this.bikeApi.subscribe((resp) => {
        console.log('my data: ', resp);
        this.bikes = resp;
      }, (error) => console.log(error));
    });
 

  }
250
  
Rron Jahja's avatar
Rron Jahja committed
251
}