File

src/lib/managers/polygon-manager.ts

Index

Properties
Methods

Constructor

constructor(_mapsWrapper: GoogleMapsAPIWrapper, _zone: NgZone)
Parameters :
Name Type Optional
_mapsWrapper GoogleMapsAPIWrapper No
_zone NgZone No

Methods

addPolygon
addPolygon(path: NgMapsPolygon)
Parameters :
Name Type Optional
path NgMapsPolygon No
Returns : void
createEventObservable
createEventObservable(eventName: string, path: NgMapsPolygon)
Type parameters :
  • T
Parameters :
Name Type Optional
eventName string No
path NgMapsPolygon No
Returns : Observable<T>
deletePolygon
deletePolygon(paths: NgMapsPolygon)
Parameters :
Name Type Optional
paths NgMapsPolygon No
Returns : Promise<void>
setPolygonOptions
setPolygonOptions(path: NgMapsPolygon, options: literal type)
Parameters :
Name Type Optional
path NgMapsPolygon No
options literal type No
Returns : Promise<void>
Async updatePolygon
updatePolygon(polygon: NgMapsPolygon)
Parameters :
Name Type Optional
polygon NgMapsPolygon No
Returns : Promise<void>

Properties

Private _polygons
Type : Map<NgMapsPolygon | Promise<google.maps.Polygon>>
Default value : new Map< NgMapsPolygon, Promise<google.maps.Polygon> >()
import { Injectable, NgZone } from '@angular/core';
import { Observable, Observer } from 'rxjs';

import { NgMapsPolygon } from '../directives/polygon';
import { GoogleMapsAPIWrapper, NgMapsViewComponent } from '@ng-maps/core';

@Injectable({
  providedIn: NgMapsViewComponent,
})
export class PolygonManager {
  private _polygons: Map<NgMapsPolygon, Promise<google.maps.Polygon>> = new Map<
    NgMapsPolygon,
    Promise<google.maps.Polygon>
  >();

  constructor(
    private _mapsWrapper: GoogleMapsAPIWrapper,
    private _zone: NgZone,
  ) {}

  addPolygon(path: NgMapsPolygon) {
    const polygonPromise = this._mapsWrapper.createPolygon({
      clickable: path.clickable,
      draggable: path.draggable,
      editable: path.editable,
      fillColor: path.fillColor,
      fillOpacity: path.fillOpacity,
      geodesic: path.geodesic,
      paths: path.paths,
      strokeColor: path.strokeColor,
      strokeOpacity: path.strokeOpacity,
      strokeWeight: path.strokeWeight,
      visible: path.visible,
      zIndex: path.zIndex,
    });
    this._polygons.set(path, polygonPromise);
  }

  async updatePolygon(polygon: NgMapsPolygon): Promise<void> {
    const item = await this._polygons.get(polygon);
    if (item != null) {
      this._zone.run(() => {
        item.setPaths(polygon.paths);
      });
    }
  }

  setPolygonOptions(
    path: NgMapsPolygon,
    options: { [propName: string]: any },
  ): Promise<void> {
    return this._polygons.get(path).then((l: google.maps.Polygon) => {
      l.setOptions(options);
    });
  }

  deletePolygon(paths: NgMapsPolygon): Promise<void> {
    const m = this._polygons.get(paths);
    if (m == null) {
      return Promise.resolve();
    }
    return m.then((l: google.maps.Polygon) => {
      return this._zone.run(() => {
        l.setMap(null);
        this._polygons.delete(paths);
      });
    });
  }

  createEventObservable<T>(
    eventName: string,
    path: NgMapsPolygon,
  ): Observable<T> {
    return new Observable((observer: Observer<T>) => {
      this._polygons.get(path).then((l: google.maps.Polygon) => {
        l.addListener(eventName, (e: T) =>
          this._zone.run(() => observer.next(e)),
        );
      });
    });
  }
}

result-matching ""

    No results matching ""