diff --git a/projects/common-map/src/fm-map/actions/map.actions.ts b/projects/common-map/src/fm-map/actions/map.actions.ts index 69547c1..480c9cc 100644 --- a/projects/common-map/src/fm-map/actions/map.actions.ts +++ b/projects/common-map/src/fm-map/actions/map.actions.ts @@ -54,6 +54,8 @@ export const SETLAYERVALUESLOCATION = '[Map] SetLayerValuesLocation' export const TOGGLELAYERVALUESENABLED = '[Map] ToggleLayerValuesEnabled' export const GETLAYERVALUE = '[Map] GetLayerValue' export const GETLAYERVALUESUCCESS = '[Map] GetLayerValueSuccess' +export const TOGGLESHOWDATALAYERSLIDE = '[Map] ToggleShowDataLayerSlide' + export class Clear implements Action { readonly type = CLEAR; @@ -316,6 +318,11 @@ export class GetLayerValueSuccess implements Action { constructor(public layervalue:ILayervalue) { } } +export class ToggleShowDataLayerSlide implements Action { + readonly type = TOGGLESHOWDATALAYERSLIDE; + constructor() {} +} + export type Actions = SetMapState | Init | Clear @@ -359,5 +366,6 @@ export type Actions = SetMapState | ToggleLayerValuesEnabled | GetLayerValueSuccess | GetLayerValue - | SetPeriod; + | SetPeriod + | ToggleShowDataLayerSlide; diff --git a/projects/common-map/src/fm-map/components/aol/item-layers/item-layers.component.ts b/projects/common-map/src/fm-map/components/aol/item-layers/item-layers.component.ts index da4d683..ee09d8e 100644 --- a/projects/common-map/src/fm-map/components/aol/item-layers/item-layers.component.ts +++ b/projects/common-map/src/fm-map/components/aol/item-layers/item-layers.component.ts @@ -17,7 +17,7 @@ import VectorTileSource from 'ol/source/VectorTile'; import VectorTileLayer from 'ol/layer/VectorTile'; import {GeoJSON,MVT} from 'ol/format'; import { Geometry } from 'ol/geom'; -import TileSource from 'ol/source/Tile'; +import BaseLayer from 'ol/layer/Base'; @Component({ selector: 'fm-map-item-layers', @@ -32,9 +32,11 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange @Input() itemLayer: IItemLayer; @Output() onFeatureSelected: EventEmitter = new EventEmitter(); @Output() onFeatureHover: EventEmitter = new EventEmitter(); + @Output() onPrerender: EventEmitter = new EventEmitter(); private _apiEndPoint: string; private initialized:boolean = false; private mapEventHandlerInstalled = false; + private topLayerPrerenderEventhandlerInstalled = false; private selectedFeatures = {}; private selectionLayer:Layer = null; @@ -362,6 +364,36 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange } } + installTopLayerPrerenderEventhandler() { + if(!this.topLayerPrerenderEventhandlerInstalled && this.onPrerender.observers.length > 0 ) { + if(this.instance.getVisible()) { + var olLayers = this.instance.getLayers().getArray().filter(l=> l.getVisible()); + if(olLayers.length >0) { + var topLayer = olLayers[0] as any; + topLayer.on('prerender',this.topLayerPrerenderEventhandler); + topLayer.on('postrender',this.topLayerPostrenderEventhandler); + this.topLayerPrerenderEventhandlerInstalled = true; + } + } + } + } + + unInstallTopLayerPrerenderEventhandler() { + if(this.topLayerPrerenderEventhandlerInstalled && this.onPrerender.observers.length > 0 ) + { + if(this.instance.getVisible()) { + var olLayers = this.instance.getLayers().getArray().filter(l=> l.getVisible()); + if(olLayers.length >0) { + var topLayer = olLayers[0] as any; + topLayer.un('prerender',this.topLayerPrerenderEventhandler); + topLayer.un('postrender',this.topLayerPostrenderEventhandler); + this.topLayerPrerenderEventhandlerInstalled = false; + } + } + } + } + + addOrUpdateOlLayer(itemLayer:IItemLayer,index:number):Layer { if(!itemLayer) return null; var olLayers = this.instance.getLayers(); @@ -387,6 +419,7 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange } updateLayers(itemLayers: IItemLayer[]) { + this.unInstallTopLayerPrerenderEventhandler(); let newLayers: Layer[] = []; if (itemLayers) { itemLayers.forEach((itemLayer, index) => { @@ -414,12 +447,23 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange if(this.selectionLayer) olLayers.push(this.selectionLayer) } } + this.installTopLayerPrerenderEventhandler(); } + topLayerPrerenderEventhandler = (event) => { + this.onPrerender.emit(event); + } + + topLayerPostrenderEventhandler = (event) => { + const ctx = event.context; + ctx.restore(); + } + + mapEventHandler = (event) => { // select only when having observers if(event.type === 'click' && !this.onFeatureSelected.observers.length) return; - if(event.type === 'pointermove' && !this.onFeatureHover.observers.length) return; + if(event.type === 'pointermove' && !this.onFeatureHover.observers.length) return; let itemLayer= this.getItemlayer(this.itemLayer); if(itemLayer && itemLayer.layer) { this.selectedFeatures = {}; diff --git a/projects/common-map/src/fm-map/components/layer-switcher/layer-switcher.component.html b/projects/common-map/src/fm-map/components/layer-switcher/layer-switcher.component.html index 6b27e9d..d518983 100644 --- a/projects/common-map/src/fm-map/components/layer-switcher/layer-switcher.component.html +++ b/projects/common-map/src/fm-map/components/layer-switcher/layer-switcher.component.html @@ -20,7 +20,7 @@