Commit 72dfa80e2b0cb05b753554f82af013dd99eef3fe
1 parent
287033a627
Exists in
master
eache vessel have different color on map
Showing 4 changed files with 4 additions and 13 deletions Inline Diff
src/app/component/list-vessel/list-vessel.component.ts
View file @
72dfa80
import {AfterViewInit, Component, OnInit} from '@angular/core'; | 1 | 1 | import {AfterViewInit, Component, OnInit} from '@angular/core'; | |
import {VesselsService} from '../../service/vessels.service'; | 2 | 2 | import {VesselsService} from '../../service/vessels.service'; | |
import {Vessels} from '../../model/vessels'; | 3 | 3 | import {Vessels} from '../../model/vessels'; | |
4 | 4 | |||
declare var $: any; | 5 | 5 | declare var $: any; | |
6 | 6 | |||
@Component({ | 7 | 7 | @Component({ | |
selector: 'app-list-vessel', | 8 | 8 | selector: 'app-list-vessel', | |
templateUrl: './list-vessel.component.html', | 9 | 9 | templateUrl: './list-vessel.component.html', | |
styleUrls: ['./list-vessel.component.scss'] | 10 | 10 | styleUrls: ['./list-vessel.component.scss'] | |
}) | 11 | 11 | }) | |
export class ListVesselComponent implements OnInit { | 12 | 12 | export class ListVesselComponent implements OnInit { | |
vessels: Vessels; | 13 | 13 | vessels: Vessels; | |
14 | 14 | |||
constructor(private vesselsService: VesselsService) { | 15 | 15 | constructor(private vesselsService: VesselsService) { | |
} | 16 | 16 | } | |
17 | 17 | |||
ngOnInit(): void { | 18 | 18 | ngOnInit(): void { | |
this.vesselsService.currentVessels.subscribe(vessels => { | 19 | 19 | this.vesselsService.currentVessels.subscribe(vessels => { | |
setTimeout(() => | 20 | 20 | setTimeout(() => | |
this.vessels = vessels | 21 | 21 | this.vessels = vessels | |
); | 22 | 22 | ); | |
}); | 23 | 23 | }); | |
24 | 24 | |||
$(document).ready(() => { | 25 | 25 | $(document).ready(() => { | |
$('#myInput').on('keyup', function(): void { | 26 | 26 | $('#myInput').on('keyup', function(): void { | |
const value = $(this).val().toLowerCase(); | 27 | 27 | const value = $(this).val().toLowerCase(); | |
$('#list-tab a').filter(function(): void { | 28 | 28 | $('#list-tab a').filter(function(): void { | |
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1); | 29 | 29 | $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1); | |
}); | 30 | 30 | }); | |
}); | 31 | 31 | }); | |
}); | 32 | 32 | }); | |
} | 33 | 33 | } | |
34 | 34 | |||
// ngAfterViewInit(): void { | 35 | |||
// this.vesselsService.currentVessels.subscribe(vessels => { | 36 |
src/app/component/map/map.component.ts
View file @
72dfa80
import {Component, OnInit} from '@angular/core'; | 1 | 1 | import {Component, OnInit} from '@angular/core'; | |
import * as L from 'leaflet'; | 2 | 2 | import * as L from 'leaflet'; | |
import {CircleMarker} from 'leaflet'; | 3 | 3 | import {CircleMarker} from 'leaflet'; | |
import {Vessels} from '../../model/vessels'; | 4 | 4 | import {Vessels} from '../../model/vessels'; | |
import {VesselsService} from '../../service/vessels.service'; | 5 | 5 | import {VesselsService} from '../../service/vessels.service'; | |
import {Message} from '../../model/message'; | 6 | 6 | import {Message} from '../../model/message'; | |
7 | 7 | |||
@Component({ | 8 | 8 | @Component({ | |
selector: 'app-map', | 9 | 9 | selector: 'app-map', | |
templateUrl: './map.component.html', | 10 | 10 | templateUrl: './map.component.html', | |
styleUrls: ['./map.component.scss'] | 11 | 11 | styleUrls: ['./map.component.scss'] | |
}) | 12 | 12 | }) | |
export class MapComponent implements OnInit { | 13 | 13 | export class MapComponent implements OnInit { | |
vessels: Vessels; | 14 | 14 | vessels: Vessels; | |
public map: L.Map; | 15 | 15 | public map: L.Map; | |
16 | renderer = L.canvas({ padding: 0.5 }); | |||
circleMarkers: Map<number, CircleMarker> = new Map<number, CircleMarker>(); | 16 | 17 | circleMarkers: Map<number, CircleMarker> = new Map<number, CircleMarker>(); | |
17 | 18 | |||
constructor(private vesselsService: VesselsService) { | 18 | 19 | constructor(private vesselsService: VesselsService) { | |
} | 19 | 20 | } | |
20 | 21 | |||
ngOnInit(): void { | 21 | 22 | ngOnInit(): void { | |
this.initMap(); | 22 | 23 | this.initMap(); | |
this.connectVesselObservable(); | 23 | 24 | this.connectVesselObservable(); | |
} | 24 | 25 | } | |
25 | 26 | |||
connectVesselObservable(): void { | 26 | 27 | connectVesselObservable(): void { | |
this.vesselsService.currentVessels.subscribe(vessels => { | 27 | 28 | this.vesselsService.currentVessels.subscribe(vessels => { | |
this.vessels = vessels; | 28 | 29 | this.vessels = vessels; | |
this.updateMap(); | 29 | 30 | this.updateMap(); | |
}); | 30 | 31 | }); | |
} | 31 | 32 | } | |
32 | 33 | |||
initMap(): void { | 33 | 34 | initMap(): void { | |
this.map = L.map('map', { | 34 | 35 | this.map = L.map('map').setView([0, 0], 1); | |
preferCanvas: true | 35 | |||
}).setView([0, 0], 1); | 36 | |||
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { | 37 | 36 | L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { | |
attribution: 'map', | 38 | 37 | attribution: 'map', | |
}).addTo(this.map); | 39 | 38 | }).addTo(this.map); | |
} | 40 | 39 | } | |
41 | 40 | |||
addCircleMarker(message: Message, color: string): void { | 42 | 41 | addCircleMarker(message: Message, color: string): void { | |
const circleMarker = L.circleMarker([+message.latitude, +message.longitude], | 43 | 42 | const circleMarker = L.circleMarker([+message.latitude, +message.longitude], | |
{ | 44 | 43 | { | |
44 | renderer: this.renderer, | |||
radius: 0.1, | 45 | 45 | radius: 0.1, | |
color | 46 | 46 | color | |
}).addTo(this.map); | 47 | 47 | }).addTo(this.map); | |
this.circleMarkers.set(Number(message.mmsi), circleMarker); | 48 | 48 | this.circleMarkers.set(Number(message.mmsi), circleMarker); | |
} | 49 | 49 | } | |
50 | 50 | |||
updateMap(): void { | 51 | 51 | updateMap(): void { | |
let nbMessage = 0; | 52 | 52 | let nbMessage = 0; | |
this.vessels.vessels.forEach(((vessel, key) => { | 53 | 53 | this.vessels.vessels.forEach(((vessel, key) => { | |
const color = vessel.getColor(); | 54 | 54 | const color = vessel.getColor(); | |
vessel.messages.forEach((message) => { | 55 | 55 | vessel.messages.forEach((message) => { |
src/app/model/vessel.ts
View file @
72dfa80
import {Message} from './message'; | 1 | 1 | import {Message} from './message'; | |
2 | 2 | |||
export class Vessel { | 3 | 3 | export class Vessel { | |
messages: Array<Message>; | 4 | 4 | messages: Array<Message>; | |
5 | 5 | |||
constructor(messages: Array<Message>) { | 6 | 6 | constructor(messages: Array<Message>) { | |
this.messages = messages; | 7 | 7 | this.messages = messages; | |
} | 8 | 8 | } | |
9 | 9 | |||
addMessage(message: Message): void { | 10 | 10 | addMessage(message: Message): void { | |
this.messages.push(message); | 11 | 11 | this.messages.push(message); | |
} | 12 | 12 | } | |
13 | 13 | |||
getMMSI(): string { | 14 | 14 | getMMSI(): string { | |
return this.messages[0].mmsi; | 15 | 15 | return this.messages[0].mmsi; | |
} | 16 | 16 | } | |
17 | 17 | |||
getName(): string { | 18 | 18 | getName(): string { | |
return this.messages[0].vesselName; | 19 | 19 | return this.messages[0].vesselName; | |
} | 20 | 20 | } |
src/app/model/vessels.ts
View file @
72dfa80
import {Vessel} from './vessel'; | 1 | 1 | import {Vessel} from './vessel'; | |
import {Message} from './message'; | 2 | 2 | import {Message} from './message'; | |
import { delay } from 'rxjs/operators'; | 3 | |||
4 | 3 | |||
export class Vessels { | 5 | 4 | export class Vessels { | |
vessels: Map<number, Vessel>; | 6 | 5 | vessels: Map<number, Vessel>; | |
7 | 6 | |||
constructor() { | 8 | 7 | constructor() { | |
this.vessels = new Map<number, Vessel>(); | 9 | 8 | this.vessels = new Map<number, Vessel>(); | |
} | 10 | 9 | } | |
11 | 10 | |||
addMessage(message: Message): void { | 12 | 11 | addMessage(message: Message): void { | |
if (!this.vessels.get(Number(message.mmsi))) { | 13 | 12 | if (!this.vessels.get(Number(message.mmsi))) { | |
this.vessels.set(Number(message.mmsi), new Vessel(new Array<Message>())); | 14 | 13 | this.vessels.set(Number(message.mmsi), new Vessel(new Array<Message>())); | |
} | 15 | 14 | } |