UNPKG

hslayers-ng

Version:
1 lines 51.6 kB
{"version":3,"file":"hslayers-ng-services-draw.mjs","sources":["../../../projects/hslayers/services/draw/draw.service.params.ts","../../../projects/hslayers/services/draw/draw.service.ts","../../../projects/hslayers/services/draw/hslayers-ng-services-draw.ts"],"sourcesContent":["import {Subject} from 'rxjs';\nimport {Signal} from '@angular/core';\n\nimport {Collection, Feature} from 'ol';\nimport {DragBox, Draw, Modify, Snap} from 'ol/interaction';\nimport {EventsKey} from 'ol/events';\nimport {Layer, Vector as VectorLayer} from 'ol/layer';\nimport {Source, Vector as VectorSource} from 'ol/source';\n\nexport class HsDrawServiceParams {\n drawableLayers: Array<Layer<Source>> = [];\n /**\n * Drawable layers available on Layman not currently added to map\n */\n drawableLaymanLayers: Array<any> = [];\n /**\n * Whether there are some available drawable layers either visible in map or on server\n */\n drawableLayersAvailable = false;\n /**\n * Whether there are some drawable layers in a map\n */\n hasSomeDrawables = false;\n /**\n * Whether there are multiple drawable layers in a map\n */\n moreThanOneDrawable = false;\n draw: Draw;\n modify: Modify;\n\n boxSelection: DragBox;\n boxSelectionActive = false;\n /**\n * Snap interaction\n */\n snap: Snap;\n snapActive = false;\n snapSource: VectorSource;\n snapLayer: VectorLayer<VectorSource<Feature>>;\n /**\n * String of type GeometryType\n */\n type: 'Point' | 'Polygon' | 'LineString' | 'Circle';\n selectedLayer: VectorLayer<VectorSource<Feature>>;\n tmpDrawLayer: any;\n source: VectorSource;\n drawActive = false;\n selectedFeatures: any = new Collection();\n toggleSelectionString = 'selectAllFeatures';\n onSelected: any;\n currentStyle: any;\n /**\n * Toggles toolbar button 'Draw' class\n */\n highlightDrawButton = false;\n onDeselected: any;\n laymanEndpoint: any;\n previouslySelected: any;\n isAuthenticated: Signal<boolean>;\n onlyMine = true;\n addedLayersRemoved = false;\n eventHandlers: EventsKey[] = [];\n\n public drawingLayerChanges: Subject<{\n layer: Layer<Source>;\n source: VectorSource;\n }> = new Subject();\n\n layerMetadataDialog: Subject<void> = new Subject();\n\n requiredSymbolizer = {\n Point: ['Point'],\n Polygon: ['Fill', 'Line', 'Polygon'],\n LineString: ['Line'],\n Circle: ['Fill', 'Line', 'Polygon'],\n };\n}\n","import {Injectable, NgZone, PLATFORM_ID, inject} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\nimport {lastValueFrom, merge} from 'rxjs';\nimport {takeUntilDestroyed, toObservable} from '@angular/core/rxjs-interop';\n\nimport {Circle} from 'ol/geom';\nimport {Cluster, Source, Vector as VectorSource} from 'ol/source';\nimport {DragBox, Draw, Modify, Snap} from 'ol/interaction';\nimport {DrawEvent} from 'ol/interaction/Draw';\nimport {EventsKey} from 'ol/events';\nimport {Feature, MapBrowserEvent} from 'ol';\nimport {Layer, Vector as VectorLayer} from 'ol/layer';\nimport {fromCircle} from 'ol/geom/Polygon';\nimport {platformModifierKeyOnly} from 'ol/events/condition';\nimport {unByKey} from 'ol/Observable';\n\nimport {\n HsAddDataOwsService,\n HsAddDataVectorService,\n HsLaymanBrowserService,\n} from 'hslayers-ng/services/add-data';\nimport {\n HsCommonLaymanLayerService,\n HsCommonLaymanService,\n} from 'hslayers-ng/common/layman';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsConfirmDialogComponent} from 'hslayers-ng/common/confirm';\nimport {HsDialogContainerService} from 'hslayers-ng/common/dialogs';\nimport {HsDrawServiceParams} from './draw.service.params';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLaymanService} from 'hslayers-ng/services/save-map';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n HsQueryBaseService,\n HsQueryVectorService,\n} from 'hslayers-ng/services/query';\nimport {HsRemoveLayerDialogService} from 'hslayers-ng/common/remove-multiple';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {defaultStyle} from 'hslayers-ng/services/styler';\nimport {\n getEditor,\n getName,\n getSld,\n getTitle,\n setDefinition,\n setEditor,\n setPath,\n setRemovable,\n setShowInLayerManager,\n setSld,\n setTitle,\n setWorkspace,\n} from 'hslayers-ng/common/extensions';\nimport {isLayerClustered, isLayerDrawable} from 'hslayers-ng/services/utils';\n\ntype ActivateParams = {\n onDrawStart?;\n onDrawEnd?;\n onSelected?;\n onDeselected?;\n changeStyle?;\n drawState?: boolean;\n};\n\nexport const TMP_LAYER_TITLE = 'tmpDrawLayer';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HsDrawService extends HsDrawServiceParams {\n hsMapService = inject(HsMapService);\n hsEventBusService = inject(HsEventBusService);\n hsLayoutService = inject(HsLayoutService);\n hsDialogContainerService = inject(HsDialogContainerService);\n hsLogService = inject(HsLogService);\n hsConfig = inject(HsConfig);\n hsQueryBaseService = inject(HsQueryBaseService);\n hsQueryVectorService = inject(HsQueryVectorService);\n hsLaymanService = inject(HsLaymanService);\n hsLanguageService = inject(HsLanguageService);\n hsLaymanBrowserService = inject(HsLaymanBrowserService);\n hsAddDataVectorService = inject(HsAddDataVectorService);\n hsCommonLaymanService = inject(HsCommonLaymanService);\n hsCommonLaymanLayerService = inject(HsCommonLaymanLayerService);\n hsToastService = inject(HsToastService);\n hsAddDataOwsService = inject(HsAddDataOwsService);\n private hsRemoveLayerDialogService = inject(HsRemoveLayerDialogService);\n private zone = inject(NgZone);\n private platformId = inject(PLATFORM_ID);\n\n isAuthenticated = this.hsCommonLaymanService.isAuthenticated;\n pendingLayers = this.hsCommonLaymanLayerService.pendingLayers;\n\n constructor() {\n super();\n this.keyUp = this.keyUp.bind(this);\n this.hsMapService.loaded().then((map) => {\n this.fillDrawableLayers();\n\n this.modify = new Modify({\n features: this.selectedFeatures,\n });\n map.addInteraction(this.modify);\n\n this.selectedFeatures.on('add', (e) => {\n if (this.onSelected) {\n this.onSelected(e);\n }\n });\n\n this.selectedFeatures.on('remove', (e) => {\n if (this.selectedFeatures.getLength() == 0) {\n this.modify.setActive(false);\n }\n });\n\n this.hsEventBusService.vectorQueryFeatureSelection.subscribe((event) => {\n this.selectedFeatures.push(event.feature);\n const layer = event.selector.getLayer(event.feature);\n if (getEditor(layer)?.editable) {\n this.modify.setActive(true);\n }\n });\n\n this.hsEventBusService.vectorQueryFeatureDeselection.subscribe(\n ({feature, selector}) => {\n this.selectedFeatures.remove(feature);\n },\n );\n\n merge(\n this.hsEventBusService.addedLayersRemoved,\n this.hsEventBusService.mapResets,\n ).subscribe(() => {\n this.addedLayersRemoved = true;\n this.fillDrawableLayers();\n });\n\n this.hsLayoutService.mainpanel$.subscribe((which) => {\n if (which === 'draw' && this.hsMapService.getMap()) {\n this.fillDrawableLayers();\n }\n });\n });\n\n toObservable(this.hsCommonLaymanService.isAuthenticated)\n .pipe(takeUntilDestroyed())\n .subscribe((isAuthenticated) => {\n this.fillDrawableLayers();\n //When metadata dialog window opened. Layer is being added\n if (this.selectedLayer && this.tmpDrawLayer) {\n setWorkspace(this.selectedLayer, this.hsCommonLaymanService.user());\n setDefinition(this.selectedLayer, {\n format: isAuthenticated ? 'WFS' : null,\n url: isAuthenticated\n ? this.hsCommonLaymanService.layman()?.url + '/wfs'\n : null,\n });\n }\n });\n }\n\n /**\n * selectedLayerString\n * @returns Possibly translated name of layer selected for drawing\n */\n selectedLayerString(): string {\n if (this.selectedLayer) {\n const title = getTitle(this.selectedLayer);\n return title == TMP_LAYER_TITLE\n ? this.translate('DRAW.unsavedDrawing')\n : this.hsLanguageService.getTranslationIgnoreNonExisting(\n 'LAYERS',\n title,\n undefined,\n ) || getName(this.selectedLayer);\n }\n return this.translate('DRAW.Select layer');\n }\n /**\n * snapLayerString\n * @returns Possibly translated name of layer selected for snapping\n */\n snapLayerString(): string {\n if (this.snapLayer) {\n const title = getTitle(this.snapLayer);\n return (\n this.hsLanguageService.getTranslationIgnoreNonExisting(\n 'LAYERS',\n title,\n undefined,\n ) || getName(this.snapLayer)\n );\n }\n }\n\n saveDrawingLayer(): void {\n if (this.selectedLayer) {\n this.previouslySelected = this.selectedLayer;\n }\n\n let tmpTitle = this.translate('DRAW.drawLayer');\n\n const tmpLayer = this.hsMapService.findLayerByTitle(TMP_LAYER_TITLE);\n const tmpSource = tmpLayer ? tmpLayer.getSource() : new VectorSource();\n\n let i = 1;\n while (this.hsMapService.findLayerByTitle(tmpTitle)) {\n tmpTitle = `${this.translate('DRAW.drawLayer')} ${i++}`;\n }\n const layman = this.hsCommonLaymanService.layman();\n const drawLayer = new VectorLayer<VectorSource<Feature>>({\n //TODO: Also name should be set, but take care in case a layer with that name already exists in layman\n source: tmpSource,\n visible: true,\n });\n setTitle(drawLayer, tmpTitle);\n setShowInLayerManager(drawLayer, true);\n setRemovable(drawLayer, true);\n setSld(drawLayer, defaultStyle);\n setEditor(drawLayer, {editable: true});\n setPath(drawLayer, this.hsConfig.defaultDrawLayerPath || 'User generated');\n setDefinition(drawLayer, {\n format: this.isAuthenticated ? 'WFS' : null,\n url: this.isAuthenticated ? layman.url + '/wfs' : null,\n });\n setWorkspace(drawLayer, this.hsCommonLaymanService.user());\n this.tmpDrawLayer = true;\n this.selectedLayer = drawLayer;\n this.layerMetadataDialog.next();\n }\n\n setType(what): boolean {\n if (this.type == what) {\n this.type = null;\n this.deactivateDrawing();\n const tmpLayer =\n this.hsMapService.findLayerByTitle(TMP_LAYER_TITLE) || null;\n if (tmpLayer) {\n this.hsMapService.getMap().removeLayer(tmpLayer);\n this.tmpDrawLayer = false;\n }\n this.hsQueryBaseService.activateQueries();\n return false;\n }\n //console.log(this.drawableLayers);\n //console.log(this.selectedLayer);\n if (this.drawableLayers.length == 0 && !this.tmpDrawLayer) {\n const drawLayer = new VectorLayer({\n source: new VectorSource(),\n visible: true,\n });\n setSld(drawLayer, defaultStyle);\n setTitle(drawLayer, TMP_LAYER_TITLE);\n setShowInLayerManager(drawLayer, false);\n setRemovable(drawLayer, true);\n setEditor(drawLayer, {editable: true});\n setPath(\n drawLayer,\n this.hsConfig.defaultDrawLayerPath || 'User generated',\n );\n this.tmpDrawLayer = true;\n this.selectedLayer = drawLayer;\n this.addDrawLayer(drawLayer);\n }\n this.type = what;\n if (this.selectedLayer) {\n this.source = isLayerClustered(this.selectedLayer)\n ? (this.selectedLayer.getSource() as Cluster<Feature>).getSource() //Is it clustered vector layer?\n : this.selectedLayer.getSource();\n }\n return true;\n }\n\n /**\n * Handles drawing layer selection/change by activating drawing for selected layer.\n * In case of Layman layer not yet existing in app it pulls the layer first.\n */\n async selectLayer(layer) {\n let metadata;\n let style;\n\n if (!(layer instanceof Layer)) {\n metadata = await this.hsLaymanBrowserService.fillLayerMetadata(\n this.laymanEndpoint,\n layer,\n );\n }\n if (metadata) {\n if (!metadata?.type?.includes('WFS')) {\n const dialog = this.hsDialogContainerService.create(\n HsConfirmDialogComponent,\n {\n message: 'DRAW.thisLayerDoesNotSupportDrawing',\n title: 'DRAW.notAVectorLayer',\n },\n );\n const confirmed = await dialog.waitResult();\n if (confirmed == 'yes') {\n await this.hsAddDataOwsService.connectToOWS({\n type: 'wms',\n uri: decodeURIComponent(metadata.wms.url),\n layer: layer.name,\n });\n this.selectedLayer = null;\n this.fillDrawableLayers();\n }\n return;\n }\n if (metadata.style?.url) {\n style = await this.hsCommonLaymanService.getStyleFromUrl(\n metadata.style?.url,\n );\n }\n if (metadata.style?.type == 'sld') {\n if (!style?.includes('StyledLayerDescriptor')) {\n style = undefined;\n }\n }\n if (metadata.style?.type == 'qml') {\n if (!style?.includes('<qgis')) {\n style = undefined;\n }\n }\n }\n\n let lyr = layer;\n if (layer.workspace) {\n lyr = await this.hsAddDataVectorService.addVectorLayer(\n 'wfs',\n this.laymanEndpoint.url,\n layer.name,\n layer.title,\n undefined,\n 'EPSG:4326',\n {workspace: layer.workspace, saveToLayman: true, style: style},\n );\n lyr = this.hsMapService.findLayerByTitle(layer.title);\n }\n if (lyr != this.selectedLayer) {\n if (\n this.selectedLayer &&\n getTitle(this.selectedLayer) == TMP_LAYER_TITLE\n ) {\n this.tmpDrawLayer = false;\n this.hsMapService.getMap().removeLayer(this.selectedLayer);\n }\n\n this.selectedLayer = lyr;\n this.changeDrawSource();\n }\n this.fillDrawableLayers();\n }\n /**\n * Add draw layer to the map and repopulate list of drawables.\n */\n addDrawLayer(layer: VectorLayer<VectorSource<Feature>>) {\n this.hsMapService.getMap().addLayer(layer);\n this.fillDrawableLayers();\n }\n\n /**\n * @param changeStyle - controller callback function\n * Update draw style without necessity to reactivate drawing interaction\n */\n updateStyle(changeStyle) {\n if (this.draw) {\n this.currentStyle = changeStyle();\n this.draw.getOverlay().setStyle(this.currentStyle);\n }\n }\n\n onDrawEnd(e) {\n if (!getEditor(this.selectedLayer)) {\n return;\n }\n const editorConfig = getEditor(this.selectedLayer);\n if (editorConfig.defaultAttributes) {\n for (const key in editorConfig.defaultAttributes) {\n const value = editorConfig.defaultAttributes[key];\n e.feature.set(key, value);\n }\n }\n /*Timeout is necessary because features are not immediately\n * added to the layer and layer can't be retrieved from the\n * feature, so they don't appear in Info panel */\n if (\n this.hsLayoutService.mainpanel != 'draw' &&\n this.hsConfig.openQueryPanelOnDrawEnd\n ) {\n this.hsLayoutService.setMainPanel('query');\n }\n setTimeout(() => {\n this.addFeatureToSelector(e.feature);\n });\n }\n\n /**\n * Adds drawn feature to selection\n */\n addFeatureToSelector(feature) {\n //Zone is used to ensure change detection updates the view\n this.zone.run(() => {\n this.hsQueryBaseService.clear('features');\n this.hsQueryVectorService.selector.getFeatures().push(feature);\n this.hsQueryVectorService.createFeatureAttributeList();\n });\n }\n\n /**\n * Re-enables getFeatureInfo info and cleans up after drawing\n */\n afterDrawEnd(): void {\n if (this.draw) {\n this.draw.setActive(false);\n }\n this.drawActive = false;\n }\n\n removeLastPoint(): void {\n this.draw.removeLastPoint();\n }\n\n /**\n * Sets layer source where new drawing should be pushed to... after 'selectedLayer' change\n */\n changeDrawSource(): void {\n if (this.selectedLayer.getSource === undefined) {\n return;\n }\n this.source = isLayerClustered(this.selectedLayer)\n ? (this.selectedLayer.getSource() as Cluster<Feature>).getSource()\n : this.selectedLayer.getSource();\n\n this.drawingLayerChanges.next({\n layer: this.selectedLayer,\n source: this.source,\n });\n if (this.draw) {\n //Reactivate drawing with updated source\n this.activateDrawing({\n drawState: true,\n });\n //Set snapLayer and snap interaction source\n this.snapLayer = this.selectedLayer;\n this.toggleSnapping(this.source);\n }\n }\n\n /**\n * Deactivate all hs.draw interaction in map (Draw, Modify, Select)\n */\n async deactivateDrawing(): Promise<void> {\n const map = await this.hsMapService.loaded();\n this.afterDrawEnd();\n if (this.draw) {\n for (const key of this.eventHandlers) {\n unByKey(key);\n }\n map.removeInteraction(this.draw);\n this.draw = null;\n }\n }\n\n stopDrawing(): void {\n if (!this.draw || this.draw === null) {\n return;\n }\n try {\n if (this.draw.getActive()) {\n this.draw.finishDrawing();\n }\n } catch (ex) {\n this.hsLogService.warn(ex);\n }\n this.draw.setActive(false);\n this.modify.setActive(false);\n this.hsQueryBaseService.activateQueries();\n this.type = null;\n this.drawActive = false;\n }\n\n startDrawing(): void {\n const draw = this.draw;\n try {\n if (draw.getActive()) {\n draw.finishDrawing();\n }\n } catch (ex) {\n this.hsLogService.warn(ex);\n }\n draw.setActive(true);\n }\n\n /**\n * Repopulates drawable layers. In case layman connection exists it also creates\n * a list of available server possibilities.\n */\n async fillDrawableLayers(): Promise<void> {\n await this.hsMapService.loaded();\n const drawables = this.hsMapService\n .getLayersArray()\n .filter((layer: Layer<Source>) => isLayerDrawable(layer)) as VectorLayer<\n VectorSource<Feature>\n >[];\n\n if (drawables.length == 0 && !this.tmpDrawLayer) {\n this.type = null;\n this.deactivateDrawing();\n this.selectedLayer = null;\n this.snapSource = null;\n } else if (drawables.length > 0) {\n if (this.selectedLayerNotAvailable(drawables)) {\n this.selectedLayer = drawables[0];\n this.changeDrawSource();\n }\n }\n this.addedLayersRemoved = false;\n this.drawableLayers = drawables;\n this.laymanEndpoint = this.hsCommonLaymanService.layman();\n if (this.laymanEndpoint) {\n await lastValueFrom(\n this.hsLaymanBrowserService.queryCatalog(this.laymanEndpoint, {\n onlyMine: this.onlyMine,\n limit: '',\n query: {},\n }),\n );\n if (this.laymanEndpoint.layers) {\n this.drawableLaymanLayers = this.laymanEndpoint.layers.filter(\n (layer) => {\n return (\n !this.hsMapService.findLayerByTitle(layer.title) && layer.editable\n );\n },\n );\n }\n }\n this.drawableLayersAvailable =\n this.drawableLayers.length > 0 || this.drawableLaymanLayers.length > 0;\n this.hasSomeDrawables = this.drawableLayers.length > 0;\n this.moreThanOneDrawable = this.drawableLayers?.length > 1;\n }\n\n private selectedLayerNotAvailable(drawables) {\n if (this.addedLayersRemoved) {\n return true;\n }\n return (\n //Don't want to change after authChange when layer is being added\n (!this.tmpDrawLayer &&\n !drawables.some(\n (layer) =>\n this.selectedLayer &&\n getTitle(layer) == getTitle(this.selectedLayer),\n )) ||\n !this.selectedLayer\n );\n }\n\n keyUp(event) {\n if (event.key == 'Backspace') {\n this.removeLastPoint();\n }\n }\n\n /**\n * Determines whether right-click should finish the drawing or not\n * @param typeNum - Number used in calculation of minimal number of vertexes. Depends on geom type (polygon/line)\n * @param vertexCount - Number of vertexes the sketch has\n * @returns return boolean value if right mouse button was clicked\n */\n rightClickCondition(typeNum: number, vertexCount: number): boolean {\n const minPoints = this.hsConfig.preserveLastSketchPoint ? 1 : 0;\n const minVertexCount = typeNum - minPoints;\n if (vertexCount >= minVertexCount) {\n setTimeout(() => {\n if (minPoints == 0) {\n this.removeLastPoint();\n }\n this.draw.finishDrawing();\n }, 250);\n return true;\n }\n return false;\n }\n /**\n * @param options - Options object\n * @param onDrawStart - Callback function called when drawing is started\n * @param onDrawEnd - Callback function called when drawing is finished\n * @param onSelected - Callback function called when feature is selected for modification\n * @param onDeselected - Callback function called when feature is deselected\n * @param changeStyle - controller callback function which set style\n * dynamically according to selected parameters\n * @param drawState - Should drawing be set active when\n * creating the interactions\n * Add drawing interaction to map. Partial interactions are Draw, Modify and Select. Add Event listeners for drawstart, drawend and (de)selection of feature.\n */\n async activateDrawing({\n onDrawStart,\n onDrawEnd = (e) => this.onDrawEnd(e),\n onSelected,\n onDeselected,\n drawState = true,\n }: ActivateParams): Promise<void> {\n this.onDeselected = onDeselected;\n this.onSelected = onSelected;\n await this.deactivateDrawing();\n this.hsQueryBaseService.deactivateQueries();\n const drawInteraction = new Draw({\n source: this.source,\n type: /** GeometryType */ this.type,\n condition: (e: MapBrowserEvent<PointerEvent>) => {\n if (e.originalEvent.buttons === 1) {\n //left click\n return true;\n }\n if (e.originalEvent.buttons === 2) {\n //right click\n if (this.type == 'Polygon') {\n const vertexCount = (this.draw as any).sketchLineCoords_?.length;\n return this.rightClickCondition(4, vertexCount);\n }\n if (this.type == 'LineString') {\n const vertexCount = (this.draw as any).sketchCoords_?.length;\n return this.rightClickCondition(2, vertexCount - 1);\n }\n }\n },\n });\n\n this.setInteraction(drawInteraction);\n this.draw.setActive(drawState);\n this.addHandler(\n drawInteraction.on('drawstart', (e: DrawEvent) => {\n this.checkForMatchingSymbolizer();\n if (onDrawStart) {\n onDrawStart(e);\n }\n }),\n );\n\n this.addHandler(\n drawInteraction.on('drawend', (e: DrawEvent) => {\n if (this.type == 'Circle') {\n e.feature.setGeometry(fromCircle(e.feature.getGeometry() as Circle));\n }\n if (onDrawEnd) {\n onDrawEnd(e);\n }\n }),\n );\n\n //Add snap interaction - must be added after the Modify and Draw interactions\n const snapSourceToBeUsed = this.snapSource ? this.snapSource : this.source;\n this.toggleSnapping(snapSourceToBeUsed);\n }\n\n /**\n * Register event handlers on draw interactions, so they can be unsubscribed after\n */\n addHandler(e: EventsKey) {\n this.eventHandlers.push(e);\n }\n\n /**\n * Add draw interaction on map and set some enhancements on it which don't depend on activateDrawing function\n */\n async setInteraction(interaction: Draw): Promise<void> {\n this.draw = interaction;\n const map = await this.hsMapService.loaded();\n map.addInteraction(interaction);\n\n this.addHandler(\n interaction.on('drawstart', (e: DrawEvent) => {\n if (isPlatformBrowser(this.platformId)) {\n document.addEventListener('keyup', this.keyUp.bind(this, e));\n }\n }),\n );\n\n this.addHandler(\n interaction.on('drawstart', () => {\n this.drawActive = true;\n this.modify.setActive(false);\n }),\n );\n\n this.addHandler(\n interaction.on('drawend', (e: DrawEvent) => {\n if (isPlatformBrowser(this.platformId)) {\n document.removeEventListener('keyup', this.keyUp.bind(this, e));\n }\n }),\n );\n }\n\n /**\n * Syntactic sugar for translating\n */\n private translate(key: string, params?: any): string {\n return this.hsLanguageService.getTranslation(key, params);\n }\n\n /**\n * Display warning if symbolizer for current geometry being drawn is not present on layer\n */\n private checkForMatchingSymbolizer() {\n if (!this.hasRequiredSymbolizer()) {\n const stylingMissingHeader = this.translate('DRAW.stylingMissing');\n const txtPanelTitle = this.translate('PANEL_HEADER.LM');\n const stylingMissingWarning = this.translate(\n 'DRAW.stylingMissingWarning',\n {\n type: this.type,\n symbolizer: this.requiredSymbolizer[this.type].join(' or '),\n panel: txtPanelTitle,\n },\n );\n this.hsToastService.createToastPopupMessage(\n stylingMissingHeader,\n `${stylingMissingWarning}`,\n {\n serviceCalledFrom: 'HsDrawService',\n },\n );\n }\n }\n\n /**\n * Checks whether selected geometry can be properly visualized on selected layer\n */\n hasRequiredSymbolizer(): boolean {\n const sld = getSld(this.selectedLayer);\n return this.requiredSymbolizer[this.type].some((symbolizer) => {\n return sld.includes(`${symbolizer}Symbolizer`);\n });\n }\n\n /**\n * Handle snap interaction changes\n * Remove snap interaction if it already exists, recreate it if source is provided.\n */\n toggleSnapping(source?: VectorSource): void {\n this.hsMapService.loaded().then((map) => {\n this.snapSource = source ? source : this.snapSource;\n if (this.snap) {\n map.removeInteraction(this.snap);\n // this.snapLayer = null;\n }\n if (this.snapActive && this.snapSource) {\n this.snap = new Snap({\n source: this.snapSource,\n });\n map.addInteraction(this.snap);\n }\n });\n }\n /**\n * Changes layer source of snap interaction\n */\n changeSnapSource(layer: VectorLayer<VectorSource<Feature>>): void {\n //isLayerClustered\n const snapSourceToBeUsed = isLayerClustered(layer)\n ? (layer.getSource() as Cluster<Feature>).getSource()\n : layer.getSource();\n this.snapLayer = layer;\n this.toggleSnapping(snapSourceToBeUsed);\n }\n\n /**\n * Selects or deselects all features in this.selectedLayer\n */\n selectAllFeatures(): void {\n const selectFeatures =\n this.selectedFeatures.getLength() !=\n this.selectedLayer.getSource().getFeatures().length;\n this.toggleSelectionString = selectFeatures\n ? 'deselectAllFeatures'\n : 'selectAllFeatures';\n this.hsQueryBaseService.clear('features');\n this.hsQueryBaseService.selector.getFeatures().clear();\n\n if (selectFeatures) {\n this.hsQueryBaseService.selector\n .getFeatures()\n .extend(this.selectedLayer.getSource().getFeatures());\n }\n this.hsQueryVectorService.createFeatureAttributeList();\n }\n\n toggleBoxSelection(): void {\n this.hsMapService.loaded().then((map) => {\n if (this.boxSelection) {\n map.removeInteraction(this.boxSelection);\n }\n if (this.boxSelectionActive) {\n this.boxSelection = new DragBox({\n condition: platformModifierKeyOnly,\n });\n map.addInteraction(this.boxSelection);\n\n this.boxSelection.on('boxend', () => {\n if (!this.selectedLayer) {\n return;\n }\n this.hsQueryBaseService.clear('features');\n\n const extent = this.boxSelection.getGeometry().getExtent();\n this.selectedLayer\n .getSource()\n .forEachFeatureIntersectingExtent(extent, (feature) => {\n this.hsQueryBaseService.selector.getFeatures().push(feature);\n });\n\n this.hsQueryVectorService.createFeatureAttributeList();\n });\n\n this.boxSelection.on('boxstart' as any, () => {\n this.hsQueryBaseService.selector.getFeatures().clear();\n });\n this.hsToastService.createToastPopupMessage(\n this.translate('DRAW.boxSelectionActivated'),\n `${this.translate('DRAW.useModifierToSelectWithBox', {\n platformModifierKey: 'CTRL/META',\n })}`,\n {\n type: 'info',\n serviceCalledFrom: 'HsDrawService',\n },\n );\n }\n });\n }\n\n /**\n * Remove one draw layer\n */\n async removeLayer() {\n await this.layerRemoval(false);\n }\n\n /**\n * Remove multiple draw layers\n */\n async removeMultipleLayers() {\n await this.layerRemoval(true);\n }\n\n /**\n * Remove draw layer/layers\n */\n private async layerRemoval(multi: boolean = false) {\n let confirmed;\n const a: ['map', 'mapcatalogue'] | ['map'] =\n this.hsCommonLaymanService.isAuthenticated()\n ? ['map', 'mapcatalogue']\n : ['map'];\n if (multi) {\n confirmed = await this.hsRemoveLayerDialogService.removeMultipleLayers(\n this.drawableLayers,\n a,\n );\n } else {\n confirmed = await this.hsRemoveLayerDialogService.removeLayer(\n this.selectedLayer,\n a,\n );\n }\n if (confirmed) {\n this.selectedLayer = null;\n this.fillDrawableLayers();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["VectorSource","VectorLayer"],"mappings":"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