Blame view
src/app/component/map/map.component.ts
2.35 KB
287033a62
|
1 |
import {Component, OnInit} from '@angular/core'; |
c4e00deb9
|
2 |
import * as L from 'leaflet'; |
287033a62
|
3 |
import {CircleMarker} from 'leaflet'; |
c4e00deb9
|
4 5 |
import {Vessels} from '../../model/vessels'; import {VesselsService} from '../../service/vessels.service'; |
287033a62
|
6 |
import {Message} from '../../model/message'; |
9bbae2409
|
7 8 |
import {SelectedVesselService} from '../../service/selected-vessel.service'; import {Vessel} from '../../model/vessel'; |
c666d6db6
|
9 10 11 12 13 14 15 |
@Component({ selector: 'app-map', templateUrl: './map.component.html', styleUrls: ['./map.component.scss'] }) export class MapComponent implements OnInit { |
c4e00deb9
|
16 |
vessels: Vessels; |
9bbae2409
|
17 |
selectedVessel: Vessel; |
287033a62
|
18 |
public map: L.Map; |
9bbae2409
|
19 |
renderer = L.canvas({padding: 0.5}); |
287033a62
|
20 |
circleMarkers: Map<number, CircleMarker> = new Map<number, CircleMarker>(); |
c666d6db6
|
21 |
|
9bbae2409
|
22 |
constructor(private vesselsService: VesselsService, private selectedVesselService: SelectedVesselService) { |
287033a62
|
23 |
} |
c666d6db6
|
24 25 |
ngOnInit(): void { |
c4e00deb9
|
26 |
this.initMap(); |
287033a62
|
27 |
this.connectVesselObservable(); |
9bbae2409
|
28 |
this.connectSelectVesselObservable(); |
c4e00deb9
|
29 30 31 32 33 |
} connectVesselObservable(): void { this.vesselsService.currentVessels.subscribe(vessels => { this.vessels = vessels; |
287033a62
|
34 |
this.updateMap(); |
c4e00deb9
|
35 36 |
}); } |
9bbae2409
|
37 38 39 40 41 42 |
connectSelectVesselObservable(): void { this.selectedVesselService.currentVessel.subscribe(vessels => { this.selectedVessel = vessels; this.updateMap(); }); } |
c4e00deb9
|
43 |
initMap(): void { |
72dfa80e2
|
44 |
this.map = L.map('map').setView([0, 0], 1); |
c4e00deb9
|
45 |
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { |
287033a62
|
46 47 48 49 50 |
attribution: 'map', }).addTo(this.map); } addCircleMarker(message: Message, color: string): void { |
9bbae2409
|
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
let circleMarker; if (message.mmsi === this.selectedVessel.getMMSI()) { circleMarker = L.circleMarker([+message.latitude, +message.longitude], { renderer: this.renderer, radius: 4, color: '#ff0000', }).addTo(this.map).bringToFront(); }else { circleMarker = L.circleMarker([+message.latitude, +message.longitude], { renderer: this.renderer, radius: 0.01, color }).addTo(this.map); } |
287033a62
|
67 68 69 70 |
this.circleMarkers.set(Number(message.mmsi), circleMarker); } updateMap(): void { |
9bbae2409
|
71 |
this.circleMarkers.clear(); |
287033a62
|
72 73 74 |
this.vessels.vessels.forEach(((vessel, key) => { const color = vessel.getColor(); vessel.messages.forEach((message) => { |
287033a62
|
75 76 77 |
this.addCircleMarker(message, color); }); })); |
c666d6db6
|
78 79 80 |
} } |