import { Component, Host, Input, OnChanges, OnInit, forwardRef, SimpleChanges, Output, EventEmitter, } from '@angular/core'; import { ImageWMS } from 'ol/source'; import { LayerImageComponent } from '../layers/layerimage.component'; import { SourceComponent } from './source.component'; import { ProjectionLike } from 'ol/proj'; import { AttributionLike } from 'ol/source/Source'; import { LoadFunction } from 'ol/Image'; import { ImageSourceEvent } from 'ol/source/Image'; import { ServerType } from 'ol/source/WMSServerType'; @Component({ selector: 'aol-source-imagewms', template: ` `, providers: [{ provide: SourceComponent, useExisting: forwardRef(() => SourceImageWMSComponent) }], }) export class SourceImageWMSComponent extends SourceComponent implements OnChanges, OnInit { @Input() attributions: AttributionLike; @Input() crossOrigin: string; @Input() hidpi: boolean; @Input() serverType: ServerType; @Input() imageLoadFunction?: LoadFunction; @Input() params: { [key: string]: any }; @Input() projection: ProjectionLike | string; @Input() ratio: number; @Input() resolutions: Array; @Input() url: string; @Output() imageLoadStart = new EventEmitter(); @Output() imageLoadEnd = new EventEmitter(); @Output() imageLoadError = new EventEmitter(); instance: ImageWMS; constructor(@Host() layer: LayerImageComponent) { super(layer); } ngOnInit() { this.instance = new ImageWMS(this); this.host.instance.setSource(this.instance); this.instance.on('imageloadstart', (event: ImageSourceEvent) => this.imageLoadStart.emit(event)); this.instance.on('imageloadend', (event: ImageSourceEvent) => this.imageLoadEnd.emit(event)); this.instance.on('imageloaderror', (event: ImageSourceEvent) => this.imageLoadError.emit(event)); } ngOnChanges(changes: SimpleChanges) { if (this.instance && changes.hasOwnProperty('params')) { this.instance.updateParams(this.params); } } }