Commit dc9a0e3c13dbf0773530a20152c26c7eb7451201
1 parent
0f50c3be
Road fatality
Showing
6 changed files
with
112 additions
and
4 deletions
Show diff stats
src/app/data/road/road.component.html
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | <road-map [identificator]="'road-map'"></road-map> |
3 | 3 | <ag-grid-ng2 #agGrid style="width: 100%; height: 100%;" class="ag-blue" [gridOptions]="gridOptions" [columnDefs]="columnDefs" [rowData]="rowData" enableColResize enableSorting enableFilter groupHeaders suppressRowClickSelection toolPanelSuppressGroups |
4 | 4 | toolPanelSuppressValues debug rowHeight="22" rowSelection="multiple" (cellClicked)="onCellClicked($event)" (cellDoubleClicked)="onCellDoubleClicked($event)" (cellContextMenu)="onCellContextMenu($event)" (cellValueChanged)="onCellValueChanged($event)" |
5 | - (cellFocused)="onCellFocused($event)" (rowSelected)="onRowSelected($event)" (selectionChanged)="onSelectionChanged()" (beforeFilterChanged)="onBeforeFilterChanged()" (afterFilterChanged)="onAfterFilterChanged()" (filterModified)="onFilterModified()" | |
5 | + (rowSelected)="onRowSelected($event)" (selectionChanged)="onSelectionChanged()" (beforeFilterChanged)="onBeforeFilterChanged()" (afterFilterChanged)="onAfterFilterChanged()" (filterModified)="onFilterModified()" | |
6 | 6 | (beforeSortChanged)="onBeforeSortChanged()" (afterSortChanged)="onAfterSortChanged($event)" (virtualRowRemoved)="onVirtualRowRemoved($event)" (rowClicked)="onRowClicked($event)"> |
7 | 7 | </ag-grid-ng2> |
8 | 8 | <div class="control_button"> | ... | ... |
src/app/data/road/road.component.ts
... | ... | @@ -13,6 +13,7 @@ import { RendererComponent } from '../../../helpers/renderer.component'; |
13 | 13 | import { RoadTypeSelectList } from '../../../models/road-type-select-list'; |
14 | 14 | |
15 | 15 | import { routerTransition } from '../../../animations/router.animation'; |
16 | +import {Way} from "../../../models/way"; | |
16 | 17 | |
17 | 18 | @Component({ |
18 | 19 | // tslint:disable-next-line:component-selector |
... | ... | @@ -35,8 +36,14 @@ export class RoadComponent extends StatementBase { |
35 | 36 | } |
36 | 37 | |
37 | 38 | public showOnMap(): void { |
38 | - console.log(this.gridOptions.api.getSelectedRows()[0].id); | |
39 | - this.mapComponent.showMap(); | |
39 | + let selectedRows: any[] = this.gridOptions.api.getSelectedRows(); | |
40 | + if (selectedRows.length) { | |
41 | + let id = selectedRows[0].id; | |
42 | + this.service.getRelation(id).then(x => { | |
43 | + this.mapComponent.setWays(x); | |
44 | + return x; | |
45 | + }); | |
46 | + } | |
40 | 47 | } |
41 | 48 | |
42 | 49 | protected createColumnDefs(): any[] { | ... | ... |
src/components/road-map.component.ts
1 | 1 | import { Component, Input, AfterViewInit } from '@angular/core'; |
2 | 2 | import * as L from 'leaflet'; |
3 | +import { Way } from '../models/way'; | |
3 | 4 | |
4 | 5 | @Component({ |
5 | 6 | // tslint:disable-next-line:component-selector |
... | ... | @@ -9,6 +10,7 @@ import * as L from 'leaflet'; |
9 | 10 | export class RoadMapComponent implements AfterViewInit { |
10 | 11 | protected isVisible: boolean = false; |
11 | 12 | protected map: L.Map; |
13 | + protected ways: Way[]; | |
12 | 14 | @Input() identificator: string = 'mapID'; |
13 | 15 | |
14 | 16 | public ngAfterViewInit(): void { |
... | ... | @@ -21,6 +23,46 @@ export class RoadMapComponent implements AfterViewInit { |
21 | 23 | this.isVisible = true; |
22 | 24 | } |
23 | 25 | public getHeight(): string { |
24 | - return this.isVisible ? '100%' : '0'; | |
26 | + return this.isVisible ? '100%' : '100%'; | |
27 | + } | |
28 | + public setWays(ways: Way[]): void { | |
29 | + this.ways = ways; | |
30 | + this.showWays(); | |
31 | + } | |
32 | + protected showWays(): void { | |
33 | + let minLat: number = 0; | |
34 | + let maxLat: number = 0; | |
35 | + let minLon: number = 0; | |
36 | + let maxLon: number = 0; | |
37 | + console.log(this.ways); | |
38 | + this.ways.forEach((way) => { | |
39 | + let nodes: L.LatLng[] = []; | |
40 | + way.nodes.forEach((node) => { | |
41 | + if (minLat == 0) { | |
42 | + minLat = node.lat; | |
43 | + maxLat = node.lat; | |
44 | + } else { | |
45 | + minLat = (minLat > node.lat)?node.lat:minLat; | |
46 | + maxLat = (maxLat < node.lat)?node.lat:maxLat; | |
47 | + } | |
48 | + if (minLon == 0) { | |
49 | + minLon = node.lon; | |
50 | + maxLon = node.lon; | |
51 | + } else { | |
52 | + minLon = (minLon > node.lon)?node.lon:minLon; | |
53 | + maxLon = (maxLon < node.lon)?node.lon:maxLon; | |
54 | + } | |
55 | + let latLng = node.getLatLng(); | |
56 | + nodes.push(latLng); | |
57 | + }); | |
58 | + way.polyline = L.polyline(nodes, {color: 'red'}).addTo(this.map); | |
59 | + console.log(way.polyline); | |
60 | + }); | |
61 | + this.map.fitBounds([ | |
62 | + [minLat, minLon], | |
63 | + [maxLat, maxLon] | |
64 | + ]); | |
65 | + console.log(minLat, maxLat, minLon, maxLon); | |
66 | + this.showMap(); | |
25 | 67 | } |
26 | 68 | } | ... | ... |
1 | +import * as L from 'leaflet'; | |
2 | + | |
3 | +export class Node { | |
4 | + id: number; | |
5 | + index: number; | |
6 | + lat: number; | |
7 | + lon: number; | |
8 | + latLng: L.LatLng; | |
9 | + protected createLatLng(): void { | |
10 | + this.latLng = L.latLng(this.lat, this.lon); | |
11 | + } | |
12 | + public getLatLng(): L.LatLng { | |
13 | + if (this.latLng == undefined) { | |
14 | + this.createLatLng(); | |
15 | + } | |
16 | + return this.latLng; | |
17 | + } | |
18 | + public setLatLng(lat: number, lon: number): void { | |
19 | + this.lat = lat; | |
20 | + this.lon = lon; | |
21 | + this.createLatLng(); | |
22 | + } | |
23 | +} | |
0 | 24 | \ No newline at end of file | ... | ... |
src/services/road.service.ts
... | ... | @@ -4,6 +4,9 @@ import { Http } from '@angular/http'; |
4 | 4 | import { StatementBaseService } from './statement.base.service'; |
5 | 5 | |
6 | 6 | import { Road } from '../models/road'; |
7 | +import {Way} from "../models/way"; | |
8 | +import {Node} from "../models/node"; | |
9 | +import {id} from "@swimlane/ngx-charts/release/utils/id"; | |
7 | 10 | |
8 | 11 | @Injectable() |
9 | 12 | export class RoadService extends StatementBaseService { |
... | ... | @@ -14,10 +17,35 @@ export class RoadService extends StatementBaseService { |
14 | 17 | public createModel(): Object { |
15 | 18 | return new Road(); |
16 | 19 | } |
20 | + public getRelation(id: number): Promise<any> { | |
21 | + return this.http.get(this.url + '/relation?id=' + id, { headers: this.headers }) | |
22 | + .toPromise() | |
23 | + .then(x => this.decodeWays(x.json())) | |
24 | + .catch(this.handleError); | |
25 | + } | |
17 | 26 | protected parseModels(json: any): any[] { |
18 | 27 | return json.roadEditDsM as Road[]; |
19 | 28 | }; |
20 | 29 | protected parseModel(json: any): any { |
21 | 30 | return json as Road; |
22 | 31 | }; |
32 | + protected decodeWays(json: Object[]): Way[] { | |
33 | + let result: Way[] = []; | |
34 | + json.forEach((way: Way) => { | |
35 | + let nodes: Node[] = []; | |
36 | + way.nodes.forEach((node: Node) => { | |
37 | + let nodeObj: Node = new Node(); | |
38 | + nodeObj.id = node.id; | |
39 | + nodeObj.index = node.index; | |
40 | + nodeObj.lat = node.lat; | |
41 | + nodeObj.lon = node.lon; | |
42 | + nodes.push(nodeObj); | |
43 | + }); | |
44 | + let wayObj: Way = new Way(); | |
45 | + wayObj.id = way.id; | |
46 | + wayObj.nodes = nodes; | |
47 | + result.push(wayObj); | |
48 | + }); | |
49 | + return result; | |
50 | + } | |
23 | 51 | } | ... | ... |