Commit 88b2c0723793a59ea4d1f7f86d8002c5b5c5b4ee
1 parent
4cfbf7ca
Map
Showing
8 changed files
with
109 additions
and
16 deletions
Show diff stats
angular-cli.json
... | ... | @@ -23,7 +23,8 @@ |
23 | 23 | "../node_modules/@covalent/core/common/platform.css", |
24 | 24 | "../node_modules/@swimlane/ngx-charts/release/ngx-charts.css", |
25 | 25 | "../node_modules/ag-grid/dist/styles/ag-grid.css", |
26 | - "../node_modules/ag-grid/dist/styles/theme-blue.css" | |
26 | + "../node_modules/ag-grid/dist/styles/theme-blue.css", | |
27 | + "../node_modules/leaflet/dist/leaflet.css" | |
27 | 28 | ], |
28 | 29 | "scripts": [ |
29 | 30 | "../node_modules/hammerjs/hammer.min.js", | ... | ... |
src/app/app.module.ts
... | ... | @@ -11,10 +11,12 @@ import { AppComponent } from './app.component'; |
11 | 11 | import { MainComponent } from './main/main.component'; |
12 | 12 | import { LoginComponent } from './login/login.component'; |
13 | 13 | import { DataComponent } from './data/data.component'; |
14 | -import { TemplatesComponent } from './templates/templates.component';; | |
14 | +import { TemplatesComponent } from './templates/templates.component'; | |
15 | 15 | import { appRoutes, appRoutingProviders } from './app.routes'; |
16 | 16 | import { AgGridModule } from 'ag-grid-ng2/main'; |
17 | 17 | import { ChartComponent } from '../components/chart/chart.component'; |
18 | +import { CandTLeafletComponent } from 'angular2.leaflet.components'; | |
19 | +import { CandTLeafletService } from 'angular2.leaflet.components'; | |
18 | 20 | |
19 | 21 | import { RequestInterceptor } from '../config/interceptors/request.interceptor'; |
20 | 22 | |
... | ... | @@ -32,6 +34,7 @@ import { FlowIntensityComponent } from './data/flow-intensity/flow-intensity.com |
32 | 34 | import { RoadComponent } from './data/road/road.component'; |
33 | 35 | import { RoadServiceComponent } from './data/road-service/road-service.component'; |
34 | 36 | import { SettlementAddressLinkComponent } from './data/settlement-address-link/settlement-address-link.component'; |
37 | +import { MapComponent } from './data/map/map.component'; | |
35 | 38 | |
36 | 39 | // Services |
37 | 40 | import { BusStopCreateService } from '../services/bus-stop-create.service'; |
... | ... | @@ -80,6 +83,8 @@ const httpInterceptorProviders: Type<any>[] = [ |
80 | 83 | CrossSectionComponent, |
81 | 84 | RoadServiceComponent, |
82 | 85 | SettlementAddressLinkComponent, |
86 | + MapComponent, | |
87 | + CandTLeafletComponent | |
83 | 88 | ], // directives, components, and pipes owned by this NgModule |
84 | 89 | imports: [ |
85 | 90 | BrowserModule, |
... | ... | @@ -135,6 +140,7 @@ const httpInterceptorProviders: Type<any>[] = [ |
135 | 140 | RoadServiceCreateService, |
136 | 141 | SettlementAddressLinkService, |
137 | 142 | SettlementAddressLinkCreateService, |
143 | + CandTLeafletService, | |
138 | 144 | ], // additional providers needed for this module |
139 | 145 | entryComponents: [ ], |
140 | 146 | bootstrap: [ AppComponent ], | ... | ... |
src/app/app.routes.ts
... | ... | @@ -14,6 +14,7 @@ import { FlowIntensityComponent } from './data/flow-intensity/flow-intensity.com |
14 | 14 | import { RoadComponent } from './data/road/road.component'; |
15 | 15 | import { RoadServiceComponent } from './data/road-service/road-service.component'; |
16 | 16 | import { SettlementAddressLinkComponent } from './data/settlement-address-link/settlement-address-link.component'; |
17 | +import { MapComponent } from './data/map/map.component'; | |
17 | 18 | |
18 | 19 | const routes: Routes = [ |
19 | 20 | {path: 'login', component: LoginComponent}, |
... | ... | @@ -30,6 +31,7 @@ const routes: Routes = [ |
30 | 31 | {path: 'road-service', component: RoadServiceComponent}, |
31 | 32 | {path: 'road-to-category', component: RoadToCategoryComponent}, |
32 | 33 | {path: 'settlement-address-link', component: SettlementAddressLinkComponent}, |
34 | + {path: 'map', component: MapComponent}, | |
33 | 35 | ]}, |
34 | 36 | ]}, |
35 | 37 | ]; | ... | ... |
1 | +import { Component, ViewEncapsulation, OnInit } from '@angular/core'; | |
2 | +import * as L from 'leaflet'; | |
3 | + | |
4 | +@Component({ | |
5 | + // tslint:disable-next-line:component-selector | |
6 | + selector: 'map-grid', | |
7 | + templateUrl: 'map.component.html', | |
8 | + styleUrls: ['map.scss'], | |
9 | + encapsulation: ViewEncapsulation.None, | |
10 | +}) | |
11 | +export class MapComponent implements OnInit { | |
12 | + public map: L.Map; | |
13 | + public icon: L.Icon; | |
14 | + public markers: L.Marker[] = []; | |
15 | + public circles: L.Circle[] = []; | |
16 | + public polygon: L.Polygon[] = []; | |
17 | + ngOnInit(): void { | |
18 | + this.icon = L.icon({ | |
19 | + iconUrl: '/assets/icons/marker-icon.png', | |
20 | + iconSize: [25, 41], // size of the icon | |
21 | + popupAnchor: [-3, -76], // point from which the popup should open relative to the iconAnchor | |
22 | + }); | |
23 | + this.map = L.map('mapId').setView([51.505, -0.09], 13); | |
24 | + L.tileLayer('https://a.tile.openstreetmap.org/{z}/{x}/{y}.png', { | |
25 | + maxZoom: 18, | |
26 | + }).addTo(this.map); | |
27 | + let x: number = 51.5; | |
28 | + let y: number = -0.09; | |
29 | + for (let i: number = 0; i < 10; i++) { | |
30 | + this.markers.push(L.marker([x + i, y + i], { | |
31 | + icon: this.icon, | |
32 | + }).addTo(this.map)); | |
33 | + } | |
34 | + this.markers.forEach(function(i: L.Marker, y: number, z: L.Marker[]): void { | |
35 | + i.bindPopup('Popup from element #' + y); | |
36 | + i.bindTooltip('Popup from element #' + y); | |
37 | + }); | |
38 | + this.markers.push(L.marker([51.5, -0.09], { | |
39 | + icon: this.icon, | |
40 | + }).addTo(this.map)); | |
41 | + this.circles.push(L.circle([51.508, -0.11], { | |
42 | + color: 'red', | |
43 | + fillColor: '#f03', | |
44 | + fillOpacity: 0.5, | |
45 | + radius: 500, | |
46 | + }).addTo(this.map)); | |
47 | + this.polygon.push(L.polygon([ | |
48 | + [51.509, -0.08], | |
49 | + [51.503, -0.06], | |
50 | + [51.51, -0.047], | |
51 | + ]).addTo(this.map)); | |
52 | + }; | |
53 | +} | ... | ... |
1 | +.toolbar button { | |
2 | + margin: 2px; | |
3 | + padding: 0; | |
4 | +} | |
5 | + | |
6 | +#mapId { | |
7 | + height: 100%; | |
8 | +} | |
9 | + | |
10 | +.leaflet-container { | |
11 | + width: 100%; | |
12 | + height: 100%; | |
13 | +} | |
14 | + | |
15 | +.map-container { | |
16 | + height: 100%; | |
17 | +} | |
18 | + | |
19 | +leaf-element { | |
20 | + width: 100%; | |
21 | +} | |
22 | + | |
23 | +.leaflet-pane { | |
24 | + z-index: 0 !important; | |
25 | +} | |
0 | 26 | \ No newline at end of file | ... | ... |
1.43 KB
src/index.html
1 | 1 | <!doctype html> |
2 | 2 | <html> |
3 | + | |
3 | 4 | <head> |
4 | - <meta charset="utf-8"> | |
5 | - <title>Covalent Quickstart</title> | |
6 | - <base href="/"> | |
7 | - <link rel="icon" type="image/x-icon" href="favicon.ico"> | |
8 | - <link rel="icon" type="image/png" href="favicon.png" sizes="32x32"> | |
9 | - <meta name="theme-color" content="#000000"> | |
10 | - <meta name="viewport" content="width=device-width, initial-scale=1"> | |
5 | + <meta charset="utf-8"> | |
6 | + <title>Covalent Quickstart</title> | |
7 | + <base href="/"> | |
8 | + <link rel="icon" type="image/x-icon" href="favicon.ico"> | |
9 | + <link rel="icon" type="image/png" href="favicon.png" sizes="32x32"> | |
10 | + <meta name="theme-color" content="#000000"> | |
11 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
11 | 12 | </head> |
13 | + | |
12 | 14 | <body> |
13 | - <qs-app> | |
14 | - <div style="padding: 20%;text-align:center;"> | |
15 | - <img src="assets/icons/covalent.svg" width="200"> | |
16 | - <div>Quickstart Loading...</div> | |
17 | - </div> | |
18 | - </qs-app> | |
15 | + <qs-app> | |
16 | + <div style="padding: 20%;text-align:center;"> | |
17 | + <img src="assets/icons/covalent.svg" width="200"> | |
18 | + <div>Quickstart Loading...</div> | |
19 | + </div> | |
20 | + </qs-app> | |
19 | 21 | </body> |
20 | -</html> | |
22 | + | |
23 | +</html> | |
21 | 24 | \ No newline at end of file | ... | ... |