UNPKG

@ng-maps/google

Version:

**@ng-maps/google** is a simple, modular and tree-shakable library for displaying google-maps inside an angular application

130 lines 18.9 kB
import { Component, NgZone } from '@angular/core'; import { CircleManager, FitBoundsService, InfoWindowManager, MapsApiWrapper, MarkerManager, NgMapsViewComponent, PolygonManager, PolylineManager, RectangleManager, } from '@ng-maps/core'; import { GoogleMapsAPIWrapper } from './google-maps-api-wrapper'; import { GoogleMapsFitBoundsService } from './google-maps-fit-bounds.service'; import { GoogleCircleManager } from './managers/circle.manager'; import { GoogleInfoWindowManager } from './managers/info-window.manager'; import { GoogleMapsMarkerManager } from './managers/marker.manager'; import { GooglePolygonManager } from './managers/polygon.manager'; import { GooglePolylineManager } from './managers/polyline.manager'; import { GoogleRectangleManager } from './managers/rectangle.manager'; import * as i0 from "@angular/core"; import * as i1 from "@ng-maps/core"; export class GoogleComponent extends NgMapsViewComponent { constructor(_mapsWrapper, _fitBoundsService, _zone) { super(_mapsWrapper, _fitBoundsService, _zone); } async _handleMapCenterChange() { const s = this._mapsWrapper .subscribeToMapEvent('center_changed') .subscribe(() => { this._mapsWrapper.getCenter().then((center) => { if (center) { this.latitude = center.lat; this.longitude = center.lng; this.centerChange.emit({ lat: this.latitude, lng: this.longitude, }); } }); }); this.subscription.add(s); } _handleBoundsChange() { const s = this._mapsWrapper .subscribeToMapEvent('bounds_changed') .subscribe(() => { this._mapsWrapper.getBounds().then((bounds) => { this.boundsChange.emit(bounds); }); }); this.subscription.add(s); } async _handleMapTypeIdChange() { const s = this._mapsWrapper .subscribeToMapEvent('maptypeid_changed') .subscribe(() => { this._mapsWrapper.getMapTypeId().then((mapTypeId) => { this.mapTypeIdChange.emit(mapTypeId); }); }); this.subscription.add(s); } _handleMapZoomChange() { const s = this._mapsWrapper .subscribeToMapEvent('zoom_changed') .subscribe(() => { this._mapsWrapper.getZoom().then((z) => { this.zoom = z ?? 8; this.zoomChange.emit(z); }); }); this.subscription.add(s); } _handleIdleEvent() { const s = this._mapsWrapper.subscribeToMapEvent('idle').subscribe(() => { this.idle.emit(void 0); }); this.subscription.add(s); } _handleTilesLoadedEvent() { const s = this._mapsWrapper .subscribeToMapEvent('tilesloaded') .subscribe(() => this.tilesLoaded.emit(void 0)); this.subscription.add(s); } _handleMapMouseEvents() { const events = [ { name: 'click', emitter: this.mapClick }, { name: 'rightclick', emitter: this.mapRightClick }, { name: 'dblclick', emitter: this.mapDblClick }, ]; events.forEach((e) => { const s = this._mapsWrapper .subscribeToMapEvent(e.name) .subscribe((event) => { const value = { coords: { lat: event[0].latLng.lat(), lng: event[0].latLng.lng() }, }; e.emitter.emit(value); }); this.subscription.add(s); }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GoogleComponent, deps: [{ token: i1.MapsApiWrapper }, { token: i1.FitBoundsService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: GoogleComponent, selector: "map-view", providers: [ { provide: MapsApiWrapper, useClass: GoogleMapsAPIWrapper }, { provide: FitBoundsService, useClass: GoogleMapsFitBoundsService }, { provide: MarkerManager, useClass: GoogleMapsMarkerManager }, { provide: CircleManager, useClass: GoogleCircleManager }, { provide: PolygonManager, useClass: GooglePolygonManager }, { provide: PolylineManager, useClass: GooglePolylineManager }, { provide: RectangleManager, useClass: GoogleRectangleManager }, { provide: InfoWindowManager, useClass: GoogleInfoWindowManager }, ], usesInheritance: true, ngImport: i0, template: ` <div class="map-container-inner" #container></div> <div class="map-content"> <ng-content></ng-content> </div> `, isInline: true, styles: [".map-container-inner{width:inherit;height:inherit}.map-content{display:none}\n"] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GoogleComponent, decorators: [{ type: Component, args: [{ selector: 'map-view', providers: [ { provide: MapsApiWrapper, useClass: GoogleMapsAPIWrapper }, { provide: FitBoundsService, useClass: GoogleMapsFitBoundsService }, { provide: MarkerManager, useClass: GoogleMapsMarkerManager }, { provide: CircleManager, useClass: GoogleCircleManager }, { provide: PolygonManager, useClass: GooglePolygonManager }, { provide: PolylineManager, useClass: GooglePolylineManager }, { provide: RectangleManager, useClass: GoogleRectangleManager }, { provide: InfoWindowManager, useClass: GoogleInfoWindowManager }, ], template: ` <div class="map-container-inner" #container></div> <div class="map-content"> <ng-content></ng-content> </div> `, styles: [".map-container-inner{width:inherit;height:inherit}.map-content{display:none}\n"] }] }], ctorParameters: () => [{ type: i1.MapsApiWrapper }, { type: i1.FitBoundsService }, { type: i0.NgZone }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZ29vZ2xlL3NyYy9saWIvZ29vZ2xlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQ0wsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLGVBQWUsRUFDZixnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQWlDdEUsTUFBTSxPQUFPLGVBQWdCLFNBQVEsbUJBQW9DO0lBQ3ZFLFlBQ0UsWUFBNEIsRUFDNUIsaUJBQW1DLEVBQ25DLEtBQWE7UUFFYixLQUFLLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFa0IsS0FBSyxDQUFDLHNCQUFzQjtRQUM3QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWTthQUN4Qixt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QUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUU7cUJBQ2xFLFlBYVM7Ozs7O0dBS1QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBDaXJjbGVNYW5hZ2VyLFxuICBGaXRCb3VuZHNTZXJ2aWNlLFxuICBJbmZvV2luZG93TWFuYWdlcixcbiAgTWFwc0FwaVdyYXBwZXIsXG4gIE1hcmtlck1hbmFnZXIsXG4gIE5nTWFwc1ZpZXdDb21wb25lbnQsXG4gIFBvbHlnb25NYW5hZ2VyLFxuICBQb2x5bGluZU1hbmFnZXIsXG4gIFJlY3RhbmdsZU1hbmFnZXIsXG59IGZyb20gJ0BuZy1tYXBzL2NvcmUnO1xuXG5pbXBvcnQgeyBHb29nbGVNYXBzQVBJV3JhcHBlciB9IGZyb20gJy4vZ29vZ2xlLW1hcHMtYXBpLXdyYXBwZXInO1xuaW1wb3J0IHsgR29vZ2xlTWFwc0ZpdEJvdW5kc1NlcnZpY2UgfSBmcm9tICcuL2dvb2dsZS1tYXBzLWZpdC1ib3VuZHMuc2VydmljZSc7XG5pbXBvcnQgeyBHb29nbGVDaXJjbGVNYW5hZ2VyIH0gZnJvbSAnLi9tYW5hZ2Vycy9jaXJjbGUubWFuYWdlcic7XG5pbXBvcnQgeyBHb29nbGVJbmZvV2luZG93TWFuYWdlciB9IGZyb20gJy4vbWFuYWdlcnMvaW5mby13aW5kb3cubWFuYWdlcic7XG5pbXBvcnQgeyBHb29nbGVNYXBzTWFya2VyTWFuYWdlciB9IGZyb20gJy4vbWFuYWdlcnMvbWFya2VyLm1hbmFnZXInO1xuaW1wb3J0IHsgR29vZ2xlUG9seWdvbk1hbmFnZXIgfSBmcm9tICcuL21hbmFnZXJzL3BvbHlnb24ubWFuYWdlcic7XG5pbXBvcnQgeyBHb29nbGVQb2x5bGluZU1hbmFnZXIgfSBmcm9tICcuL21hbmFnZXJzL3BvbHlsaW5lLm1hbmFnZXInO1xuaW1wb3J0IHsgR29vZ2xlUmVjdGFuZ2xlTWFuYWdlciB9IGZyb20gJy4vbWFuYWdlcnMvcmVjdGFuZ2xlLm1hbmFnZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXAtdmlldycsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogTWFwc0FwaVdyYXBwZXIsIHVzZUNsYXNzOiBHb29nbGVNYXBzQVBJV3JhcHBlciB9LFxuICAgIHsgcHJvdmlkZTogRml0Qm91bmRzU2VydmljZSwgdXNlQ2xhc3M6IEdvb2dsZU1hcHNGaXRCb3VuZHNTZXJ2aWNlIH0sXG4gICAgeyBwcm92aWRlOiBNYXJrZXJNYW5hZ2VyLCB1c2VDbGFzczogR29vZ2xlTWFwc01hcmtlck1hbmFnZXIgfSxcbiAgICB7IHByb3ZpZGU6IENpcmNsZU1hbmFnZXIsIHVzZUNsYXNzOiBHb29nbGVDaXJjbGVNYW5hZ2VyIH0sXG4gICAgeyBwcm92aWRlOiBQb2x5Z29uTWFuYWdlciwgdXNlQ2xhc3M6IEdvb2dsZVBvbHlnb25NYW5hZ2VyIH0sXG4gICAgeyBwcm92aWRlOiBQb2x5bGluZU1hbmFnZXIsIHVzZUNsYXNzOiBHb29nbGVQb2x5bGluZU1hbmFnZXIgfSxcbiAgICB7IHByb3ZpZGU6IFJlY3RhbmdsZU1hbmFnZXIsIHVzZUNsYXNzOiBHb29nbGVSZWN0YW5nbGVNYW5hZ2VyIH0sXG4gICAgeyBwcm92aWRlOiBJbmZvV2luZG93TWFuYWdlciwgdXNlQ2xhc3M6IEdvb2dsZUluZm9XaW5kb3dNYW5hZ2VyIH0sXG4gIF0sXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5tYXAtY29udGFpbmVyLWlubmVyIHtcbiAgICAgICAgd2lkdGg6IGluaGVyaXQ7XG4gICAgICAgIGhlaWdodDogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgLm1hcC1jb250ZW50IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJtYXAtY29udGFpbmVyLWlubmVyXCIgI2NvbnRhaW5lcj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWFwLWNvbnRlbnRcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgR29vZ2xlQ29tcG9uZW50IGV4dGVuZHMgTmdNYXBzVmlld0NvbXBvbmVudDxnb29nbGUubWFwcy5NYXA+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgX21hcHNXcmFwcGVyOiBNYXBzQXBpV3JhcHBlcixcbiAgICBfZml0Qm91bmRzU2VydmljZTogRml0Qm91bmRzU2VydmljZSxcbiAgICBfem9uZTogTmdab25lLFxuICApIHtcbiAgICBzdXBlcihfbWFwc1dyYXBwZXIsIF9maXRCb3VuZHNTZXJ2aWNlLCBfem9uZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgX2hhbmRsZU1hcENlbnRlckNoYW5nZSgpIHtcbiAgICBjb25zdCBzID0gdGhpcy5fbWFwc1dyYXBwZXJcbiAgICAgIC5zdWJzY3JpYmVUb01hcEV2ZW50KCdjZW50ZXJfY2hhbmdlZCcpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fbWFwc1dyYXBwZXIuZ2V0Q2VudGVyKCkudGhlbigoY2VudGVyKSA9PiB7XG4gICAgICAgICAgaWYgKGNlbnRlcikge1xuICAgICAgICAgICAgdGhpcy5sYXRpdHVkZSA9IGNlbnRlci5sYXQ7XG4gICAgICAgICAgICB0aGlzLmxvbmdpdHVkZSA9IGNlbnRlci5sbmc7XG4gICAgICAgICAgICB0aGlzLmNlbnRlckNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgbGF0OiB0aGlzLmxhdGl0dWRlLFxuICAgICAgICAgICAgICBsbmc6IHRoaXMubG9uZ2l0dWRlLFxuICAgICAgICAgICAgfSBhcyBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIF9oYW5kbGVCb3VuZHNDaGFuZ2UoKSB7XG4gICAgY29uc3QgcyA9IHRoaXMuX21hcHNXcmFwcGVyXG4gICAgICAuc3Vic2NyaWJlVG9NYXBFdmVudCgnYm91bmRzX2NoYW5nZWQnKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX21hcHNXcmFwcGVyLmdldEJvdW5kcygpLnRoZW4oKGJvdW5kcykgPT4ge1xuICAgICAgICAgIHRoaXMuYm91bmRzQ2hhbmdlLmVtaXQoYm91bmRzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQocyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgX2hhbmRsZU1hcFR5cGVJZENoYW5nZSgpIHtcbiAgICBjb25zdCBzID0gdGhpcy5fbWFwc1dyYXBwZXJcbiAgICAgIC5zdWJzY3JpYmVUb01hcEV2ZW50KCdtYXB0eXBlaWRfY2hhbmdlZCcpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fbWFwc1dyYXBwZXIuZ2V0TWFwVHlwZUlkKCkudGhlbigobWFwVHlwZUlkKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXBUeXBlSWRDaGFuZ2UuZW1pdChtYXBUeXBlSWQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBfaGFuZGxlTWFwWm9vbUNoYW5nZSgpIHtcbiAgICBjb25zdCBzID0gdGhpcy5fbWFwc1dyYXBwZXJcbiAgICAgIC5zdWJzY3JpYmVUb01hcEV2ZW50KCd6b29tX2NoYW5nZWQnKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX21hcHNXcmFwcGVyLmdldFpvb20oKS50aGVuKCh6KSA9PiB7XG4gICAgICAgICAgdGhpcy56b29tID0geiA/PyA4O1xuICAgICAgICAgIHRoaXMuem9vbUNoYW5nZS5lbWl0KHopO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBfaGFuZGxlSWRsZUV2ZW50KCkge1xuICAgIGNvbnN0IHMgPSB0aGlzLl9tYXBzV3JhcHBlci5zdWJzY3JpYmVUb01hcEV2ZW50KCdpZGxlJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuaWRsZS5lbWl0KHZvaWQgMCk7XG4gICAgfSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIF9oYW5kbGVUaWxlc0xvYWRlZEV2ZW50KCkge1xuICAgIGNvbnN0IHMgPSB0aGlzLl9tYXBzV3JhcHBlclxuICAgICAgLnN1YnNjcmliZVRvTWFwRXZlbnQoJ3RpbGVzbG9hZGVkJylcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy50aWxlc0xvYWRlZC5lbWl0KHZvaWQgMCkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBfaGFuZGxlTWFwTW91c2VFdmVudHMoKSB7XG4gICAgaW50ZXJmYWNlIEVtaXR0ZXIge1xuICAgICAgZW1pdCh2YWx1ZTogYW55KTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgRXZlbnQge1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgZW1pdHRlcjogRW1pdHRlcjtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudHM6IEFycmF5PEV2ZW50PiA9IFtcbiAgICAgIHsgbmFtZTogJ2NsaWNrJywgZW1pdHRlcjogdGhpcy5tYXBDbGljayB9LFxuICAgICAgeyBuYW1lOiAncmlnaHRjbGljaycsIGVtaXR0ZXI6IHRoaXMubWFwUmlnaHRDbGljayB9LFxuICAgICAgeyBuYW1lOiAnZGJsY2xpY2snLCBlbWl0dGVyOiB0aGlzLm1hcERibENsaWNrIH0sXG4gICAgXTtcblxuICAgIGV2ZW50cy5mb3JFYWNoKChlOiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgcyA9ICh0aGlzLl9tYXBzV3JhcHBlciBhcyBHb29nbGVNYXBzQVBJV3JhcHBlcilcbiAgICAgICAgLnN1YnNjcmliZVRvTWFwRXZlbnQoZS5uYW1lKVxuICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0ge1xuICAgICAgICAgICAgY29vcmRzOiB7IGxhdDogZXZlbnRbMF0ubGF0TG5nLmxhdCgpLCBsbmc6IGV2ZW50WzBdLmxhdExuZy5sbmcoKSB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgZS5lbWl0dGVyLmVtaXQodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChzKTtcbiAgICB9KTtcbiAgfVxufVxuIl19