1 | import {Injectable, NgZone} from '@angular/core';
|
2 | import {Observable} from 'rxjs/Observable';
|
3 | import {Observer} from 'rxjs/Observer';
|
4 |
|
5 | import {SebmGoogleMapKmlLayer} from './../../directives/google-map-kml-layer';
|
6 | import {GoogleMapsAPIWrapper} from './../google-maps-api-wrapper';
|
7 | import {KmlLayer, KmlLayerOptions} from './../google-maps-types';
|
8 |
|
9 | declare var google: any;
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | @Injectable()
|
15 | export class KmlLayerManager {
|
16 | private _layers: Map<SebmGoogleMapKmlLayer, Promise<KmlLayer>> =
|
17 | new Map<SebmGoogleMapKmlLayer, Promise<KmlLayer>>();
|
18 |
|
19 | constructor(private _wrapper: GoogleMapsAPIWrapper, private _zone: NgZone) {}
|
20 |
|
21 | |
22 |
|
23 |
|
24 | addKmlLayer(layer: SebmGoogleMapKmlLayer) {
|
25 | const newLayer = this._wrapper.getNativeMap().then(m => {
|
26 | return new google.maps.KmlLayer(<KmlLayerOptions>{
|
27 | clickable: layer.clickable,
|
28 | map: m,
|
29 | preserveViewport: layer.preserveViewport,
|
30 | screenOverlays: layer.screenOverlays,
|
31 | suppressInfoWindows: layer.suppressInfoWindows,
|
32 | url: layer.url,
|
33 | zIndex: layer.zIndex
|
34 | });
|
35 | });
|
36 | this._layers.set(layer, newLayer);
|
37 | }
|
38 |
|
39 | setOptions(layer: SebmGoogleMapKmlLayer, options: KmlLayerOptions) {
|
40 | this._layers.get(layer).then(l => l.setOptions(options));
|
41 | }
|
42 |
|
43 | deleteKmlLayer(layer: SebmGoogleMapKmlLayer) {
|
44 | this._layers.get(layer).then(l => {
|
45 | l.setMap(null);
|
46 | this._layers.delete(layer);
|
47 | });
|
48 | }
|
49 |
|
50 | |
51 |
|
52 |
|
53 | createEventObservable<T>(eventName: string, layer: SebmGoogleMapKmlLayer): Observable<T> {
|
54 | return Observable.create((observer: Observer<T>) => {
|
55 | this._layers.get(layer).then((m: KmlLayer) => {
|
56 | m.addListener(eventName, (e: T) => this._zone.run(() => observer.next(e)));
|
57 | });
|
58 | });
|
59 | }
|
60 | }
|