diff --git a/src/app/home/home.page.html b/src/app/home/home.page.html index a3d9d06a47f3e661ba99b1687f612796dc8b83cc..2dbc223b3dff88ad20018df3858fe593b9c3b877 100644 --- a/src/app/home/home.page.html +++ b/src/app/home/home.page.html @@ -7,20 +7,14 @@ Home </ion-title> <ion-item class="checkbox-wrapper"> - <!--ion-checkbox class="checkbox" [(ngModel)]="is3DChecked" (click)="toggle3DMaps()"></ion-checkbox--> <ion-label class="text" (click)="enable3DMaps()">3D</ion-label> </ion-item> </ion-toolbar> </ion-header> <ion-content> - - - <div #mapElement2d style="width: 100%; height: 100%" id="mapContainer" *ngIf="!is3DChecked"></div> - <div #mapElement3d style="width: 100%; height: 100%" id="mapContainer" *ngIf="is3DChecked"></div> - <!--div #mapElement style="width: 100%; height: 100%" id="mapContainer"></div--> + <div #mapElement style="width: 100%; height: 100%" id="mapContainer" *ngIf="!is3DChecked"></div> <ion-fab class="get-position" vertical="bottom" horizontal="end" (click)="getCurrentPosition()" slot="fixed"> - <ion-fab-button> <ion-icon name="locate"></ion-icon> </ion-fab-button> diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index 21af6c44bdd7780fa5a8b8026627bc844968fe7e..904bd0cc4316ca3707952cff91bf3063e2d8fdc2 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -18,32 +18,18 @@ declare var H: any; export class HomePage { private platform: any; private map: any; + private defaultLayers: any; + bikes = []; - streets = []; bikeApi: Observable<any>; - private currentLocation = { lat: 0, lng: 0 }; - - public is3DChecked = false; public isDetailsVisible = false; - public selectedBike ={id: 0}; - public isBikeReserved= false; - - 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 }] - public arrayLanLon = { lat: 0, lng: 0 }; - @ViewChild("mapElement2d", { static: false }) - public mapElement2d: ElementRef; - - @ViewChild("mapElement3d", { static: false }) - public mapElement3d: ElementRef; + public selectedBike = { id: 0 }; + public isBikeReserved = false; - - + @ViewChild("mapElement", { static: false }) + public mapElement: ElementRef; constructor(private geolocation: Geolocation, public restService: RestService, @@ -62,7 +48,7 @@ export class HomePage { ngAfterViewInit() { setTimeout(() => { - this.loadmap("2D"); + this.loadmap(); }, 700); window.addEventListener('resize', () => this.map.getViewPort().resize()); @@ -73,45 +59,38 @@ export class HomePage { maximumAge: 1000, timeout: 4000, enableHighAccuracy: true }).then((resp) => { + let lat = resp.coords.latitude; + let lng = resp.coords.longitude; + this.currentLocation.lat = resp.coords.latitude; this.currentLocation.lng = resp.coords.longitude; this.storage.get('token').then((token) => { - let url = 'http://193.196.52.237:8081/bikes' + '?lat=' + this.currentLocation.lat + '&lng=' + this.currentLocation.lng; + let url = 'http://193.196.52.237:8081/bikes' + '?lat=' + lat + '&lng=' + lng; const headers = new HttpHeaders().set("Authorization", "Bearer " + token); this.bikeApi = this.httpClient.get(url, { headers }); this.bikeApi.subscribe((resp) => { - console.log('my data: ', resp); + console.log("bikes response", resp); this.bikes = resp; for (let i = 0; i < this.bikes.length; i++) { - var beforeDotStr = ''+this.bikes[i].distance; - var beforeDot = beforeDotStr.split('.')[0]; - var afterDotArr = beforeDotStr.split('.')[1].split(''); - var afterDot = afterDotArr[0] + afterDotArr[1]; - this.bikes[i].distance = beforeDot + '.' + afterDot; + this.bikes[i].distance = this.bikes[i].distance.toFixed(2);; this.reverseGeocode(this.platform, this.bikes[i].lat, this.bikes[i].lon, i); } }, (error) => console.log(error)); }); }, er => { - alert('Can not retrieve Location') + alert('Can not retrieve location'); }).catch((error) => { - alert('Error getting location - ' + JSON.stringify(error)) + alert('Error getting location - ' + JSON.stringify(error)); }); } - loadmap(style) { + loadmap() { // Obtain the default map types from the platform object - var mapStyle = "raster"; - var mapElement = "mapElement2d"; - if (style === "3D") { - mapStyle = "vector"; - mapElement = "mapElement3d"; - } - var defaultLayers = this.platform.createDefaultLayers(); + this.defaultLayers = this.platform.createDefaultLayers(); this.map = new H.Map( - this[mapElement].nativeElement, - defaultLayers[mapStyle].normal.map, + this.mapElement.nativeElement, + this.defaultLayers.raster.normal.map, { zoom: 17, pixelRatio: window.devicePixelRatio || 1 @@ -119,39 +98,45 @@ export class HomePage { ); var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(this.map)); - var ui = H.ui.UI.createDefault(this.map, defaultLayers); + var ui = H.ui.UI.createDefault(this.map, this.defaultLayers); ui.removeControl("mapsettings"); - // create custom one - var ms = new H.ui.MapSettingsControl({ - baseLayers: [{ - label: "3D", layer: defaultLayers.vector.normal.map - }, { - label: "Normal", layer: defaultLayers.raster.normal.map - }, { - label: "Satellite", layer: defaultLayers.raster.satellite.map - }, { - label: "Terrain", layer: defaultLayers.raster.terrain.map - } + // create custom map settings (icons on map) + var customMapSettings = new H.ui.MapSettingsControl({ + baseLayers: [ + { + label: "3D", layer: this.defaultLayers.vector.normal.map + }, { + label: "Normal", layer: this.defaultLayers.raster.normal.map + }, { + label: "Satellite", layer: this.defaultLayers.raster.satellite.map + }, { + label: "Terrain", layer: this.defaultLayers.raster.terrain.map + } ], - layers: [{ - label: "layer.traffic", layer: defaultLayers.vector.normal.traffic - }, - { - label: "layer.incidents", layer: defaultLayers.vector.normal.trafficincidents - } + layers: [ + { + label: "layer.traffic", layer: this.defaultLayers.vector.normal.traffic + }, + { + label: "layer.incidents", layer: this.defaultLayers.vector.normal.trafficincidents + } ] }); - ui.addControl("customized", ms); - var mapSettings = ui.getControl('customized'); + ui.addControl("custom-mapsettings", customMapSettings); + var mapSettings = ui.getControl('custom-mapsettings'); var zoom = ui.getControl('zoom'); - mapSettings.setAlignment('top-right'); zoom.setAlignment('right-top'); - if (style === "3D") { - this.map.getViewModel().setLookAtData({ tilt: 60 }); - } - this.getLocation(this.map); + this.map.addEventListener('baselayerchange', (data) => { + let mapConfig = this.map.getBaseLayer().getProvider().getStyleInternal().getConfig(); + if (mapConfig === null || (mapConfig && mapConfig.sources && mapConfig.sources.omv)) { + this.map.getViewModel().setLookAtData({ tilt: 60 }); + } else { + this.map.getViewModel().setLookAtData({ tilt: 0 }); + } + }); + this.getLocation(this.map); 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++) { @@ -166,24 +151,23 @@ export class HomePage { } 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]); } - + } } + getCurrentPosition() { this.getLocation(this.map.setZoom(17)); - } - + getLocation(map) { this.geolocation.getCurrentPosition( { maximumAge: 1000, timeout: 2000, enableHighAccuracy: true - } ).then((resp) => { - let lat = resp.coords.latitude - let lng = resp.coords.longitude + let lat = resp.coords.latitude; + let lng = resp.coords.longitude; this.currentLocation.lat = resp.coords.latitude; this.currentLocation.lng = resp.coords.longitude; this.moveMapToGiven(map, lat, lng); @@ -195,44 +179,26 @@ export class HomePage { } moveMapToGiven(map, lat, lng) { - var icon = new H.map.Icon('../../../assets/images/current_location.png'); // 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); map.setCenter({ lat: lat, lng: lng }); } - - addMarker(lat, lng, img) { 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); } - toggle3DMaps() { - console.log(this.is3DChecked); - if (!this.is3DChecked) { - setTimeout(() => { - this.loadmap("3D"); - }, 1000); - } - } - enable3DMaps() { - this.is3DChecked = true; - setTimeout(() => { - this.loadmap("3D"); - }, 100); + this.map.setBaseLayer(this.defaultLayers.vector.normal.map); } - reverseGeocode(platform, lat, lng, index) { var prox = lat + ',' + lng + ',56'; var geocoder = platform.getGeocodingService(), @@ -248,7 +214,7 @@ export class HomePage { var streets = result.Response.View[0].Result[0].Location.Address.Street; var houseNumber = result.Response.View[0].Result[0].Location.Address.HouseNumber; var zipcode = result.Response.View[0].Result[0].Location.Address.PostalCode; - + this.bikes[index].address = streets; this.bikes[index].HouseNumber = houseNumber; this.bikes[index].PostalCode = zipcode; @@ -258,13 +224,11 @@ export class HomePage { }); } - showBikeDetails(bike) { - - this.selectedBike=bike; - this.selectedBike.id=bike.id; + this.selectedBike = bike; this.isDetailsVisible = true; } + reserveBike() { //this.selectedBike=bikeS; this.storage.get('token').then((token) => { @@ -273,17 +237,13 @@ export class HomePage { this.bikeApi = this.httpClient.get(url, { headers }); this.bikeApi.subscribe((resp) => { console.log('my data: ', resp); - this.isBikeReserved=true; + this.isBikeReserved = true; this.toastService.showToast("Reservation Successful!"); }, (error) => { console.log(error) this.toastService.showToast("Only one bike may be reserved or rented at a time") }); }); - - } - - }