@regionerne/gis-komponent 0.0.13 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/regionerne-gis-komponent.mjs +181 -19
- package/fesm2022/regionerne-gis-komponent.mjs.map +1 -1
- package/lib/components/active-objects/activeObjects.component.d.ts +2 -0
- package/lib/components/legends-list/legends-list.component.d.ts +33 -0
- package/lib/components/map-search/map-search.component.d.ts +11 -0
- package/lib/models/ILegend.d.ts +19 -0
- package/lib/models/pagedResult.d.ts +4 -0
- package/lib/services/legend.service.d.ts +18 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regionerne-gis-komponent.mjs","sources":["../../../projects/gis-komponent/src/lib/config/config.ts","../../../projects/gis-komponent/src/lib/services/profile.service.ts","../../../projects/gis-komponent/src/lib/controls/LogoControl/logoControl.ts","../../../projects/gis-komponent/src/lib/controls/CopyrightControl/copyRightControl.ts","../../../projects/gis-komponent/src/lib/services/layerHelper.service.ts","../../../projects/gis-komponent/src/lib/components/lib-notification/lib-notification.component.ts","../../../projects/gis-komponent/src/lib/components/lib-notification/lib-notification.component.html","../../../projects/gis-komponent/src/lib/services/libError.service.ts","../../../projects/gis-komponent/src/lib/services/layerError.service.ts","../../../projects/gis-komponent/src/lib/components/layer-selector/layer-selector.component.ts","../../../projects/gis-komponent/src/lib/components/layer-selector/layer-selector.component.html","../../../projects/gis-komponent/src/lib/services/komponentSettingsHelper.service.ts","../../../projects/gis-komponent/src/lib/services/drawLayerSource.service.ts","../../../projects/gis-komponent/src/lib/services/featureHelper.service.ts","../../../projects/gis-komponent/src/lib/services/UndoRedo.service.ts","../../../projects/gis-komponent/src/lib/services/geometri-split.service.ts","../../../projects/gis-komponent/src/lib/components/toolbox/toolbox.component.ts","../../../projects/gis-komponent/src/lib/components/toolbox/toolbox.component.html","../../../projects/gis-komponent/src/lib/components/active-objects/activeObjects.component.ts","../../../projects/gis-komponent/src/lib/components/active-objects/activeObjects.component.html","../../../projects/gis-komponent/src/lib/components/map-search/map-search.component.ts","../../../projects/gis-komponent/src/lib/components/map-search/map-search.component.html","../../../projects/gis-komponent/src/lib/components/gis-komponent/gis-komponent.component.ts","../../../projects/gis-komponent/src/lib/components/gis-komponent/gis-komponent.component.html","../../../projects/gis-komponent/src/lib/services/libError.interceptor.service.ts","../../../projects/gis-komponent/src/lib/config/library-provider.ts","../../../projects/gis-komponent/src/public-api.ts","../../../projects/gis-komponent/src/regionerne-gis-komponent.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface GISKomponentConfig {\n apiBaseUrl: string;\n}\n\nexport const GISKOMPONENT_CONFIG = new InjectionToken<GISKomponentConfig>('GisKomponentConfig');\n","import { inject, Injectable } from '@angular/core';\nimport { GISKOMPONENT_CONFIG } from '../config/config';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { IProfileDetailed } from '../models/IProfile';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProfileService {\n\n private config = inject(GISKOMPONENT_CONFIG);\n private _baseUrl = this.config.apiBaseUrl;\n private _http = inject(HttpClient);\n\n getByIdentifier(identifier: string): Observable<IProfileDetailed> {\n const url = `${this._baseUrl}/api/profile/identifier/${identifier}`;\n return this._http.get<IProfileDetailed>(url);\n }\n}","// logo-control.ts\nimport { Control } from 'ol/control';\n\nexport class LogoControl extends Control {\n constructor(url: string) {\n const element = document.createElement('div');\n element.className = 'ol-logo ol-unselectable ol-control';\n\n if (url) {\n const img = document.createElement('img');\n img.src = url;\n img.alt = 'Logo';\n element.appendChild(img);\n } else {\n element.style.display = 'none';\n }\n\n super({ element });\n }\n}\n","import { Control } from 'ol/control';\n\nexport class CopyrightControl extends Control {\n constructor(text: string) {\n const element = document.createElement('div');\n element.className = 'ol-copyright ol-unselectable ol-control';\n element.innerText = text;\n\n super({ element });\n\n if (!text) {\n element.style.display = 'none';\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport BaseLayer from 'ol/layer/Base';\nimport Map from 'ol/Map';\nimport OLLayerGroup from 'ol/layer/Group';\nimport { LayerSelectorGroup } from '../models/profile';\nimport { ILayer } from '../models/ILayer';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LayerHelperService {\n\n private readonly _layerDbIdKey: string = 'layerDbId';\n private readonly _layerGroupDbIdKey: string = 'layerGroupDbId';\n private readonly _mapFilteredLayerGroupsKeyName: string = 'mapFilteredLayerGroups';\n private readonly _layerIdsToDisplayInMapKeyName: string = 'layerIdsToDisplayInMap';\n\n setDbId(layer: BaseLayer, id: number): void {\n layer.set(this._layerDbIdKey, id);\n }\n\n getDbId(layer: BaseLayer): number {\n const dbId = layer.get(this._layerDbIdKey) ?? -1;\n return +dbId;\n }\n\n setLayerGroupDbId(layer: BaseLayer, id: number): void {\n layer.set(this._layerGroupDbIdKey, id);\n }\n\n getLayerGroupDbId(layer: BaseLayer): number {\n const dbId = layer.get(this._layerGroupDbIdKey) ?? -1;\n return +dbId;\n }\n\n applyCachedLayersToDisplayInMap(map: Map, profileId: number): void {\n const layerIdsCachedToDisplay = localStorage.getItem(`${this._layerIdsToDisplayInMapKeyName}_${profileId}`)?.split(',');\n if (layerIdsCachedToDisplay) {\n //Bottom layers are rendered first, top layers are rendered last (on top)\n layerIdsCachedToDisplay.reverse();\n map.getLayers().getArray().forEach(layergroup => {\n if (layergroup instanceof OLLayerGroup) {\n layergroup.getLayers().getArray().forEach(l => {\n if (!layerIdsCachedToDisplay.some(id => l.get(this._layerDbIdKey) == id)) {\n const current = l.getVisible();\n if (current) {\n l.setVisible(!current);\n }\n } else {\n //Set z index to match the order in cache\n l.setZIndex(layerIdsCachedToDisplay.indexOf(l.get(this._layerDbIdKey).toString()));\n //console.log('layer id '+l.get(this._layerDbIdKey)+' - setZIndex:'+layerIdsCachedToDisplay.indexOf(l.get(this._layerDbIdKey).toString()));\n }\n })\n }\n })\n }\n }\n \n\n updateLayerOpacityInMap(map: Map, layer: ILayer): void {\n map.getLayers().getArray().forEach(layergroup => {\n if (layergroup instanceof OLLayerGroup) {\n layergroup.getLayers().getArray().forEach(l => {\n if (l.get(this._layerDbIdKey) === layer.id && layer.opacity) {\n l.setOpacity(layer.opacity);\n }\n })\n }}\n )\n }\n\n toggleLayerInMap(map: Map, layer: ILayer): void {\n map.getLayers().getArray().forEach(layergroup => {\n if (layergroup instanceof OLLayerGroup) {\n layergroup.getLayers().getArray().forEach(l => {\n if (l.get(this._layerDbIdKey) === layer.id) {\n const current = l.getVisible();\n l.setVisible(!current);\n }\n })}\n }\n );\n }\n}","import { Component, inject } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'lib-notification',\n templateUrl: './lib-notification.component.html',\n styleUrls: ['./lib-notification.component.scss'],\n standalone: true\n})\nexport class LibNotificationComponent {\n data: { messages: string[] } = inject(MAT_SNACK_BAR_DATA);\n private _snackRef = inject(MatSnackBarRef<LibNotificationComponent>);\n\n dismiss() {\n this._snackRef.dismiss();\n }\n}\n","<div class=\"notification-container\">\n <button mat-icon-button class=\"close-btn\" (click)=\"dismiss()\">×</button>\n @for (message of data.messages; track message) {\n <div class=\"lib-notification\">\n <span>{{ message }}</span>\n </div>\n }\n</div>","import { Injectable, inject } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { LibNotificationComponent } from '../components/lib-notification/lib-notification.component';\n\n@Injectable({ providedIn: 'root' })\nexport class LibErrorService {\n private _snackBar = inject(MatSnackBar);\n private _messages: string[] = [];\n\n //Format errors from backend or UI\n format(error: unknown): string {\n if (error instanceof HttpErrorResponse) {\n if (error.error?.message) return error.error.message;\n if (typeof error.error === 'string') return error.error;\n return `Server returned ${error.status}`;\n }\n\n if (error instanceof Error) return error.message;\n return 'An unexpected error occurred.';\n }\n // Log errors (for debugging or telemetry)\n log(error: unknown): void {\n console.error('[Library Error]', error);\n }\n // Show user-friendly message via Material snackbar\n show(error: unknown): void {\n const message = this.format(error);\n // Prevent duplicates\n if (this._messages.includes(message)) return;\n this._messages.push(message);\n const ref = this._snackBar.openFromComponent(LibNotificationComponent, {\n data: { messages: this._messages },\n duration: 5000,\n horizontalPosition: 'right',\n verticalPosition: 'top',\n politeness: 'off',\n panelClass: ['lib-notification-container'],\n });\n // Remove from active stack when it closes\n ref.afterDismissed().subscribe(() => {\n this._messages = this._messages.filter(m => m !== message);\n });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport BaseLayer from 'ol/layer/Base';\nimport TileLayer from 'ol/layer/Tile';\nimport ImageLayer from 'ol/layer/Image';\nimport VectorLayer from 'ol/layer/Vector';\nimport TileSource from 'ol/source/Tile';\nimport ImageSource from 'ol/source/Image';\nimport VectorSource from 'ol/source/Vector';\nimport { unByKey } from 'ol/Observable';\nimport { EventsKey } from 'ol/events';\nimport { Subject } from 'rxjs';\nimport { LibErrorService } from './libError.service';\n\nexport interface LayerStatus {\n layerId: number;\n hasError: boolean;\n lastError?: any;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LayerErrorService {\n public layerStatusChanged: Subject<number> = new Subject<number>();\n private layerStatuses = new Map<number, LayerStatus>();\n private listeners = new Map<number, EventsKey[]>();\n private _errorService: LibErrorService = inject(LibErrorService);\n\n registerLayer(layerId: number, layer: BaseLayer): void {\n // BaseLayer does not guarantee getSource(), so we must narrow type first\n let source: any;\n\n if (layer instanceof TileLayer || layer instanceof ImageLayer || layer instanceof VectorLayer) {\n source = layer.getSource();\n }\n\n if (!source) {\n console.warn(`[Layer ${layerId}] has no source; skipping error tracking.`);\n return;\n }\n\n const markError = (event: any) => {\n this.layerStatuses.set(layerId, { layerId, hasError: true, lastError: event });\n console.error(`[Layer ${layerId}] load error:`, event);\n this._errorService.show(new Error(`Indlæsningsfejl for lag med id ${layerId}.`));\n this.layerStatusChanged.next(layerId);\n };\n\n const clearError = () => {\n this.layerStatuses.set(layerId, { layerId, hasError: false });\n this.layerStatusChanged.next(layerId);\n };\n\n let keys: EventsKey[] = [];\n\n if (source instanceof TileSource) {\n keys.push(source.on('tileloaderror', markError));\n keys.push(source.on('tileloadend', clearError));\n } else if (source instanceof ImageSource) {\n keys.push(source.on('imageloaderror', markError));\n keys.push(source.on('imageloadend', clearError));\n } else if (source instanceof VectorSource) {\n keys.push(source.on('featuresloaderror', markError));\n keys.push(source.on('featuresloadend', clearError));\n } else {\n console.warn(`[Layer ${layerId}] Unknown source type; cannot attach error tracking.`);\n }\n\n if (keys.length) {\n this.listeners.set(layerId, keys);\n }\n this.layerStatusChanged.next(layerId);\n }\n\n unregisterLayer(layerId: number): void {\n const keys = this.listeners.get(layerId);\n if (keys) {\n keys.forEach(k => unByKey(k));\n this.listeners.delete(layerId);\n }\n this.layerStatuses.delete(layerId);\n this.layerStatusChanged.next(layerId);\n }\n\n getLayerStatus(layerId: number): LayerStatus | undefined {\n return this.layerStatuses.get(layerId);\n }\n\n getAllStatuses(): LayerStatus[] {\n return Array.from(this.layerStatuses.values());\n }\n}\n","import { Component, ElementRef, inject, Input, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';\nimport { CdkDragDrop, DragDropModule, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { LayerSelectorGroup, Profile } from '../../models/profile';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormsModule } from '@angular/forms';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatInputModule } from '@angular/material/input';\nimport Map from 'ol/Map';\nimport { LayerHelperService } from '../../services/layerHelper.service';\nimport ol_control_Control from 'ol/control/Control';\nimport { ILayer } from '../../models/ILayer';\nimport { LayerErrorService } from '../../services/layerError.service';\n\nexport interface CachedProfileInfo {\n profile: Profile;\n cachedLayerGroups: LayerSelectorGroup[];\n}\n\n@Component({\n selector: 'lib-layer-selector',\n templateUrl: './layer-selector.component.html',\n styleUrls: ['./layer-selector.component.scss'],\n imports: [ MatFormFieldModule, CommonModule, MatIconModule, FormsModule, DragDropModule, \n MatExpansionModule, MatInputModule ]\n})\nexport class LayerSelectorComponent implements OnInit, OnChanges {\n @ViewChild('layerSelectorIcon', { static: false }) set contentIcon(content: ElementRef) {\n this._layerSelectorIcon = content;\n }\n @ViewChild('layerSelectorBody', { static: false }) set contentBody(content: ElementRef) {\n this._layerSelectorBody = content;\n }\n @Input() map!: Map;\n @Input() profile!: Profile;\n @Input() currentZoomLevel!: number;\n searchText = '';\n allLayerGroups: LayerSelectorGroup[] = [];\n filteredLayerGroups: LayerSelectorGroup[] = [];\n showSelector: boolean = false;\n private _namesToGoLast: string[] = ['Baggrundskort'];\n private _layerSelectorIcon!: ElementRef;\n private _layerSelectorIconControl!: ol_control_Control;\n private _layerSelectorBody!: ElementRef;\n private _layerSelectorBodyControl!: ol_control_Control;\n private readonly _mapFilteredLayerGroupsKeyName: string = 'mapFilteredLayerGroups';\n private readonly _layerIdsToDisplayInMapKeyName: string = 'layerIdsToDisplayInMap';\n private readonly _layerHelper: LayerHelperService = inject(LayerHelperService);\n private readonly _layerErrorService: LayerErrorService = inject(LayerErrorService);\n\n ngOnInit(): void {\n this._layerErrorService.layerStatusChanged\n .subscribe(layerId => {\n const layerHasErrors: boolean | undefined = this._layerErrorService.getLayerStatus(layerId)?.hasError;\n if (layerHasErrors != undefined) this.setLayerErrorStatus(layerId, layerHasErrors);\n })\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['profile'] && this.profile) {\n this.allLayerGroups = this.profile.layerGroups\n .map((lg, idx) => ({... lg, \n noOfVisibleLayers: lg.layers.filter(l => l.visible).length, \n visible: lg.layers.some(l => l.visible),\n expanded: lg.layers.some(l => l.visible),\n layers: lg.layers.filter((l: { activeInSelector: boolean; }) => l.activeInSelector), \n sortOrder: idx}))\n .filter(g => g.layers.length > 0); \n \n const cacheValue = localStorage.getItem(`${this._mapFilteredLayerGroupsKeyName}_${this.profile.id}`);\n if (cacheValue) {\n const cachedProfileInfo: CachedProfileInfo = JSON.parse(cacheValue);\n if (cachedProfileInfo.profile.versionId < this.profile.versionId) {\n //Profile version changed in backend, use that\n this.filteredLayerGroups = this.setfilteredGroups(); \n this._cacheProfileInfo();\n } else {\n this.filteredLayerGroups = cachedProfileInfo.cachedLayerGroups;\n this._setVisibleLayersFromCache(cachedProfileInfo.cachedLayerGroups);\n }\n } else {\n this.filteredLayerGroups = this.setfilteredGroups(); \n this._cacheProfileInfo();\n }\n this._initializeMapIconControl();\n }\n }\n\n toggleLayer(layer: ILayer): void {\n this._layerHelper.toggleLayerInMap(this.map, layer);\n // Toggle layer in all groups in the selector UI\n this.filteredLayerGroups.forEach(group => {\n group.layers.forEach(l => {\n if (layer.id === l.id) {\n l.visible = !l.visible;\n }});\n group.noOfVisibleLayers = group.layers.filter(l => l.visible).length;\n group.visible = group.layers.some(l => l.visible);\n group.expanded = group.layers.some(l => l.visible);\n });\n this._cacheProfileInfo();\n }\n\n setLayerErrorStatus(layerId: number, errorStatus: boolean): void {\n this.filteredLayerGroups.forEach(group => {\n group.layers.forEach(l => {\n if (layerId === l.id) {\n l.hasErrors = errorStatus;\n }});\n });\n }\n\n toggleGroup(event: MouseEvent, layerGroup: LayerSelectorGroup): void {\n event.stopPropagation(); // Prevent the panel from expanding/collapsing\n const visible: boolean = !layerGroup.visible;\n layerGroup.layers.forEach(layer => {\n if (layer.visible != visible) {\n //Toggle layer in map\n this._layerHelper.toggleLayerInMap(this.map, layer);\n // Toggle layer in all groups in the selector UI\n this.filteredLayerGroups.forEach(group => {\n group.layers.forEach(l => {\n if (layer.id === l.id) {\n l.visible = !l.visible;\n }});\n group.noOfVisibleLayers = group.layers.filter(l => l.visible).length;\n group.visible = group.layers.some(l => l.visible);\n group.expanded = group.layers.some(l => l.visible);\n });\n }\n })\n layerGroup.visible = visible;\n layerGroup.expanded = layerGroup.layers.some(l => l.visible);\n this._cacheProfileInfo();\n }\n\n toggleLayerSelector(): void {\n this.showSelector = !this.showSelector;\n if (this.showSelector) {\n this._addMapBodyControl();\n } else {\n this._removeMapBodyControl();\n }\n }\n\n updateOpacity(layer: ILayer): void {\n this._layerHelper.updateLayerOpacityInMap(this.map, layer);\n }\n\n stopDrag(event: Event): void {\n event.stopPropagation(); // prevents drag container from activating\n }\n\n setfilteredGroups(): LayerSelectorGroup[] {\n const text = this.searchText.toLowerCase();\n return this.allLayerGroups\n .map((g, idx) => {\n if (!text) {\n return { ...g, expanded: false, sortOrder: idx,\n layers: g.layers.map(layer => ({...layer, opacity: 1}))\n }; // collapsed by default\n }\n const filteredItems = g.layers.filter(l => l.name.toLowerCase().includes(text));\n return {\n ...g,\n expanded: filteredItems.length > 0,\n sortOrder: idx,\n layers: filteredItems.map(layer => ({...layer, opacity: 1}))\n };\n })\n .filter(g => g.layers.length > 0)\n .sort((a, b) => {\n const aIsLast = this._namesToGoLast.includes(a.name) || a.layers.some(layer => layer.background);\n const bIsLast = this._namesToGoLast.includes(b.name) || b.layers.some(layer => layer.background);\n if (aIsLast && !bIsLast) return 1;\n if (!aIsLast && bIsLast) return -1;\n return a.sortOrder - b.sortOrder\n });\n }\n\n dropGroup(event: CdkDragDrop<LayerSelectorGroup[]>) {\n moveItemInArray(this.filteredLayerGroups, event.previousIndex, event.currentIndex);\n this.updateGroupSortOrders();\n this._cacheProfileInfo();\n }\n\n dropLayer(event: CdkDragDrop<ILayer[]>, group: LayerSelectorGroup) {\n if (event.previousContainer === event.container) {\n moveItemInArray(group.layers, event.previousIndex, event.currentIndex);\n } else {\n transferArrayItem(\n event.previousContainer.data,\n event.container.data,\n event.previousIndex,\n event.currentIndex\n );\n }\n this.updateLayerSortOrders(group);\n this._cacheProfileInfo();\n }\n\n clearSearchText(): void {\n this.searchText = '';\n this.filteredLayerGroups = this.setfilteredGroups();\n this._cacheProfileInfo();\n }\n\n updateGroupSortOrders() {\n this.filteredLayerGroups.forEach((g, idx) => (g.sortOrder = idx));\n }\n\n updateLayerSortOrders(group: LayerSelectorGroup) {\n group.layers.forEach((layer, idx) => (layer.sortOrder = idx));\n }\n\n private _cacheProfileInfo(): void {\n const cacheItem: CachedProfileInfo = { profile: this.profile, cachedLayerGroups: this.filteredLayerGroups };\n localStorage.setItem(`${this._mapFilteredLayerGroupsKeyName}_${this.profile.id}`, JSON.stringify(cacheItem));\n localStorage.setItem(`${this._layerIdsToDisplayInMapKeyName}_${this.profile.id}`, this.filteredLayerGroups\n .flatMap(lg => lg.layers)\n .filter(lg => lg.visible)\n .map(lg => lg.id).join(','));\n // Reflect new order in map\n this._layerHelper.applyCachedLayersToDisplayInMap(this.map, this.profile.id);\n }\n\n private _initializeMapIconControl(): void {\n this.map.removeControl(this._layerSelectorIconControl);\n const element = this._layerSelectorIcon.nativeElement;\n this._layerSelectorIconControl = new ol_control_Control({ element: element });\n this.map.addControl(this._layerSelectorIconControl);\n }\n\n private _addMapBodyControl(): void {\n this.map.removeControl(this._layerSelectorBodyControl);\n const element = this._layerSelectorBody.nativeElement;\n this._layerSelectorBodyControl = new ol_control_Control({ element: element });\n this.map.addControl(this._layerSelectorBodyControl);\n }\n\n private _removeMapBodyControl(): void {\n this.map.removeControl(this._layerSelectorBodyControl);\n }\n\n private _setVisibleLayersFromCache(cachedFilteredLayergroups: LayerSelectorGroup[]): void {\n this.allLayerGroups.forEach(group => group.layers.forEach(layer => {\n const cachedLayer = cachedFilteredLayergroups.find(gr => gr.id === group.id)?.layers?.find(l => l.id === layer.id);\n layer.visible = cachedLayer?.visible ?? layer.visible;\n }))\n }\n\n}\n","<div #layerSelectorIcon class=\"ol-unselectable ol-control layer-selector-icon\">\n <mat-icon (click)=\"toggleLayerSelector()\">layers</mat-icon>\n</div>\n<div #layerSelectorBody [class.display-none]=\"!showSelector\" class=\"layer-selector-body-wrapper\" cdkDrag cdkDragBoundary=\".map-container\">\n <div class=\"drag-handle-selector\" cdkDragHandle>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"ol-unselectable ol-control layer-selector-body\">\n <div class=\"search-section\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Filtrer</mat-label>\n <input \n matInput \n type=\"text\" \n [(ngModel)]=\"searchText\" \n (ngModelChange)=\"filteredLayerGroups=setfilteredGroups()\"\n placeholder=\"Skriv for at filtrere...\"\n />\n </mat-form-field>\n <mat-icon (click)=\"clearSearchText()\">undo</mat-icon>\n </div>\n \n <div\n cdkDropList\n [cdkDropListData]=\"filteredLayerGroups\"\n (cdkDropListDropped)=\"dropGroup($event)\"\n class=\"item-list\">\n @for (group of filteredLayerGroups; track group.id; let gIndex = $index) {\n <div class=\"group\" cdkDrag cdkDragPreviewDisabled>\n <mat-expansion-panel [(expanded)]=\"group.expanded\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n @if (group.expanded) {\n <mat-icon>arrow_upward</mat-icon>\n }\n @if (!group.expanded) {\n <mat-icon>arrow_downward</mat-icon> \n }\n {{ group.name }} \n <mat-icon class=\"lightbulb\">lightbulb</mat-icon>\n ({{ group.noOfVisibleLayers }}/{{ group.layers.length }})\n @if (group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-on\">power</mat-icon>(tænd)\n }\n @if (!group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-off\">power_off</mat-icon>(sluk)\n }\n </mat-panel-title>\n </mat-expansion-panel-header>\n <!-- This is only shown during drag -->\n <!-- <div *cdkDragPreview class=\"drag-preview\">\n {{ group.name }}\n </div> -->\n\n <!-- Placeholder to avoid jump -->\n <!-- <div *cdkDragPlaceholder class=\"drag-placeholder\"></div> -->\n\n <div\n cdkDropList\n [cdkDropListData]=\"group.layers\"\n (cdkDropListDropped)=\"dropLayer($event, group)\"\n class=\"item-list\">\n @for (layer of group.layers; track layer.id; let iIndex = $index) {\n <div class=\"item\" cdkDrag cdkDragPreviewDisabled>\n <mat-icon class=\"drag-indicator\">drag_indicator</mat-icon>\n <span>{{ layer.name }}</span>\n @if (layer.maxZoom < currentZoomLevel || layer.minZoom > currentZoomLevel) {\n <mat-icon class=\"zoom-off\">browser_not_supported</mat-icon>(zoom)\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"zoom-off\">wifi_off</mat-icon>(fejle)\n }\n @if (layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer)\" class=\"power-on\">power</mat-icon>(tænd)\n }\n @if (!layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer)\" class=\"power-off\">power_off</mat-icon>(sluk)\n }\n <input \n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n [(ngModel)]=\"layer.opacity\"\n (input)=\"updateOpacity(layer)\"\n (mousedown)=\"stopDrag($event)\"\n (touchstart)=\"stopDrag($event)\"\n (pointerdown)=\"stopDrag($event)\"\n >\n </div>\n }\n </div>\n </mat-expansion-panel>\n </div>\n }\n </div>\n </div>\n</div>","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { GisKomponentSettings } from '../models/GisKomponentSettings';\nimport { GeoServer } from '../models/geoserver';\nimport { combineLatest, map, Observable, of, reduce, tap } from 'rxjs';\nimport WKT from 'ol/format/WKT'\n// @ts-ignore\nimport * as SLDReader from '@nieuwlandgeo/sldreader';\n\nimport Map from 'ol/Map';\nimport ol_layer_Vector from 'ol/layer/Vector';\nimport VectorSource from 'ol/source/Vector';\nimport { extend } from 'ol/extent';\nimport { Style } from 'ol/style';\n\n// interface namedStyle {\n// styleName: string;\n// sldFeatureStyle: any;\n// }\n\n@Injectable({\n providedIn: 'root'\n})\nexport class KomponentSettingsHelperService {\n\n private readonly _httpClient = inject(HttpClient);\n\n private styles: Record<string, any> = { }; \n\n // loadNamedStyleObjects(styleNames: string[], workspace: string, geoserver: GeoServer): Observable<namedStyle[]> {\n\n // const headerstring = `${geoserver.userName}:${geoserver.password}`;\n // const encoded = btoa(headerstring); \n // const headers = new HttpHeaders().set('Authorization', `Basic ${encoded}`);\n \n\n // const result$ = styleNames.map(styleName => \n // this._httpClient.get(`${geoserver.url}/rest/workspaces/${workspace}/styles/${styleName}.sld`, { headers, responseType: 'text' })\n // .pipe(map(loadedStyle => { \n // const sldObject = SLDReader.Reader(loadedStyle);\n // const sldLayer = SLDReader.getLayer(sldObject);\n // const sldStyles = SLDReader.getStyle(sldLayer);\n // const sldFeatureStyle = sldStyles.featuretypestyles[0];\n // return { styleName, sldFeatureStyle } as namedStyle\n // })));\n // return combineLatest(result$);\n // }\n\n private _getSldStyleObject$(styleName: string, workspace: string, geoserver: GeoServer): Observable<any> {\n return this.styles[styleName] ? of(this.styles[styleName]) :\n this._loadStyleFromGeoServer$(styleName, workspace, geoserver)\n .pipe(\n tap(loadedStyle => { \n this.styles[styleName] = loadedStyle; } \n ));\n }\n\n private _loadStyleFromGeoServer$(styleName: string, workspace: string, geoserver: GeoServer): Observable<any> {\n const headerstring = `${geoserver.userName}:${geoserver.password}`;\n const encoded = btoa(headerstring); \n const headers = new HttpHeaders().set('Authorization', `Basic ${encoded}`);\n const url = `${geoserver.url}/rest/workspaces/${workspace}/styles/${styleName}.sld`;\n return this._httpClient.get(url, { headers, responseType: 'text' }).pipe(map(loadedStyle => {\n const sldObject = SLDReader.Reader(loadedStyle);\n const sldLayer = SLDReader.getLayer(sldObject);\n const sldStyles = SLDReader.getStyle(sldLayer);\n const sldFeatureStyle = sldStyles.featuretypestyles[0];\n return sldFeatureStyle; \n }));\n\n }\n\n getStyle(styleName: string, workspace: string, geoserver: GeoServer, styleType: string): Observable<Style> {\n\n return this._getSldStyleObject$(styleName, workspace, geoserver)\n .pipe(map(loadedStyle => {\n return SLDReader.createOlStyle(loadedStyle.rules[0], styleType) as Style\n }\n ));\n }\n}","import { Injectable } from '@angular/core';\nimport Feature from 'ol/Feature';\nimport VectorSource from 'ol/source/Vector';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DrawLayerSourceService {\n\n private _features = new Subject<Feature[]>;\n features$ = this._features.asObservable();\n source: VectorSource;\n private _disabled = false;\n constructor() {\n this.source = new VectorSource();\n this._initListener();\n }\n\n private _initListener(): void {\n this.source.on(['addfeature', 'changefeature', 'removefeature'], evt => {\n if (this._disabled) { return; }\n const features = this.source.getFeatures();\n this._features.next(features);\n });\n \n }\n\n get allFeatures(): Feature[] {\n return this.source.getFeatures().map(f => { \n // I want a static copy of the features. \n const newFeature = f.clone(); \n // But cloning doesn't include the id and that is used for referencing a few places.\n newFeature.setId(f.getId());\n return newFeature;\n }); \n }\n\n remove(id: string | number): void {\n const feature = this.source.getFeatureById(id);\n if (feature) {\n this.source.removeFeature(feature);\n }\n }\n\n setFeatures(features: Feature[]) {\n this._disabled = true;\n this.source.clear();\n this.source.addFeatures(features.map(f => {\n const newFeature = f.clone();\n newFeature.setId(f.getId())\n return newFeature;\n }));\n this._features.next(features);\n this._disabled = false;\n }\n}","import { Injectable } from '@angular/core';\nimport Feature from 'ol/Feature';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FeatureHelperService {\n private readonly FEATURE_TYPE_ID = 'TypeId';\n private readonly FEATURE_LOCKED = 'LOCKED';\n\n private _idCounter = 0;\n\n isLocked = (feature: Feature) => feature.get(this.FEATURE_LOCKED) === 'true';\n lock(feature: Feature): void { feature.set(this.FEATURE_LOCKED, 'true'); }\n\n setTypeId(feature: Feature, typeId: string): void {\n feature.set(this.FEATURE_TYPE_ID, typeId); \n }\n\n typeId = (feature: Feature) => feature.get(this.FEATURE_TYPE_ID) as string;\n\n setId(feature: Feature): void {\n if (!feature.getId()) {\n feature.setId(this._idCounter++);\n }\n }\n}","import { Injectable } from '@angular/core';\nimport Feature from 'ol/Feature';\nimport { DrawLayerSourceService } from './drawLayerSource.service';\nimport { filter } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UndoRedoService {\n \n constructor(private _drawlayerSourceService: DrawLayerSourceService) {}\n\n\n disable(): void {\n this._enabled = false;\n }\n\n enable(): void {\n this._enabled = true;\n }\n\n private _steps: Feature[][] = [];\n private _currentStep = 0;\n private _changing = false;\n private _enabled = true;\n\n init(): void {\n this._steps[0] = this._drawlayerSourceService.allFeatures;\n // For every change, add the current state\n this._drawlayerSourceService.features$.pipe(filter(() => this._enabled)).subscribe({\n next: () => {\n if (this._changing) {\n this._changing = false;\n return;\n }\n this._steps = [...this._steps.slice(0, this._currentStep + 1), this._drawlayerSourceService.allFeatures]\n this._currentStep++;\n }\n });\n }\n\n get canUndo(): boolean { \n return this._currentStep > 0;\n }\n\n get canRedo(): boolean {\n return this._currentStep < this._steps.length - 1;\n }\n\n undo(): void {\n if (this.canUndo) {\n this._changing = true;\n this._currentStep--;\n const features = this._steps[this._currentStep];\n this._drawlayerSourceService.setFeatures(features);\n }\n }\n\n redo(): void {\n if (this.canRedo) {\n this._changing = true;\n this._currentStep++;\n const features = this._steps[this._currentStep];\n this._drawlayerSourceService.setFeatures(features);\n }\n }\n\n reset(): void {\n this._changing = true;\n if (this._currentStep === 0) { return; }\n const features = this._steps[0];\n this._drawlayerSourceService.setFeatures(features);\n }\n}","import { inject, Injectable } from '@angular/core';\nimport { Feature } from 'ol';\n\nimport { Vector as VectorSource } from 'ol/source';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport { LineString, Polygon as olPolygon, MultiPolygon as olMultiPolygon } from 'ol/geom';\nimport { buffer, difference, featureCollection } from '@turf/turf';\nimport { Polygon, Feature as TurfFeature, LineString as TurfLineString } from 'geojson';\nimport proj4 from 'proj4';\nimport { FeatureHelperService } from './featureHelper.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GeometrySplitService {\n private geoJsonFormat = new GeoJSON<Feature<olPolygon>>();\n\n private _featureHelper = inject(FeatureHelperService);\n\n /**\n * Split polygons in a vector source using a buffered LineString.\n * @param lineFeature The drawn LineString feature.\n * @param vectorSource The source containing polygons to split.\n * @param bufferMeters Width of the buffer in meters (default: 1).\n */\n splitPolygonsWithBufferedLine(lineFeature: Feature<LineString>, vectorSource: VectorSource, bufferMeters: number = 1): void {\n\n const lineGeoJSON = this.geoJsonFormat.writeFeatureObject(lineFeature) as TurfFeature<TurfLineString>;\n // the buffer functions uses 4326 and makes a mess if you don't convert the projection\n lineGeoJSON.geometry.coordinates = lineGeoJSON.geometry.coordinates.map(c => proj4('EPSG:25832', 'EPSG:4326', c));\n\n // Buffer the line to create a narrow polygon\n const bufferedLine = buffer(lineGeoJSON, bufferMeters, { units: 'meters'}) as TurfFeature<Polygon>;\n // Move back to 25832 \n bufferedLine.geometry.coordinates = bufferedLine.geometry.coordinates.map(a => a.map(c => proj4('EPSG:4326','EPSG:25832', c)));\n const overlappingFeatures = vectorSource.getFeatures().filter(f =>\n f.getGeometry()?.intersectsExtent(lineFeature.getGeometry()?.getExtent()!)\n );\n\n overlappingFeatures.forEach((feature) => {\n const overlappingFeatureGeoJson = this.geoJsonFormat.writeFeatureObject(feature);\n\n const features = featureCollection([overlappingFeatureGeoJson, bufferedLine!]);\n const clipped = difference(features as any);\n\n // If the result is not a MultiPolygon, the polygon was not clipped in two. In that case, I will do nothing.\n if (clipped && clipped.geometry.type === 'MultiPolygon') {\n vectorSource.removeFeature(feature);\n \n const multipolygon = this.geoJsonFormat.readGeometry(clipped.geometry) as olMultiPolygon; \n const polygons = multipolygon.getPolygons();\n\n const newFeatures = polygons.map(p => {\n const newFeature = feature.clone();\n newFeature.setGeometry(p);\n this._featureHelper.setId(newFeature);\n return newFeature;\n });\n vectorSource.addFeatures(newFeatures);\n }\n });\n }\n\n // dimsedims(vectorSource: VectorSource, feature: Feature,): void {\n\n // const overlappingFeatures = vectorSource.getFeatures().filter(f => f.getGeometry()?.intersectsExtent(feature.getGeometry()!.getExtent()));\n // // const geoJsonFormat = new GeoJSON<Feature<Polygon>>();\n // let holeGeoJson = this.geoJsonFormat.writeFeatureObject(feature);\n // overlappingFeatures.forEach(f => {\n // const overlappingFeatureGeoJson = this.geoJsonFormat.writeFeatureObject(f);\n // // because the difference function takes featurecollection, I add the two features to a collection\n // // I have to cast this as any, because the featurecollection needs to be of Polygon or MultiPoly and it\n // // doesnt resolve to that.\n // if (holeGeoJson.geometry.type === 'LineString') { \n // holeGeoJson.geometry.coordinates = holeGeoJson.geometry.coordinates.map(c => proj4('EPSG:25832', 'EPSG:4326', c));\n // holeGeoJson = buffer(holeGeoJson, 0.001 , { units: 'metres' })!;\n // if (holeGeoJson.geometry.type === 'Polygon') {\n // holeGeoJson.geometry.coordinates = holeGeoJson.geometry.coordinates.map(a => a.map(c => proj4('EPSG:4326','EPSG:25832', c)));\n // }\n \n\n // }\n // console.log(\"🚀 ~ GeometrySplitTurfService ~ dimsedims ~ holeGeoJson:\", holeGeoJson)\n // const features = featureCollection([overlappingFeatureGeoJson, holeGeoJson]) as any;\n // const clipped = difference(features);\n // if (clipped) {\n // const geom = this.geoJsonFormat.readGeometry(clipped.geometry);\n // f.setGeometry(geom);\n // }\n // });\n // }\n}","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { LineString, Point, Polygon } from 'ol/geom';\nimport { getLength, getArea } from 'ol/sphere'\nimport Draw, { DrawEvent } from 'ol/interaction/Draw'\nimport VectorLayer from 'ol/layer/Vector';\nimport { Interaction, Modify, Select } from 'ol/interaction'\nimport Map from 'ol/Map';\nimport VectorSource from 'ol/source/Vector';\nimport { Fill, Stroke, Style, Text } from 'ol/style';\nimport { geometryType, GeometryTypeSetting, GisKomponentSettings } from '../../models/GisKomponentSettings';\nimport { MatSelectChange, MatSelectModule } from '@angular/material/select';\nimport { MatOptionModule } from '@angular/material/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { KomponentSettingsHelperService } from '../../services/komponentSettingsHelper.service';\nimport WKT from 'ol/format/WKT';\nimport { IProfileDetailed } from '../../models/IProfile';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { buffer } from 'ol/extent';\nimport Feature from 'ol/Feature';\nimport { DrawLayerSourceService } from '../../services/drawLayerSource.service';\nimport { FeatureHelperService } from '../../services/featureHelper.service';\nimport { UndoRedoService } from '../../services/UndoRedo.service';\nimport { always, never } from 'ol/events/condition';\nimport { difference, featureCollection, lineSplit } from '@turf/turf';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { GeometrySplitService } from '../../services/geometri-split.service';\n\n@Component({\n selector: 'map-toolbox',\n styleUrl: './toolbox.component.scss',\n templateUrl: './toolbox.component.html',\n imports: [FormsModule, CommonModule, MatIconModule, MatOptionModule, MatSelectModule, DragDropModule, MatTooltipModule] \n})\nexport class ToolboxComponent implements OnInit {\n\n // Inputs\n @Input({ required: true }) map!: Map;\n @Input() showMeasureDistance = true;\n @Input() showMeasureArea = true;\n @Input() collapsed = false;\n @Input({ required: true}) settings!: GisKomponentSettings;\n @Input({ required: true }) profile!: IProfileDetailed;\n @Input() WKTInputEnabled?: boolean = false;\n @Input() deleteEnabled?: boolean = false;\n // Injects\n private _snackbar = inject(MatSnackBar);\n private _settingsHelper = inject(KomponentSettingsHelperService);\n private _drawLayerService = inject(DrawLayerSourceService);\n private _featureHelper = inject(FeatureHelperService);\n private _undoRedo = inject(UndoRedoService);\n private _geomSplitService = inject(GeometrySplitService);\n selectedGeometrySetting: GeometryTypeSetting | undefined = undefined;\n\n showInputWKT: boolean = false;\n WKTString?: string;\n activateShowInputWKT(): void {\n this._clearAllInteractions(); \n this.showInputWKT = true;\n }\n\n cancelWKT(): void {\n this._clearAllInteractions();\n this.showInputWKT = false;\n }\n\n settingsChanged(evt: MatSelectChange): void {\n this._clearAllInteractions();\n }\n\n private _activeFeaturesSource = new VectorSource();\n private _activeArea: VectorLayer | undefined;\n\n undo(): void {\n this._undoRedo.undo();\n }\n\n redo(): void {\n this._undoRedo.redo();\n } \n\n ReadWKT(): void {\n this._clearAllInteractions();\n this._setupActiveLayer();\n if (!this.WKTString) { return; }\n const wktFormat = new WKT();\n try {\n\n const feature = wktFormat.readFeature(this.WKTString, { featureProjection: 'EPSG:25832', dataProjection: 'EPSG:25832' });\n const featureType = feature.getGeometry()?.getType();\n if (!this.selectedGeometrySetting?.availableGeometryTypes?.some(g => g === featureType)) {\n this._snackbar.open(`Den WKT du indlæser er af typen ${featureType} og det er ikke tilladt for denne indstilling`, '', { duration: 4000 });\n return;\n }\n this._settingsHelper.getStyle(this.selectedGeometrySetting!.style, this.profile.styleRepositoryWorkspace!, this.profile.styleRepositoryGeoserver!, featureType!).subscribe({\n next: featureStyle => {\n feature.setStyle(featureStyle);\n this._featureHelper.setTypeId(feature, this.selectedGeometrySetting?.typeId || '')\n this._activeFeaturesSource.addFeature(feature);\n const extent = buffer(feature.getGeometry()!.getExtent(), 10);\n this.map.getView().fit(extent);\n }\n })\n } catch (ex) {\n this._snackbar.open(`WKT kunne ikke indlæses - den er muligvis ikke formatteret korrekt`, '', { duration: 4000 });\n }\n }\n\n private _drawLayer: VectorLayer | undefined;\n private _drawPolygon = new Draw({\n type: 'Polygon',\n source: this._drawLayerService.source\n });\n \n private _actionSource = new VectorSource();\n clipHole(): void {\n this._clearAllInteractions();\n const clipHoleDraw = new Draw({\n source: this._actionSource,\n type: 'Polygon' \n });\n this._setAsTemp(clipHoleDraw);\n clipHoleDraw.on('drawend', evt => {\n \n const overlappingFeatures = this._drawLayerService.source.getFeatures().filter(f => f.getGeometry()?.intersectsExtent(evt.feature.getGeometry()!.getExtent()));\n const geoJsonFormat = new GeoJSON<Feature<Polygon>>();\n const holeGeoJson = geoJsonFormat.writeFeatureObject(evt.feature);\n overlappingFeatures.forEach(f => {\n const overlappingFeatureGeoJson = geoJsonFormat.writeFeatureObject(f);\n // because the difference function takes featurecollection, I add the two features to a collection\n // I have to cast this as any, because the featurecollection needs to be of Polygon or MultiPoly and it\n // doesnt resolve to that.\n const features = featureCollection([overlappingFeatureGeoJson, holeGeoJson]) as any;\n const clipped = difference(features);\n if (clipped) {\n const geom = geoJsonFormat.readGeometry(clipped.geometry);\n f.setGeometry(geom);\n }\n });\n });\n\n this.map.addInteraction(clipHoleDraw);\n }\n\n split(): void {\n this._clearAllInteractions();\n const splitInteraction = new Draw({\n type: 'LineString',\n source: this._actionSource\n });\n this._setAsTemp(splitInteraction);\n splitInteraction.on('drawend', evt => {\n this._geomSplitService.splitPolygonsWithBufferedLine(evt.feature as Feature<LineString>, this._drawLayerService.source, 0.01);\n });\n this.map.addInteraction(splitInteraction);\n }\n\n startDrawPoint(): void {\n this._startDraw('Point');\n }\n\n startDrawLineString() {\n this._startDraw('LineString');\n }\n\n startDrawPolygon(): void {\n this._startDraw('Polygon');\n }\n\n private _deleteSelect: Select | undefined;\n private get deleteSelect(): Select {\n if (this._deleteSelect) return this._deleteSelect; \n this._deleteSelect = new Select({ \n layers: [this._drawLayer! ],\n style: null, // ABSOLUTELY leave this as null! If not, select fires a change, because it applies a change of styling. LEAVE IT!\n filter: feature => !this._featureHelper.isLocked(feature)\n });\n this._setAsTemp(this.deleteSelect);\n this.deleteSelect.on('select', evt => {\n this._drawLayerService.source.removeFeatures(evt.selected)\n })\n return this._deleteSelect;\n }\n \n private _setAsTemp(interaction: Interaction): void {\n interaction.set('temp', 'true');\n }\n\n private _deleting: boolean = false;\n startDelete(): void {\n this._clearAllInteractions();\n this._deleting = true; \n this.map.addInteraction(this.deleteSelect);\n }\n\n startEditRemovePoints(): void {\n this._clearAllInteractions();\n const modifyRemove = new Modify({\n source: this._drawLayerService.source,\n // Make sure delete is allowed and other interactions are not.\n deleteCondition: always,\n insertVertexCondition: never\n });\n\n this._setAsTemp(modifyRemove); \n this.map.addInteraction(modifyRemove);\n }\n\n startEdit(): void {\n this._clearAllInteractions();\n const modify = new Modify({ \n source: this._drawLayerService.source,\n // No delete\n deleteCondition: () => false,\n // Allow moving existing and add new points\n condition: always, \n insertVertexCondition: always, \n });\n /* Modify fires changes to features a LOT, so to not flood the UndoRedo service, I disable until ending the modify\n and then force an update, to add the updated feature to the undo-service. */\n modify.on('modifystart', () => this._undoRedo.disable());\n modify.on('modifyend', (evt) => { this._undoRedo.enable(); evt.features.forEach(f => f.set('updated', new Date().toISOString() )) });\n \n this._setAsTemp(modify); \n this.map.addInteraction(modify);\n }\n \n private _startDraw(geomType: geometryType): void {\n this._clearAllInteractions();\n if (!this.selectedGeometrySetting) { return; }\n this._settingsHelper.getStyle(this.selectedGeometrySetting.style, this.profile.styleRepositoryWorkspace!, this.profile.styleRepositoryGeoserver!, geomType)\n .subscribe({\n next: style => { \n const drawLineString = new Draw({\n type: geomType, \n source: this._drawLayerService.source,\n style: style \n });\n drawLineString.on('drawend', evt => {\n this._featureHelper.setTypeId(evt.feature, this.selectedGeometrySetting?.typeId || '');\n this._featureHelper.setId(evt.feature);\n evt.feature.setStyle(style);\n });\n this._setAsTemp(drawLineString);\n this._setDrawLayer()\n this.map.addInteraction(drawLineString); \n this.map.getTargetElement().style.cursor = 'crosshair'; // Placeholder for now\n }\n })\n }\n\n\n private _clearDrawInteractions(): void {\n this.map.getTargetElement().style.cursor = '';\n this.map.getInteractions().forEach(i => {\n if (i.get('temp') === 'true') {\n this.map.removeInteraction(i);\n }\n });\n }\n\n compareGeometrySetting = (g1: GeometryTypeSetting, g2: GeometryTypeSetting) => g1 && g2 && g1.typeId === g2.typeId;\n\n private _areaSource = new VectorSource();\n private _areaLayer = new VectorLayer({\n source: this._areaSource,\n style: (feature) => {\n const geom = feature.getGeometry() as Polygon;\n const area = getArea(geom);\n const formattedArea = area > 1000000 ? `${(area / 1000000).toFixed(2)} km2` : `${area.toFixed(2)} m2`\n return new Style({\n stroke: new Stroke({\n color: 'blue',\n width: 2\n }),\n fill: new Fill({\n color: 'grey'\n }),\n text: new Text({\n text: formattedArea,\n font: '12px Calibri,sans-serif',\n fill: new Fill({ color: '#000' }),\n stroke: new Stroke({ color: '#fff', width: 3 }),\n placement: 'line'\n })\n });\n }\n })\n\n private _distanceLabelSource = new VectorSource();\n private _distanceLabelLayer = new VectorLayer({\n source: this._distanceLabelSource,\n style: (feature) => {\n return new Style({\n text: new Text({\n text: feature.get('label'),\n font: '12px Calibri,sans-serif',\n fill: new Fill({ color: '#000' }),\n stroke: new Stroke({ color: '#fff', width: 3 })\n })\n });\n }\n });\n\n\n private _distanceSource = new VectorSource();\n private _distanceLayer = new VectorLayer({\n source: this._distanceSource,\n style: (feature) => {\n const geom = feature.getGeometry() as LineString;\n const length = getLength(geom);\n const formattedLength = `${length.toFixed(2)} m`\n return new Style({\n stroke: new Stroke({\n color: 'blue',\n width: 2\n }),\n text: new Text({\n text: formattedLength,\n font: '12px Calibri,sans-serif',\n fill: new Fill({ color: '#000' }),\n stroke: new Stroke({ color: '#fff', width: 3 }),\n placement: 'line'\n })\n });\n }\n })\n\n private _distanceMeasureDraw = new Draw({\n type: 'LineString',\n source: this._distanceLayer.getSource()!,\n });\n\n\n\n private _areaMeasureDraw = new Draw({\n type: 'Polygon',\n source: this._areaSource\n })\n private _active: 'No' | 'Area' | 'Distance' = 'No';\n\n private _setupActiveLayer(): void {\n if (!this._activeArea) {\n this._activeArea = new VectorLayer({\n source: this._activeFeaturesSource\n });\n this.map.addLayer(this._activeArea);\n }\n }\n\n constructor() {\n\n // TODO: Move out from constructor\n // In order to add the distance to each segment of the distance measure feature, we need some extra handling like this.\n this._distanceMeasureDraw.on('drawstart', (evt: DrawEvent) => {\n\n const sketch = evt.feature as Feature;\n\n sketch.getGeometry()!.on('change', (geomEvt) => {\n const geom = geomEvt.target as LineString;\n const coords = geom.getCoordinates();\n\n this._distanceLabelSource.clear(); // Clear existing labels for each change\n\n let totalLength = 0;\n\n for (let i = 0; i < coords.length - 1; i++) {\n const c1 = coords[i];\n const c2 = coords[i + 1];\n const segment = new LineString([c1, c2]);\n const length = getLength(segment);\n totalLength += length;\n\n const mid = [(c1[0] + c2[0]) / 2, (c1[1] + c2[1]) / 2];\n const formatted = `${length.toFixed(2)} m`; \n\n const labelFeature = new Feature({\n geometry: new Point(mid),\n label: formatted\n });\n\n this._distanceLabelSource.addFeature(labelFeature);\n }\n\n // Add total length at the last point\n if (coords.length > 1) {\n const endPoint = coords[coords.length - 1];\n const formattedTotal = `${totalLength.toFixed(2)} m`;\n\n const totalFeature = new Feature({\n geometry: new Point(endPoint),\n label: `Total: ${formattedTotal}`\n });\n\n this._distanceLabelSource.addFeature(totalFeature);\n }\n });\n });\n }\n\n private _clearAllInteractions(): void {\n this.stopMeasureArea();\n this.stopMeasureLength();\n this._deleting = false;\n this._clearDrawInteractions();\n this._undoRedo.enable();\n }\n\n private _setDrawLayer(): void {\n if (!this._drawLayer) {\n this._drawLayer = new VectorLayer({\n source: this._drawLayerService.source, \n // source: this._drawLayerSource, \n });\n this._drawLayer.set('DRAWLAYER', 'true');\n this.map.addLayer(this._drawLayer);\n this._setupMouseStyleCursor();\n }\n }\n\n ngOnInit(): void {\n if (this.settings.geometryTypeSettings && this.settings.geometryTypeSettings.length === 1) {\n this.selectedGeometrySetting = this.settings.geometryTypeSettings![0];\n }\n this._drawPolygon.on('drawend', evt => {\n this._featureHelper.setTypeId(evt.feature, this.selectedGeometrySetting?.typeId || '');\n });\n }\n\n private _setupMouseStyleCursor(): void {\n this.map.on('pointermove', (evt) => {\n const pixel = this.map.getEventPixel(evt.originalEvent);\n const feature = this.map.forEachFeatureAtPixel(pixel, (f) => f, { \n layerFilter: (layer) => { \n return layer.get('DRAWLAYER') === 'true'; \n }\n });\n\n const cursor = feature && this._deleting && !feature.get('LOCKED') ? 'crosshair' : ''; // TODO: Set actual style for delete\n this.map.getTargetElement().style.cursor = cursor;\n });\n\n }\n\n toggleCollapsed(): void {\n this.collapsed = !this.collapsed;\n if (this.collapsed) {\n this.stopMeasureArea();\n this.stopMeasureLength();\n }\n }\n\n startMeasureArea(): void {\n if (this._active === 'Area') {\n this.stopMeasureArea();\n this._active = 'No'\n return;\n }\n // this.geometryTypeSettings \n this._clearDrawInteractions();\n this.stopMeasureLength();\n this.map.addLayer(this._areaLayer);\n this.map.addInteraction(this._areaMeasureDraw);\n this._active = 'Area'\n }\n\n stopMeasureArea(): void {\n this.map.getTargetElement().style.cursor = '';\n this._areaSource.clear();\n this.map.removeInteraction(this._areaMeasureDraw);\n this.map.removeLayer(this._areaLayer);\n }\n\n stopMeasureLength(): void {\n this.map.getTargetElement().style.cursor = '';\n this._distanceSource.clear();\n this._distanceLabelSource.clear();\n this.map.removeInteraction(this._distanceMeasureDraw);\n this.map.removeLayer(this._distanceLayer);\n this.map.removeLayer(this._distanceLabelLayer);\n\n }\n\n startMeasureLength(): void { \n if (this._active === 'Distance') {\n this.stopMeasureLength();\n this._active = 'No';\n return;\n }\n this._clearAllInteractions();\n this.map.addLayer(this._distanceLayer);\n this.map.addLayer(this._distanceLabelLayer);\n this.map.addInteraction(this._distanceMeasureDraw);\n this._active = 'Distance';\n }\n}","<div class=\"toolbox-wrapper\" cdkDrag cdkDragBoundary=\".map-container\">\n <div class=\"drag-handle-toolbox\" cdkDragHandle>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"toolbox-container\">\n <mat-icon class=\"toggle-icon\" (click)=\"toggleCollapsed()\">{{ collapsed ? 'expand_more' : 'expand_less' }}</mat-icon>\n @if(!collapsed) {\n <div class=\"toolbox-content\">\n @if (settings.geometryTypeSettings && settings.geometryTypeSettings.length) {\n <mat-select class=\"geometry-selector\" (selectionChange)=\"settingsChanged($event)\" [(ngModel)]=\"selectedGeometrySetting\" [compareWith]=\"compareGeometrySetting\">\n @for (setting of settings.geometryTypeSettings; track setting) {\n <mat-option [value]=\"setting\">{{setting.typeName}}</mat-option>\n }\n </mat-select> \n }\n <mat-icon class=\"compact-icon\" (click)=\"undo()\" matTooltip=\"Fortryd\" matTooltipPosition=\"right\">undo</mat-icon>\n <mat-icon class=\"compact-icon\" (click)=\"redo()\" matTooltip=\"Gentag\" matTooltipPosition=\"right\">redo</mat-icon>\n @if(settings.editEnabled) {\n <mat-icon class=\"compact-icon\" (click)=\"startEdit()\" matTooltip=\"Rediger\" matTooltipPosition=\"right\">edit_square</mat-icon>\n <mat-icon class=\"compact-icon\" (click)=\"startEditRemovePoints()\" matTooltip=\"Fjern punkter\" matTooltipPosition=\"right\">close</mat-icon>\n }\n @if(settings.cutHoleEnabled) {\n <mat-icon class=\"compact-icon\" (click)=\"clipHole()\" matTooltip=\"Klip hul\" matTooltipPosition=\"right\">restaurant</mat-icon>\n }\n @if(settings.splitEnabled) {\n <mat-icon class=\"compact-icon\" (click)=\"split()\" matTooltip=\"Skær over\" matTooltipPosition=\"right\">carpenter</mat-icon>\n }\n @if(selectedGeometrySetting && selectedGeometrySetting.availableGeometryTypes?.length) {\n <div class=\"geometry-tools\">\n @for(geomType of selectedGeometrySetting.availableGeometryTypes;track geomType) {\n @if(geomType === 'Polygon') {\n <button class=\"compact-button primary\" (click)=\"startDrawPolygon()\">Polygon</button>\n }\n @if(geomType === 'LineString') {\n <button class=\"compact-button primary\" (click)=\"startDrawLineString()\">LineString</button>\n }\n @if(geomType === 'Point') {\n <button class=\"compact-button primary\" (click)=\"startDrawPoint()\">Punkter</button>\n }\n }\n <button class=\"compact-button secondary\" (click)=\"activateShowInputWKT()\">WKT</button>\n </div>\n @if(showInputWKT) {\n <div class=\"wkt-section\">\n <input class=\"compact-input\" [(ngModel)]=\"WKTString\">\n <div class=\"wkt-actions\">\n <button class=\"compact-button primary\" (click)=\"ReadWKT()\">Indlæs WKT</button>\n <button class=\"compact-button\" (click)=\"cancelWKT()\">Annuller</button>\n </div>\n </div>\n }\n }\n <div class=\"measurement-tools\">\n @if (deleteEnabled) {\n <mat-icon class=\"compact-icon\" (click)=\"startDelete()\">delete</mat-icon>\n }\n @if (showMeasureDistance) {\n <mat-icon class=\"compact-icon\" (click)=\"startMeasureLength()\">straighten</mat-icon>\n }\n @if(showMeasureArea) {\n <mat-icon class=\"compact-icon\" (click)=\"startMeasureArea()\">square_foot</mat-icon>\n } \n </div>\n </div>\n }\n </div>\n</div>","import { Component, inject, Input } from '@angular/core';\nimport { DrawLayerSourceService } from '../../services/drawLayerSource.service';\nimport { FeatureHelperService } from '../../services/featureHelper.service';\nimport { getArea } from 'ol/sphere';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { GisKomponentSettings } from '../../models/GisKomponentSettings';\nimport Feature from 'ol/Feature';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\ninterface IFeature { \n locked: boolean;\n area: string;\n id: string | number;\n}\n\ninterface IFeatures {\n display: string;\n featureType: string;\n features: IFeature[];\n}\n\n@Component({\n selector: 'activeObjects',\n styleUrl: './activeObjects.component.scss',\n templateUrl: './activeObjects.component.html',\n imports: [CommonModule, MatExpansionModule, MatIconModule, DragDropModule]\n})\nexport class ActiveObjectsComponent {\n\n private _drawLayerService = inject(DrawLayerSourceService);\n features$ = this._drawLayerService.features$;\n\n @Input({ required: true}) settings!: GisKomponentSettings;\n\n activeFeatures: IFeatures[] = [];\n private _featureHelper = inject(FeatureHelperService);\n constructor() {\n this.features$.subscribe({ \n next: features => {\n const featureTypes = [ ... new Set(features.map(f => this._featureHelper.typeId(f)).filter(typeId => !!typeId))];\n const featuresObj: IFeatures[] = featureTypes\n .map(ft => ({ featureType: ft, \n display: this.settings.geometryTypeSettings.find(gts => gts.typeId === ft)!.typeName,\n features: features.filter(f => this._featureHelper.typeId(f) === ft)\n .map(f => ({ id: f.getId()!, locked: this._featureHelper.isLocked(f), area: this._getAreaString(f) }))}))\n this.activeFeatures = [...featuresObj];\n }});\n }\n\n private _getAreaString(feature: Feature): string {\n if (feature.getGeometry()?.getType() !== 'Polygon') { // We only have polygon, linestring and points and only polygons have area\n return ''; \n }\n\n return this.settings.sizeInHa ? `(${(getArea(feature.getGeometry()!) /10000).toFixed(2)} ha)` : `(${getArea(feature.getGeometry()!).toFixed(2)} m2)`;\n }\n\n highlight(id: number | string): void {\n console.log(\"🚀 ~ ActiveObjectsComponent ~ highlight ~ id:\", id)\n }\n\n unhighlight(id: number | string): void {\n console.log(\"🚀 ~ ActiveObjectsComponent ~ unhighlight ~ id:\", id)\n }\n\n delete(id: string | number): void {\n this._drawLayerService.remove(id);\n this.unhighlight(id);\n }\n}","<div class=\"active-objects-wrapper\" cdkDrag cdkDragBoundary=\".map-container\">\n <div class=\"drag-handle-active-objects\" cdkDragHandle>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"active-objects-content\">\n <h4>Aktive flader</h4>\n @for(featureTypeObj of activeFeatures; track featureTypeObj.featureType) {\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <span class=\"panel-title\">\n {{featureTypeObj.display}} ({{featureTypeObj.features.length}})\n </span>\n </mat-expansion-panel-header>\n <div class=\"item-list\">\n @for(item of featureTypeObj.features; track item.id) {\n <div class=\"item\" (mouseenter)=\"highlight(item.id)\" (mouseleave)=\"unhighlight(item.id)\">\n <div class=\"item-text\">\n <span class=\"item-id\">{{item.id}}</span>\n <span class=\"item-area\">{{item.area}}</span>\n </div>\n <mat-icon *ngIf=\"!item.locked\" (click)=\"delete(item.id)\">delete</mat-icon>\n </div>\n }\n </div>\n </mat-expansion-panel>\n }\n </div> \n</div>","import { Component, OnInit } from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\n@Component({\n selector: 'lib-map-search',\n templateUrl: './map-search.component.html',\n styleUrls: ['./map-search.component.scss'],\n imports: [\n CommonModule,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatAutocompleteModule,\n MatOptionModule,\n MatIconModule,\n DragDropModule\n ]\n})\nexport class MapSearchComponent implements OnInit {\n searchAddress: string = '';\n allResults = ['address1', 'address2', 'address3', 'address4'];\n filteredResults: string[] = [];\n\n ngOnInit(): void {\n this.filterResults();\n }\n\n filterResults(): void {\n if (!this.searchAddress) {\n this.filteredResults = [];\n return;\n }\n this.filteredResults = this.allResults.filter(r =>\n r.toLowerCase().includes(this.searchAddress.toLowerCase())\n );\n }\n}","<div class=\"search-container\" cdkDrag cdkDragBoundary=\".map-container\">\n <div class=\"drag-handle\" cdkDragHandle>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <mat-icon class=\"search-icon\" matPrefix>search</mat-icon>\n <mat-label>Søge</mat-label>\n <input\n type=\"text\"\n matInput\n [(ngModel)]=\"searchAddress\"\n [matAutocomplete]=\"auto\"\n (input)=\"filterResults()\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let result of filteredResults\" [value]=\"result\">\n {{ result }}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, inject, Input, input, OnInit, ViewChild } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport Map from 'ol/Map';\nimport View from 'ol/View';\nimport TileLayer from 'ol/layer/Tile';\nimport ol_layer_Vector from 'ol/layer/Vector';\nimport VectorSource from 'ol/source/Vector';\nimport ImageWMS from 'ol/source/ImageWMS';\nimport WMTSCapabilities from 'ol/format/WMTSCapabilities';\nimport Draw from 'ol/interaction/Draw';\nimport Translate from 'ol/interaction/Translate';\nimport ImageLayer from 'ol/layer/Image';\nimport { ProfileService } from '../../services/profile.service';\nimport LayerGroup from 'ol/layer/Group';\nimport { ILayer } from \"../../models/ILayer\";\n import { MatSelectModule } from '@angular/material/select';\nimport { MatListModule } from '@angular/material/list';\nimport { HttpClient } from '@angular/common/http';\nimport ol_control_mouse from 'ol/control/MousePosition';\nimport ol_control_scale from 'ol/control/ScaleLine';\nimport BaseLayer from 'ol/layer/Base';\nimport { register } from 'ol/proj/proj4';\nimport proj4 from 'proj4';\nimport { LogoControl } from '../../controls/LogoControl/logoControl';\nimport { CopyrightControl } from '../../controls/CopyrightControl/copyRightControl';\nimport { TileWMS } from 'ol/source';\nimport { combineLatest, map, Observable, of } from 'rxjs';\nimport WMTS, { optionsFromCapabilities } from 'ol/source/WMTS';\nimport { LayerHelperService } from '../../services/layerHelper.service';\nimport { IProfile, IProfileDetailed } from '../../models/IProfile';\nimport { Profile } from '../../models/profile';\nimport { LayerSelectorComponent } from \"../layer-selector/layer-selector.component\";\nimport { GisKomponentSettings } from '../../models/GisKomponentSettings';\nimport { KomponentSettingsHelperService } from '../../services/komponentSettingsHelper.service';\nimport 'ol/ol.css';\nimport MapEvent from 'ol/MapEvent';\nimport { Control } from 'ol/control';\nimport { ToolboxComponent } from '../toolbox/toolbox.component';\nimport { ActiveObjectsComponent } from '../active-objects/activeObjects.component';\nimport { UndoRedoService } from '../../services/UndoRedo.service';\nimport { LayerErrorService } from '../../services/layerError.service';\nimport { MapSearchComponent } from \"../map-search/map-search.component\";\n\n@Component({\n selector: 'gis-komponent',\n templateUrl: './gis-komponent.component.html',\n styleUrls: ['./gis-komponent.component.scss'],\n imports: [CommonModule, MatIconModule, MatListModule, MatSelectModule, LayerSelectorComponent, MapSearchComponent, ToolboxComponent, ActiveObjectsComponent],\n providers: [LayerHelperService]\n})\nexport class GisKomponentComponent implements OnInit {\n\n private readonly _profileService = inject(ProfileService);\n private readonly _undoRedo = inject(UndoRedoService);\n private readonly _http = inject(HttpClient);\n private readonly _layerHelper = inject(LayerHelperService);\n private readonly _layerErrorService = inject(LayerErrorService);\n @Input() identifier!: string;\n @Input() settings: GisKomponentSettings | undefined;\n @ViewChild('toolbarRef', { static: true }) toolbarRef!: ElementRef;\n @ViewChild('activeObjectsRef', {static: true }) activeObjectsRef!: ElementRef;\n map!: Map;\n toolbarCollapsed = false;\n layerPanelCollapsed = false;\n activeObjectsCollapsed = false;\n conflictsCollapsed = false;\n showConflicts = false;\n showObjects = false;\n showActiveObjects = false;\n profiles: IProfile[] = [];\n selectedProfile!: IProfileDetailed;\n showToolbar = false;\n private readonly _komponentSettingsHelper = inject(KomponentSettingsHelperService);\n\n layers: { name: string, visible: boolean, activeInSelector: boolean, legendUrl: string }[] = [];\n\n\n private source = new VectorSource({ wrapX: false});\n private layer = new ol_layer_Vector({ source: this.source});\n private draw = new Draw({ source: this.source, type: 'Polygon'});\n private move = new Translate({ layers: [this.layer] });\n private mousePositionCtrl = new ol_control_mouse({ projection: 'EPSG:25832' }); \n private onMoveEndCheckZoomFunction: ((event: MapEvent) => void) = () => {};\n currentZoomLevel: number = 0;\n private scaleCtrl = new ol_control_scale({\n units: 'metric',\n bar: true,\n steps: 4,\n text: true,\n minWidth: 120\n });\n \n profileSelected(profileIdentifier: string): void {\n this._profileService.getByIdentifier(profileIdentifier).subscribe({\n next: profile => { \n this.selectedProfile = profile; \n const view: View = new View({\n center: [profile.centerX, profile.centerY],\n extent: [profile.minX, profile.minX, profile.maxX, profile.maxY],\n zoom: profile.zoom ?? 8,\n maxZoom: profile.maxZoom ?? undefined,\n minZoom: profile.minZoom ?? undefined,\n projection: 'EPSG:25832'\n });\n\n this.currentZoomLevel = profile.zoom ?? 8;\n\n this._getCapabilitiesObject(profile).subscribe({\n next: capabilityObject => { \n const layers: BaseLayer[] = [...profile.layerGroups.map((lg: { layers: any[]; id: number; }) => \n new LayerGroup({\n layers: lg.layers\n .filter(layer => layer.activeInSelector)\n .sort((a, b) => a.sortOrder - b.sortOrder)\n .map((l, index) => this._mapLayer(l, capabilityObject, 'EPSG:25832', lg.id, index)) // for now, we default to EPSG:25832. \n })\n )\n ];\n this.map.setLayers(layers);\n this._layerHelper.applyCachedLayersToDisplayInMap(this.map, profile.id);\n }\n });\n \n const toolbarControl = new Control({\n element: this.toolbarRef.nativeElement\n });\n \n if (profile.showToolbar) {\n this.showToolbar = true;\n this.map.addControl(toolbarControl);\n }\n\n this.showActiveObjects = true;\n const activeObjectsControl = new Control({\n element: this.activeObjectsRef.nativeElement\n });\n this.map.addControl(activeObjectsControl);\n\n this._handleShowMouseCoordinates(profile.showCoordinates);\n this._handleShowScale(profile.showScale);\n this._setLogo(profile.logoUrl);\n this._setCopyRight(profile.copyrightMessage);\n this.map.setView(view);\n this.onMoveEndCheckZoomFunction = () => {\n this._checkZoom(this.map);\n };\n this.map.on('moveend', this.onMoveEndCheckZoomFunction);\n this._undoRedo.init();\n }}); \n }\n\n private _checkZoom(map: Map) : void {\n this.currentZoomLevel = map.getView().getZoom() ?? this.currentZoomLevel;\n }\n\n private _getCapabilitiesObject(profile: Profile): Observable<Record<string, any>> {\n // Find all WMTS-layers and get their base url's for retrieving the capabilities. Make sure every url is only called once by removing duplicates\n const getCapabilitiesUrls = [... new Set(profile.layerGroups.flatMap(lg => lg.layers).filter(lg => lg.layerType === 'WMTS').map(lg => lg.baseUrl))];\n const parser = new WMTSCapabilities();\n const capabilities$ = getCapabilitiesUrls.map(url => this._http.get(`${url}/gwc/service/wmts?request=GetCapabilities`, {responseType: 'text'}).pipe(map(result => \n ({\n url,\n sourceObject: parser.read(result)\n }))));\n // To make it easier to find the appropriate object, I convert the array to an object of a key/value type.\n return capabilities$.length == 0 ? of({} as Record<string, any>) :\n combineLatest(capabilities$).pipe(map(allCapabilities => \n allCapabilities.reduce((obj, item) => {\n obj[item.url] = item.sourceObject;\n return obj;\n }, {} as Record<string, any>)\n ));\n }\n\n private _mapLayer(layer: ILayer, wmtsOptions: Record<string, any>, projection: string, layerGroupDbId: number, zIndex: number): BaseLayer {\n const params: { [x: string]: any } = {\n layers: layer.layers,\n }\n if (layer.token) {\n params[layer.authKeyName] = layer.token;\n }\n layer.wmsParameters.forEach(param => {\n params[param.key] = param.value\n });\n\n let result: BaseLayer;\n switch (layer.layerType) {\n case 'WMS':\n result = new ImageLayer({ \n source: new ImageWMS({ \n url: layer.baseUrl,\n params\n }) \n }); \n break;\n case 'TILEWMS':\n result = new TileLayer({\n source: new TileWMS({\n url: layer.baseUrl,\n params, \n })\n });\n break;\n case 'WMTS':\n // Create WMST options from the capabilities loaded from the getCapabilities called.\n const options = optionsFromCapabilities(wmtsOptions[layer.baseUrl], {\n layer: layer.layers,\n matrixSet: layer.projection || projection\n });\n result = new TileLayer({\n source: new WMTS(options!)\n });\n break;\n }\n \n if (layer.minZoom) {\n result.setMinZoom(layer.minZoom); \n }\n if (layer.maxZoom) {\n result.setMaxZoom(layer.maxZoom);\n } \n if (layer.maxX && layer.minX && layer.maxY && layer.minY) {\n result.setExtent([layer.minX, layer.minX, layer.maxX, layer.maxY]);\n }\n this._layerHelper.setDbId(result, layer.id);\n this._layerHelper.setLayerGroupDbId(result, layerGroupDbId);\n this._layerErrorService.registerLayer(layer.id, result);\n result.setZIndex(zIndex);\n return result;\n }\n\n private _setLogo(url: string): void {\n const logoCtrl = new LogoControl(url);\n this.map.addControl(logoCtrl);\n }\n\n private _setCopyRight(message: string): void {\n const copyrightCtrl = new CopyrightControl(message);\n this.map.addControl(copyrightCtrl);\n }\n\n private _handleShowMouseCoordinates(showCoords: boolean): void {\n if (showCoords) {\n this.map.addControl(this.mousePositionCtrl);\n } else {\n this.map.removeControl(this.mousePositionCtrl);\n }\n }\n\n private _handleShowScale(showScale: boolean): void {\n if (showScale) {\n this.map.addControl(this.scaleCtrl);\n } else {\n this.map.removeControl(this.scaleCtrl);\n }\n }\n\n ngOnInit(): void {\n this.profileSelected(this.identifier);\n proj4.defs('EPSG:25832', '+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs +type=crs');\n register(proj4);\n \n this.map = new Map({\n target: 'map',\n });\n\n this.draw.setActive(false);\n this.move.setActive(false);\n this.map.addInteraction(this.draw);\n this.map.addInteraction(this.move);\n }\n\n toggleDraw(): void {\n this.move.setActive(false);\n this.draw.setActive(!this.draw.getActive());\n }\n\n toggleShowConflicts(): void {\n this.showConflicts = !this.showConflicts;\n }\n\n toggleShowObjects(): void {\n this.showObjects = !this.showObjects;\n }\n\n toggleMove(): void {\n this.draw.setActive(false);\n this.move.setActive(true);\n }\n toggleToolbar(): void {\n this.toolbarCollapsed = !this.toolbarCollapsed;\n }\n\n toggleLayerPanel(): void {\n this.layerPanelCollapsed = !this.layerPanelCollapsed;\n }\n\n toggleActiveObjectsCollapsed(): void { \n this.activeObjectsCollapsed = !this.activeObjectsCollapsed;\n }\n}\n","<lib-layer-selector [map]=\"map\" [profile]=\"selectedProfile\" [currentZoomLevel]=\"currentZoomLevel\"></lib-layer-selector>\n<span>Zoom: {{ currentZoomLevel}}</span>\n<div #activeObjectsRef>\n @if(showActiveObjects && settings) {\n <activeObjects [settings]=\"settings\"></activeObjects>\n }\n</div>\n<div #toolbarRef class=\"map-toolbar-container\">\n @if(showToolbar && settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [collapsed]=\"selectedProfile.toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile.showAreaMeasurement\" [showMeasureDistance]=\"selectedProfile.showDistanceMeasurement\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search></lib-map-search>\n\n <!-- Objektvisning -->\n <!-- @if (showObjects) {\n <div class=\"object-panel\" [class.collapsed]=\"activeObjectsCollapsed\">\n <div class=\"header\" (click)=\"toggleActiveObjectsCollapsed()\">\n <span>Aktive objekter ({{activeObjects.length}})</span>\n <mat-icon>{{ activeObjectsCollapsed ? 'expand_more' : 'expand_less' }}</mat-icon>\n </div>\n @if (!activeObjectsCollapsed){\n <ul>\n <li *ngFor=\"let obj of activeObjects\">{{ obj.name }} ({{obj.size}})</li>\n </ul>\n }\n </div>\n } -->\n\n <!-- Konflikter -->\n @if (showConflicts) {\n\n <div class=\"conflict-panel\" [class.collapsed]=\"conflictsCollapsed\">\n <div class=\"header\">\n <span>Konflikter (3)</span>\n <mat-icon>{{ activeObjectsCollapsed ? 'expand_more' : 'expand_less' }}</mat-icon> -->\n </div>\n <mat-list>\n <mat-list-item>\n <span matListItemTitle>Lag #1</span>\n <span matListItemLine><mat-icon>highlight</mat-icon> Objekt #1</span>\n </mat-list-item>\n <mat-list-item>\n <span matListItemTitle>Lag #2 (svarer ikke)</span>\n </mat-list-item>\n <mat-list-item>\n <span matListItemTitle>Lag #3</span>\n <span matListItemLine><mat-icon>highlight</mat-icon> Objekt #1</span>\n <span matListItemLine><mat-icon>highlight</mat-icon> Objekt #2</span>\n </mat-list-item>\n </mat-list>\n </div>\n \n } \n\n <!-- Kort -->\n <div id=\"map\" class=\"map\"></div>\n \n\n</div>\n","import { HttpInterceptorFn, HttpErrorResponse } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { catchError, throwError } from 'rxjs';\nimport { LibErrorService } from './libError.service';\n\nexport const libErrorInterceptor: HttpInterceptorFn = (req, next) => {\n const errorService = inject(LibErrorService);\n\n return next(req).pipe(\n catchError((error: HttpErrorResponse) => {\n errorService.log(error);\n errorService.show(error);\n return throwError(() => error); // Let the component decide if needed\n })\n );\n};\n","import { Provider } from '@angular/core';\nimport { GISKOMPONENT_CONFIG, GISKomponentConfig } from './config';\nimport { provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { libErrorInterceptor } from '../services/libError.interceptor.service';\n\nexport function provideLibrary(config: GISKomponentConfig): Provider[] {\n return [ \n { provide: GISKOMPONENT_CONFIG, useValue: config }\n ];\n}\n\nexport function provideLibraryHttpClient(): any {\n return [\n provideHttpClient(withInterceptors([libErrorInterceptor]))\n ]\n};","/*\n * Public API Surface of gis-komponent\n */\n\nexport * from './lib/components/gis-komponent/gis-komponent.component';\nexport * from './lib/config/library-provider';\nexport * from './lib/services/profile.service';\nexport * from './lib/services/layerHelper.service';\nexport * from './lib/models/GisKomponentSettings';\nexport * from './lib/services/libError.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i1.DrawLayerSourceService","buffer","i4","i6","i2","i5","i8","ol_layer_Vector","LayerGroup","Map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"regionerne-gis-komponent.mjs","sources":["../../../projects/gis-komponent/src/lib/config/config.ts","../../../projects/gis-komponent/src/lib/services/profile.service.ts","../../../projects/gis-komponent/src/lib/controls/LogoControl/logoControl.ts","../../../projects/gis-komponent/src/lib/controls/CopyrightControl/copyRightControl.ts","../../../projects/gis-komponent/src/lib/services/layerHelper.service.ts","../../../projects/gis-komponent/src/lib/components/lib-notification/lib-notification.component.ts","../../../projects/gis-komponent/src/lib/components/lib-notification/lib-notification.component.html","../../../projects/gis-komponent/src/lib/services/libError.service.ts","../../../projects/gis-komponent/src/lib/services/layerError.service.ts","../../../projects/gis-komponent/src/lib/components/layer-selector/layer-selector.component.ts","../../../projects/gis-komponent/src/lib/components/layer-selector/layer-selector.component.html","../../../projects/gis-komponent/src/lib/services/komponentSettingsHelper.service.ts","../../../projects/gis-komponent/src/lib/services/drawLayerSource.service.ts","../../../projects/gis-komponent/src/lib/services/featureHelper.service.ts","../../../projects/gis-komponent/src/lib/services/UndoRedo.service.ts","../../../projects/gis-komponent/src/lib/services/geometri-split.service.ts","../../../projects/gis-komponent/src/lib/components/toolbox/toolbox.component.ts","../../../projects/gis-komponent/src/lib/components/toolbox/toolbox.component.html","../../../projects/gis-komponent/src/lib/components/active-objects/activeObjects.component.ts","../../../projects/gis-komponent/src/lib/components/active-objects/activeObjects.component.html","../../../projects/gis-komponent/src/lib/components/map-search/map-search.component.ts","../../../projects/gis-komponent/src/lib/components/map-search/map-search.component.html","../../../projects/gis-komponent/src/lib/services/legend.service.ts","../../../projects/gis-komponent/src/lib/components/legends-list/legends-list.component.ts","../../../projects/gis-komponent/src/lib/components/legends-list/legends-list.component.html","../../../projects/gis-komponent/src/lib/components/gis-komponent/gis-komponent.component.ts","../../../projects/gis-komponent/src/lib/components/gis-komponent/gis-komponent.component.html","../../../projects/gis-komponent/src/lib/services/libError.interceptor.service.ts","../../../projects/gis-komponent/src/lib/config/library-provider.ts","../../../projects/gis-komponent/src/public-api.ts","../../../projects/gis-komponent/src/regionerne-gis-komponent.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface GISKomponentConfig {\n apiBaseUrl: string;\n}\n\nexport const GISKOMPONENT_CONFIG = new InjectionToken<GISKomponentConfig>('GisKomponentConfig');\n","import { inject, Injectable } from '@angular/core';\nimport { GISKOMPONENT_CONFIG } from '../config/config';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { IProfileDetailed } from '../models/IProfile';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProfileService {\n\n private config = inject(GISKOMPONENT_CONFIG);\n private _baseUrl = this.config.apiBaseUrl;\n private _http = inject(HttpClient);\n\n getByIdentifier(identifier: string): Observable<IProfileDetailed> {\n const url = `${this._baseUrl}/api/profile/identifier/${identifier}`;\n return this._http.get<IProfileDetailed>(url);\n }\n}","// logo-control.ts\nimport { Control } from 'ol/control';\n\nexport class LogoControl extends Control {\n constructor(url: string) {\n const element = document.createElement('div');\n element.className = 'ol-logo ol-unselectable ol-control';\n\n if (url) {\n const img = document.createElement('img');\n img.src = url;\n img.alt = 'Logo';\n element.appendChild(img);\n } else {\n element.style.display = 'none';\n }\n\n super({ element });\n }\n}\n","import { Control } from 'ol/control';\n\nexport class CopyrightControl extends Control {\n constructor(text: string) {\n const element = document.createElement('div');\n element.className = 'ol-copyright ol-unselectable ol-control';\n element.innerText = text;\n\n super({ element });\n\n if (!text) {\n element.style.display = 'none';\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport BaseLayer from 'ol/layer/Base';\nimport Map from 'ol/Map';\nimport OLLayerGroup from 'ol/layer/Group';\nimport { LayerSelectorGroup } from '../models/profile';\nimport { ILayer } from '../models/ILayer';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LayerHelperService {\n\n private readonly _layerDbIdKey: string = 'layerDbId';\n private readonly _layerGroupDbIdKey: string = 'layerGroupDbId';\n private readonly _mapFilteredLayerGroupsKeyName: string = 'mapFilteredLayerGroups';\n private readonly _layerIdsToDisplayInMapKeyName: string = 'layerIdsToDisplayInMap';\n\n setDbId(layer: BaseLayer, id: number): void {\n layer.set(this._layerDbIdKey, id);\n }\n\n getDbId(layer: BaseLayer): number {\n const dbId = layer.get(this._layerDbIdKey) ?? -1;\n return +dbId;\n }\n\n setLayerGroupDbId(layer: BaseLayer, id: number): void {\n layer.set(this._layerGroupDbIdKey, id);\n }\n\n getLayerGroupDbId(layer: BaseLayer): number {\n const dbId = layer.get(this._layerGroupDbIdKey) ?? -1;\n return +dbId;\n }\n\n applyCachedLayersToDisplayInMap(map: Map, profileId: number): void {\n const layerIdsCachedToDisplay = localStorage.getItem(`${this._layerIdsToDisplayInMapKeyName}_${profileId}`)?.split(',');\n if (layerIdsCachedToDisplay) {\n //Bottom layers are rendered first, top layers are rendered last (on top)\n layerIdsCachedToDisplay.reverse();\n map.getLayers().getArray().forEach(layergroup => {\n if (layergroup instanceof OLLayerGroup) {\n layergroup.getLayers().getArray().forEach(l => {\n if (!layerIdsCachedToDisplay.some(id => l.get(this._layerDbIdKey) == id)) {\n const current = l.getVisible();\n if (current) {\n l.setVisible(!current);\n }\n } else {\n //Set z index to match the order in cache\n l.setZIndex(layerIdsCachedToDisplay.indexOf(l.get(this._layerDbIdKey).toString()));\n //console.log('layer id '+l.get(this._layerDbIdKey)+' - setZIndex:'+layerIdsCachedToDisplay.indexOf(l.get(this._layerDbIdKey).toString()));\n }\n })\n }\n })\n }\n }\n \n\n updateLayerOpacityInMap(map: Map, layer: ILayer): void {\n map.getLayers().getArray().forEach(layergroup => {\n if (layergroup instanceof OLLayerGroup) {\n layergroup.getLayers().getArray().forEach(l => {\n if (l.get(this._layerDbIdKey) === layer.id && layer.opacity) {\n l.setOpacity(layer.opacity);\n }\n })\n }}\n )\n }\n\n toggleLayerInMap(map: Map, layer: ILayer): void {\n map.getLayers().getArray().forEach(layergroup => {\n if (layergroup instanceof OLLayerGroup) {\n layergroup.getLayers().getArray().forEach(l => {\n if (l.get(this._layerDbIdKey) === layer.id) {\n const current = l.getVisible();\n l.setVisible(!current);\n }\n })}\n }\n );\n }\n}","import { Component, inject } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'lib-notification',\n templateUrl: './lib-notification.component.html',\n styleUrls: ['./lib-notification.component.scss'],\n standalone: true\n})\nexport class LibNotificationComponent {\n data: { messages: string[] } = inject(MAT_SNACK_BAR_DATA);\n private _snackRef = inject(MatSnackBarRef<LibNotificationComponent>);\n\n dismiss() {\n this._snackRef.dismiss();\n }\n}\n","<div class=\"notification-container\">\n <button mat-icon-button class=\"close-btn\" (click)=\"dismiss()\">×</button>\n @for (message of data.messages; track message) {\n <div class=\"lib-notification\">\n <span>{{ message }}</span>\n </div>\n }\n</div>","import { Injectable, inject } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { LibNotificationComponent } from '../components/lib-notification/lib-notification.component';\n\n@Injectable({ providedIn: 'root' })\nexport class LibErrorService {\n private _snackBar = inject(MatSnackBar);\n private _messages: string[] = [];\n\n //Format errors from backend or UI\n format(error: unknown): string {\n if (error instanceof HttpErrorResponse) {\n if (error.error?.message) return error.error.message;\n if (typeof error.error === 'string') return error.error;\n return `Server returned ${error.status}`;\n }\n\n if (error instanceof Error) return error.message;\n return 'An unexpected error occurred.';\n }\n // Log errors (for debugging or telemetry)\n log(error: unknown): void {\n console.error('[Library Error]', error);\n }\n // Show user-friendly message via Material snackbar\n show(error: unknown): void {\n const message = this.format(error);\n // Prevent duplicates\n if (this._messages.includes(message)) return;\n this._messages.push(message);\n const ref = this._snackBar.openFromComponent(LibNotificationComponent, {\n data: { messages: this._messages },\n duration: 5000,\n horizontalPosition: 'right',\n verticalPosition: 'top',\n politeness: 'off',\n panelClass: ['lib-notification-container'],\n });\n // Remove from active stack when it closes\n ref.afterDismissed().subscribe(() => {\n this._messages = this._messages.filter(m => m !== message);\n });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport BaseLayer from 'ol/layer/Base';\nimport TileLayer from 'ol/layer/Tile';\nimport ImageLayer from 'ol/layer/Image';\nimport VectorLayer from 'ol/layer/Vector';\nimport TileSource from 'ol/source/Tile';\nimport ImageSource from 'ol/source/Image';\nimport VectorSource from 'ol/source/Vector';\nimport { unByKey } from 'ol/Observable';\nimport { EventsKey } from 'ol/events';\nimport { Subject } from 'rxjs';\nimport { LibErrorService } from './libError.service';\n\nexport interface LayerStatus {\n layerId: number;\n hasError: boolean;\n lastError?: any;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LayerErrorService {\n public layerStatusChanged: Subject<number> = new Subject<number>();\n private layerStatuses = new Map<number, LayerStatus>();\n private listeners = new Map<number, EventsKey[]>();\n private _errorService: LibErrorService = inject(LibErrorService);\n\n registerLayer(layerId: number, layer: BaseLayer): void {\n // BaseLayer does not guarantee getSource(), so we must narrow type first\n let source: any;\n\n if (layer instanceof TileLayer || layer instanceof ImageLayer || layer instanceof VectorLayer) {\n source = layer.getSource();\n }\n\n if (!source) {\n console.warn(`[Layer ${layerId}] has no source; skipping error tracking.`);\n return;\n }\n\n const markError = (event: any) => {\n this.layerStatuses.set(layerId, { layerId, hasError: true, lastError: event });\n console.error(`[Layer ${layerId}] load error:`, event);\n this._errorService.show(new Error(`Indlæsningsfejl for lag med id ${layerId}.`));\n this.layerStatusChanged.next(layerId);\n };\n\n const clearError = () => {\n this.layerStatuses.set(layerId, { layerId, hasError: false });\n this.layerStatusChanged.next(layerId);\n };\n\n let keys: EventsKey[] = [];\n\n if (source instanceof TileSource) {\n keys.push(source.on('tileloaderror', markError));\n keys.push(source.on('tileloadend', clearError));\n } else if (source instanceof ImageSource) {\n keys.push(source.on('imageloaderror', markError));\n keys.push(source.on('imageloadend', clearError));\n } else if (source instanceof VectorSource) {\n keys.push(source.on('featuresloaderror', markError));\n keys.push(source.on('featuresloadend', clearError));\n } else {\n console.warn(`[Layer ${layerId}] Unknown source type; cannot attach error tracking.`);\n }\n\n if (keys.length) {\n this.listeners.set(layerId, keys);\n }\n this.layerStatusChanged.next(layerId);\n }\n\n unregisterLayer(layerId: number): void {\n const keys = this.listeners.get(layerId);\n if (keys) {\n keys.forEach(k => unByKey(k));\n this.listeners.delete(layerId);\n }\n this.layerStatuses.delete(layerId);\n this.layerStatusChanged.next(layerId);\n }\n\n getLayerStatus(layerId: number): LayerStatus | undefined {\n return this.layerStatuses.get(layerId);\n }\n\n getAllStatuses(): LayerStatus[] {\n return Array.from(this.layerStatuses.values());\n }\n}\n","import { Component, ElementRef, inject, Input, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';\nimport { CdkDragDrop, DragDropModule, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { LayerSelectorGroup, Profile } from '../../models/profile';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormsModule } from '@angular/forms';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatInputModule } from '@angular/material/input';\nimport Map from 'ol/Map';\nimport { LayerHelperService } from '../../services/layerHelper.service';\nimport ol_control_Control from 'ol/control/Control';\nimport { ILayer } from '../../models/ILayer';\nimport { LayerErrorService } from '../../services/layerError.service';\n\nexport interface CachedProfileInfo {\n profile: Profile;\n cachedLayerGroups: LayerSelectorGroup[];\n}\n\n@Component({\n selector: 'lib-layer-selector',\n templateUrl: './layer-selector.component.html',\n styleUrls: ['./layer-selector.component.scss'],\n imports: [ MatFormFieldModule, CommonModule, MatIconModule, FormsModule, DragDropModule, \n MatExpansionModule, MatInputModule ]\n})\nexport class LayerSelectorComponent implements OnInit, OnChanges {\n @ViewChild('layerSelectorIcon', { static: false }) set contentIcon(content: ElementRef) {\n this._layerSelectorIcon = content;\n }\n @ViewChild('layerSelectorBody', { static: false }) set contentBody(content: ElementRef) {\n this._layerSelectorBody = content;\n }\n @Input() map!: Map;\n @Input() profile!: Profile;\n @Input() currentZoomLevel!: number;\n searchText = '';\n allLayerGroups: LayerSelectorGroup[] = [];\n filteredLayerGroups: LayerSelectorGroup[] = [];\n showSelector: boolean = false;\n private _namesToGoLast: string[] = ['Baggrundskort'];\n private _layerSelectorIcon!: ElementRef;\n private _layerSelectorIconControl!: ol_control_Control;\n private _layerSelectorBody!: ElementRef;\n private _layerSelectorBodyControl!: ol_control_Control;\n private readonly _mapFilteredLayerGroupsKeyName: string = 'mapFilteredLayerGroups';\n private readonly _layerIdsToDisplayInMapKeyName: string = 'layerIdsToDisplayInMap';\n private readonly _layerHelper: LayerHelperService = inject(LayerHelperService);\n private readonly _layerErrorService: LayerErrorService = inject(LayerErrorService);\n\n ngOnInit(): void {\n this._layerErrorService.layerStatusChanged\n .subscribe(layerId => {\n const layerHasErrors: boolean | undefined = this._layerErrorService.getLayerStatus(layerId)?.hasError;\n if (layerHasErrors != undefined) this.setLayerErrorStatus(layerId, layerHasErrors);\n })\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['profile'] && this.profile) {\n this.allLayerGroups = this.profile.layerGroups\n .map((lg, idx) => ({... lg, \n noOfVisibleLayers: lg.layers.filter(l => l.visible).length, \n visible: lg.layers.some(l => l.visible),\n expanded: lg.layers.some(l => l.visible),\n layers: lg.layers.filter((l: { activeInSelector: boolean; }) => l.activeInSelector), \n sortOrder: idx}))\n .filter(g => g.layers.length > 0); \n \n const cacheValue = localStorage.getItem(`${this._mapFilteredLayerGroupsKeyName}_${this.profile.id}`);\n if (cacheValue) {\n const cachedProfileInfo: CachedProfileInfo = JSON.parse(cacheValue);\n if (cachedProfileInfo.profile.versionId < this.profile.versionId) {\n //Profile version changed in backend, use that\n this.filteredLayerGroups = this.setfilteredGroups(); \n this._cacheProfileInfo();\n } else {\n this.filteredLayerGroups = cachedProfileInfo.cachedLayerGroups;\n this._setVisibleLayersFromCache(cachedProfileInfo.cachedLayerGroups);\n }\n } else {\n this.filteredLayerGroups = this.setfilteredGroups(); \n this._cacheProfileInfo();\n }\n this._initializeMapIconControl();\n }\n }\n\n toggleLayer(layer: ILayer): void {\n this._layerHelper.toggleLayerInMap(this.map, layer);\n // Toggle layer in all groups in the selector UI\n this.filteredLayerGroups.forEach(group => {\n group.layers.forEach(l => {\n if (layer.id === l.id) {\n l.visible = !l.visible;\n }});\n group.noOfVisibleLayers = group.layers.filter(l => l.visible).length;\n group.visible = group.layers.some(l => l.visible);\n group.expanded = group.layers.some(l => l.visible);\n });\n this._cacheProfileInfo();\n }\n\n setLayerErrorStatus(layerId: number, errorStatus: boolean): void {\n this.filteredLayerGroups.forEach(group => {\n group.layers.forEach(l => {\n if (layerId === l.id) {\n l.hasErrors = errorStatus;\n }});\n });\n }\n\n toggleGroup(event: MouseEvent, layerGroup: LayerSelectorGroup): void {\n event.stopPropagation(); // Prevent the panel from expanding/collapsing\n const visible: boolean = !layerGroup.visible;\n layerGroup.layers.forEach(layer => {\n if (layer.visible != visible) {\n //Toggle layer in map\n this._layerHelper.toggleLayerInMap(this.map, layer);\n // Toggle layer in all groups in the selector UI\n this.filteredLayerGroups.forEach(group => {\n group.layers.forEach(l => {\n if (layer.id === l.id) {\n l.visible = !l.visible;\n }});\n group.noOfVisibleLayers = group.layers.filter(l => l.visible).length;\n group.visible = group.layers.some(l => l.visible);\n group.expanded = group.layers.some(l => l.visible);\n });\n }\n })\n layerGroup.visible = visible;\n layerGroup.expanded = layerGroup.layers.some(l => l.visible);\n this._cacheProfileInfo();\n }\n\n toggleLayerSelector(): void {\n this.showSelector = !this.showSelector;\n if (this.showSelector) {\n this._addMapBodyControl();\n } else {\n this._removeMapBodyControl();\n }\n }\n\n updateOpacity(layer: ILayer): void {\n this._layerHelper.updateLayerOpacityInMap(this.map, layer);\n }\n\n stopDrag(event: Event): void {\n event.stopPropagation(); // prevents drag container from activating\n }\n\n setfilteredGroups(): LayerSelectorGroup[] {\n const text = this.searchText.toLowerCase();\n return this.allLayerGroups\n .map((g, idx) => {\n if (!text) {\n return { ...g, expanded: false, sortOrder: idx,\n layers: g.layers.map(layer => ({...layer, opacity: 1}))\n }; // collapsed by default\n }\n const filteredItems = g.layers.filter(l => l.name.toLowerCase().includes(text));\n return {\n ...g,\n expanded: filteredItems.length > 0,\n sortOrder: idx,\n layers: filteredItems.map(layer => ({...layer, opacity: 1}))\n };\n })\n .filter(g => g.layers.length > 0)\n .sort((a, b) => {\n const aIsLast = this._namesToGoLast.includes(a.name) || a.layers.some(layer => layer.background);\n const bIsLast = this._namesToGoLast.includes(b.name) || b.layers.some(layer => layer.background);\n if (aIsLast && !bIsLast) return 1;\n if (!aIsLast && bIsLast) return -1;\n return a.sortOrder - b.sortOrder\n });\n }\n\n dropGroup(event: CdkDragDrop<LayerSelectorGroup[]>) {\n moveItemInArray(this.filteredLayerGroups, event.previousIndex, event.currentIndex);\n this.updateGroupSortOrders();\n this._cacheProfileInfo();\n }\n\n dropLayer(event: CdkDragDrop<ILayer[]>, group: LayerSelectorGroup) {\n if (event.previousContainer === event.container) {\n moveItemInArray(group.layers, event.previousIndex, event.currentIndex);\n } else {\n transferArrayItem(\n event.previousContainer.data,\n event.container.data,\n event.previousIndex,\n event.currentIndex\n );\n }\n this.updateLayerSortOrders(group);\n this._cacheProfileInfo();\n }\n\n clearSearchText(): void {\n this.searchText = '';\n this.filteredLayerGroups = this.setfilteredGroups();\n this._cacheProfileInfo();\n }\n\n updateGroupSortOrders() {\n this.filteredLayerGroups.forEach((g, idx) => (g.sortOrder = idx));\n }\n\n updateLayerSortOrders(group: LayerSelectorGroup) {\n group.layers.forEach((layer, idx) => (layer.sortOrder = idx));\n }\n\n private _cacheProfileInfo(): void {\n const cacheItem: CachedProfileInfo = { profile: this.profile, cachedLayerGroups: this.filteredLayerGroups };\n localStorage.setItem(`${this._mapFilteredLayerGroupsKeyName}_${this.profile.id}`, JSON.stringify(cacheItem));\n localStorage.setItem(`${this._layerIdsToDisplayInMapKeyName}_${this.profile.id}`, this.filteredLayerGroups\n .flatMap(lg => lg.layers)\n .filter(lg => lg.visible)\n .map(lg => lg.id).join(','));\n // Reflect new order in map\n this._layerHelper.applyCachedLayersToDisplayInMap(this.map, this.profile.id);\n }\n\n private _initializeMapIconControl(): void {\n this.map.removeControl(this._layerSelectorIconControl);\n const element = this._layerSelectorIcon.nativeElement;\n this._layerSelectorIconControl = new ol_control_Control({ element: element });\n this.map.addControl(this._layerSelectorIconControl);\n }\n\n private _addMapBodyControl(): void {\n this.map.removeControl(this._layerSelectorBodyControl);\n const element = this._layerSelectorBody.nativeElement;\n this._layerSelectorBodyControl = new ol_control_Control({ element: element });\n this.map.addControl(this._layerSelectorBodyControl);\n }\n\n private _removeMapBodyControl(): void {\n this.map.removeControl(this._layerSelectorBodyControl);\n }\n\n private _setVisibleLayersFromCache(cachedFilteredLayergroups: LayerSelectorGroup[]): void {\n this.allLayerGroups.forEach(group => group.layers.forEach(layer => {\n const cachedLayer = cachedFilteredLayergroups.find(gr => gr.id === group.id)?.layers?.find(l => l.id === layer.id);\n layer.visible = cachedLayer?.visible ?? layer.visible;\n }))\n }\n\n}\n","<div #layerSelectorIcon class=\"ol-unselectable ol-control layer-selector-icon\">\n <mat-icon (click)=\"toggleLayerSelector()\">layers</mat-icon>\n</div>\n<div #layerSelectorBody [class.display-none]=\"!showSelector\" class=\"layer-selector-body-wrapper\" cdkDrag cdkDragBoundary=\".map-container\">\n <div class=\"drag-handle-selector\" cdkDragHandle>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"ol-unselectable ol-control layer-selector-body\">\n <div class=\"search-section\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Filtrer</mat-label>\n <input \n matInput \n type=\"text\" \n [(ngModel)]=\"searchText\" \n (ngModelChange)=\"filteredLayerGroups=setfilteredGroups()\"\n placeholder=\"Skriv for at filtrere...\"\n />\n </mat-form-field>\n <mat-icon (click)=\"clearSearchText()\">undo</mat-icon>\n </div>\n \n <div\n cdkDropList\n [cdkDropListData]=\"filteredLayerGroups\"\n (cdkDropListDropped)=\"dropGroup($event)\"\n class=\"item-list\">\n @for (group of filteredLayerGroups; track group.id; let gIndex = $index) {\n <div class=\"group\" cdkDrag cdkDragPreviewDisabled>\n <mat-expansion-panel [(expanded)]=\"group.expanded\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n @if (group.expanded) {\n <mat-icon>arrow_upward</mat-icon>\n }\n @if (!group.expanded) {\n <mat-icon>arrow_downward</mat-icon> \n }\n {{ group.name }} \n <mat-icon class=\"lightbulb\">lightbulb</mat-icon>\n ({{ group.noOfVisibleLayers }}/{{ group.layers.length }})\n @if (group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-on\">power</mat-icon>(tænd)\n }\n @if (!group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-off\">power_off</mat-icon>(sluk)\n }\n </mat-panel-title>\n </mat-expansion-panel-header>\n <!-- This is only shown during drag -->\n <!-- <div *cdkDragPreview class=\"drag-preview\">\n {{ group.name }}\n </div> -->\n\n <!-- Placeholder to avoid jump -->\n <!-- <div *cdkDragPlaceholder class=\"drag-placeholder\"></div> -->\n\n <div\n cdkDropList\n [cdkDropListData]=\"group.layers\"\n (cdkDropListDropped)=\"dropLayer($event, group)\"\n class=\"item-list\">\n @for (layer of group.layers; track layer.id; let iIndex = $index) {\n <div class=\"item\" cdkDrag cdkDragPreviewDisabled>\n <mat-icon class=\"drag-indicator\">drag_indicator</mat-icon>\n <span>{{ layer.name }}</span>\n @if (layer.maxZoom < currentZoomLevel || layer.minZoom > currentZoomLevel) {\n <mat-icon class=\"zoom-off\">browser_not_supported</mat-icon>(zoom)\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"zoom-off\">wifi_off</mat-icon>(fejle)\n }\n @if (layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer)\" class=\"power-on\">power</mat-icon>(tænd)\n }\n @if (!layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer)\" class=\"power-off\">power_off</mat-icon>(sluk)\n }\n <input \n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n [(ngModel)]=\"layer.opacity\"\n (input)=\"updateOpacity(layer)\"\n (mousedown)=\"stopDrag($event)\"\n (touchstart)=\"stopDrag($event)\"\n (pointerdown)=\"stopDrag($event)\"\n >\n </div>\n }\n </div>\n </mat-expansion-panel>\n </div>\n }\n </div>\n </div>\n</div>","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { GisKomponentSettings } from '../models/GisKomponentSettings';\nimport { GeoServer } from '../models/geoserver';\nimport { combineLatest, map, Observable, of, reduce, tap } from 'rxjs';\nimport WKT from 'ol/format/WKT'\n// @ts-ignore\nimport * as SLDReader from '@nieuwlandgeo/sldreader';\n\nimport Map from 'ol/Map';\nimport ol_layer_Vector from 'ol/layer/Vector';\nimport VectorSource from 'ol/source/Vector';\nimport { extend } from 'ol/extent';\nimport { Style } from 'ol/style';\n\n// interface namedStyle {\n// styleName: string;\n// sldFeatureStyle: any;\n// }\n\n@Injectable({\n providedIn: 'root'\n})\nexport class KomponentSettingsHelperService {\n\n private readonly _httpClient = inject(HttpClient);\n\n private styles: Record<string, any> = { }; \n\n // loadNamedStyleObjects(styleNames: string[], workspace: string, geoserver: GeoServer): Observable<namedStyle[]> {\n\n // const headerstring = `${geoserver.userName}:${geoserver.password}`;\n // const encoded = btoa(headerstring); \n // const headers = new HttpHeaders().set('Authorization', `Basic ${encoded}`);\n \n\n // const result$ = styleNames.map(styleName => \n // this._httpClient.get(`${geoserver.url}/rest/workspaces/${workspace}/styles/${styleName}.sld`, { headers, responseType: 'text' })\n // .pipe(map(loadedStyle => { \n // const sldObject = SLDReader.Reader(loadedStyle);\n // const sldLayer = SLDReader.getLayer(sldObject);\n // const sldStyles = SLDReader.getStyle(sldLayer);\n // const sldFeatureStyle = sldStyles.featuretypestyles[0];\n // return { styleName, sldFeatureStyle } as namedStyle\n // })));\n // return combineLatest(result$);\n // }\n\n private _getSldStyleObject$(styleName: string, workspace: string, geoserver: GeoServer): Observable<any> {\n return this.styles[styleName] ? of(this.styles[styleName]) :\n this._loadStyleFromGeoServer$(styleName, workspace, geoserver)\n .pipe(\n tap(loadedStyle => { \n this.styles[styleName] = loadedStyle; } \n ));\n }\n\n private _loadStyleFromGeoServer$(styleName: string, workspace: string, geoserver: GeoServer): Observable<any> {\n const headerstring = `${geoserver.userName}:${geoserver.password}`;\n const encoded = btoa(headerstring); \n const headers = new HttpHeaders().set('Authorization', `Basic ${encoded}`);\n const url = `${geoserver.url}/rest/workspaces/${workspace}/styles/${styleName}.sld`;\n return this._httpClient.get(url, { headers, responseType: 'text' }).pipe(map(loadedStyle => {\n const sldObject = SLDReader.Reader(loadedStyle);\n const sldLayer = SLDReader.getLayer(sldObject);\n const sldStyles = SLDReader.getStyle(sldLayer);\n const sldFeatureStyle = sldStyles.featuretypestyles[0];\n return sldFeatureStyle; \n }));\n\n }\n\n getStyle(styleName: string, workspace: string, geoserver: GeoServer, styleType: string): Observable<Style> {\n\n return this._getSldStyleObject$(styleName, workspace, geoserver)\n .pipe(map(loadedStyle => {\n return SLDReader.createOlStyle(loadedStyle.rules[0], styleType) as Style\n }\n ));\n }\n}","import { Injectable } from '@angular/core';\nimport Feature from 'ol/Feature';\nimport VectorSource from 'ol/source/Vector';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DrawLayerSourceService {\n\n private _features = new Subject<Feature[]>;\n features$ = this._features.asObservable();\n source: VectorSource;\n private _disabled = false;\n constructor() {\n this.source = new VectorSource();\n this._initListener();\n }\n\n private _initListener(): void {\n this.source.on(['addfeature', 'changefeature', 'removefeature'], evt => {\n if (this._disabled) { return; }\n const features = this.source.getFeatures();\n this._features.next(features);\n });\n \n }\n\n get allFeatures(): Feature[] {\n return this.source.getFeatures().map(f => { \n // I want a static copy of the features. \n const newFeature = f.clone(); \n // But cloning doesn't include the id and that is used for referencing a few places.\n newFeature.setId(f.getId());\n return newFeature;\n }); \n }\n\n remove(id: string | number): void {\n const feature = this.source.getFeatureById(id);\n if (feature) {\n this.source.removeFeature(feature);\n }\n }\n\n setFeatures(features: Feature[]) {\n this._disabled = true;\n this.source.clear();\n this.source.addFeatures(features.map(f => {\n const newFeature = f.clone();\n newFeature.setId(f.getId())\n return newFeature;\n }));\n this._features.next(features);\n this._disabled = false;\n }\n}","import { Injectable } from '@angular/core';\nimport Feature from 'ol/Feature';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FeatureHelperService {\n private readonly FEATURE_TYPE_ID = 'TypeId';\n private readonly FEATURE_LOCKED = 'LOCKED';\n\n private _idCounter = 0;\n\n isLocked = (feature: Feature) => feature.get(this.FEATURE_LOCKED) === 'true';\n lock(feature: Feature): void { feature.set(this.FEATURE_LOCKED, 'true'); }\n\n setTypeId(feature: Feature, typeId: string): void {\n feature.set(this.FEATURE_TYPE_ID, typeId); \n }\n\n typeId = (feature: Feature) => feature.get(this.FEATURE_TYPE_ID) as string;\n\n setId(feature: Feature): void {\n if (!feature.getId()) {\n feature.setId(this._idCounter++);\n }\n }\n}","import { Injectable } from '@angular/core';\nimport Feature from 'ol/Feature';\nimport { DrawLayerSourceService } from './drawLayerSource.service';\nimport { filter } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UndoRedoService {\n \n constructor(private _drawlayerSourceService: DrawLayerSourceService) {}\n\n\n disable(): void {\n this._enabled = false;\n }\n\n enable(): void {\n this._enabled = true;\n }\n\n private _steps: Feature[][] = [];\n private _currentStep = 0;\n private _changing = false;\n private _enabled = true;\n\n init(): void {\n this._steps[0] = this._drawlayerSourceService.allFeatures;\n // For every change, add the current state\n this._drawlayerSourceService.features$.pipe(filter(() => this._enabled)).subscribe({\n next: () => {\n if (this._changing) {\n this._changing = false;\n return;\n }\n this._steps = [...this._steps.slice(0, this._currentStep + 1), this._drawlayerSourceService.allFeatures]\n this._currentStep++;\n }\n });\n }\n\n get canUndo(): boolean { \n return this._currentStep > 0;\n }\n\n get canRedo(): boolean {\n return this._currentStep < this._steps.length - 1;\n }\n\n undo(): void {\n if (this.canUndo) {\n this._changing = true;\n this._currentStep--;\n const features = this._steps[this._currentStep];\n this._drawlayerSourceService.setFeatures(features);\n }\n }\n\n redo(): void {\n if (this.canRedo) {\n this._changing = true;\n this._currentStep++;\n const features = this._steps[this._currentStep];\n this._drawlayerSourceService.setFeatures(features);\n }\n }\n\n reset(): void {\n this._changing = true;\n if (this._currentStep === 0) { return; }\n const features = this._steps[0];\n this._drawlayerSourceService.setFeatures(features);\n }\n}","import { inject, Injectable } from '@angular/core';\nimport { Feature } from 'ol';\n\nimport { Vector as VectorSource } from 'ol/source';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport { LineString, Polygon as olPolygon, MultiPolygon as olMultiPolygon } from 'ol/geom';\nimport { buffer, difference, featureCollection } from '@turf/turf';\nimport { Polygon, Feature as TurfFeature, LineString as TurfLineString } from 'geojson';\nimport proj4 from 'proj4';\nimport { FeatureHelperService } from './featureHelper.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GeometrySplitService {\n private geoJsonFormat = new GeoJSON<Feature<olPolygon>>();\n\n private _featureHelper = inject(FeatureHelperService);\n\n /**\n * Split polygons in a vector source using a buffered LineString.\n * @param lineFeature The drawn LineString feature.\n * @param vectorSource The source containing polygons to split.\n * @param bufferMeters Width of the buffer in meters (default: 1).\n */\n splitPolygonsWithBufferedLine(lineFeature: Feature<LineString>, vectorSource: VectorSource, bufferMeters: number = 1): void {\n\n const lineGeoJSON = this.geoJsonFormat.writeFeatureObject(lineFeature) as TurfFeature<TurfLineString>;\n // the buffer functions uses 4326 and makes a mess if you don't convert the projection\n lineGeoJSON.geometry.coordinates = lineGeoJSON.geometry.coordinates.map(c => proj4('EPSG:25832', 'EPSG:4326', c));\n\n // Buffer the line to create a narrow polygon\n const bufferedLine = buffer(lineGeoJSON, bufferMeters, { units: 'meters'}) as TurfFeature<Polygon>;\n // Move back to 25832 \n bufferedLine.geometry.coordinates = bufferedLine.geometry.coordinates.map(a => a.map(c => proj4('EPSG:4326','EPSG:25832', c)));\n const overlappingFeatures = vectorSource.getFeatures().filter(f =>\n f.getGeometry()?.intersectsExtent(lineFeature.getGeometry()?.getExtent()!)\n );\n\n overlappingFeatures.forEach((feature) => {\n const overlappingFeatureGeoJson = this.geoJsonFormat.writeFeatureObject(feature);\n\n const features = featureCollection([overlappingFeatureGeoJson, bufferedLine!]);\n const clipped = difference(features as any);\n\n // If the result is not a MultiPolygon, the polygon was not clipped in two. In that case, I will do nothing.\n if (clipped && clipped.geometry.type === 'MultiPolygon') {\n vectorSource.removeFeature(feature);\n \n const multipolygon = this.geoJsonFormat.readGeometry(clipped.geometry) as olMultiPolygon; \n const polygons = multipolygon.getPolygons();\n\n const newFeatures = polygons.map(p => {\n const newFeature = feature.clone();\n newFeature.setGeometry(p);\n this._featureHelper.setId(newFeature);\n return newFeature;\n });\n vectorSource.addFeatures(newFeatures);\n }\n });\n }\n\n // dimsedims(vectorSource: VectorSource, feature: Feature,): void {\n\n // const overlappingFeatures = vectorSource.getFeatures().filter(f => f.getGeometry()?.intersectsExtent(feature.getGeometry()!.getExtent()));\n // // const geoJsonFormat = new GeoJSON<Feature<Polygon>>();\n // let holeGeoJson = this.geoJsonFormat.writeFeatureObject(feature);\n // overlappingFeatures.forEach(f => {\n // const overlappingFeatureGeoJson = this.geoJsonFormat.writeFeatureObject(f);\n // // because the difference function takes featurecollection, I add the two features to a collection\n // // I have to cast this as any, because the featurecollection needs to be of Polygon or MultiPoly and it\n // // doesnt resolve to that.\n // if (holeGeoJson.geometry.type === 'LineString') { \n // holeGeoJson.geometry.coordinates = holeGeoJson.geometry.coordinates.map(c => proj4('EPSG:25832', 'EPSG:4326', c));\n // holeGeoJson = buffer(holeGeoJson, 0.001 , { units: 'metres' })!;\n // if (holeGeoJson.geometry.type === 'Polygon') {\n // holeGeoJson.geometry.coordinates = holeGeoJson.geometry.coordinates.map(a => a.map(c => proj4('EPSG:4326','EPSG:25832', c)));\n // }\n \n\n // }\n // console.log(\"🚀 ~ GeometrySplitTurfService ~ dimsedims ~ holeGeoJson:\", holeGeoJson)\n // const features = featureCollection([overlappingFeatureGeoJson, holeGeoJson]) as any;\n // const clipped = difference(features);\n // if (clipped) {\n // const geom = this.geoJsonFormat.readGeometry(clipped.geometry);\n // f.setGeometry(geom);\n // }\n // });\n // }\n}","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { LineString, Point, Polygon } from 'ol/geom';\nimport { getLength, getArea } from 'ol/sphere'\nimport Draw, { DrawEvent } from 'ol/interaction/Draw'\nimport VectorLayer from 'ol/layer/Vector';\nimport { Interaction, Modify, Select } from 'ol/interaction'\nimport Map from 'ol/Map';\nimport VectorSource from 'ol/source/Vector';\nimport { Fill, Stroke, Style, Text } from 'ol/style';\nimport { geometryType, GeometryTypeSetting, GisKomponentSettings } from '../../models/GisKomponentSettings';\nimport { MatSelectChange, MatSelectModule } from '@angular/material/select';\nimport { MatOptionModule } from '@angular/material/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { KomponentSettingsHelperService } from '../../services/komponentSettingsHelper.service';\nimport WKT from 'ol/format/WKT';\nimport { IProfileDetailed } from '../../models/IProfile';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { buffer } from 'ol/extent';\nimport Feature from 'ol/Feature';\nimport { DrawLayerSourceService } from '../../services/drawLayerSource.service';\nimport { FeatureHelperService } from '../../services/featureHelper.service';\nimport { UndoRedoService } from '../../services/UndoRedo.service';\nimport { always, never } from 'ol/events/condition';\nimport { difference, featureCollection, lineSplit } from '@turf/turf';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { GeometrySplitService } from '../../services/geometri-split.service';\n\n@Component({\n selector: 'map-toolbox',\n styleUrl: './toolbox.component.scss',\n templateUrl: './toolbox.component.html',\n imports: [FormsModule, CommonModule, MatIconModule, MatOptionModule, MatSelectModule, DragDropModule, MatTooltipModule] \n})\nexport class ToolboxComponent implements OnInit {\n\n // Inputs\n @Input({ required: true }) map!: Map;\n @Input() showMeasureDistance = true;\n @Input() showMeasureArea = true;\n @Input() collapsed = false;\n @Input({ required: true}) settings!: GisKomponentSettings;\n @Input({ required: true }) profile!: IProfileDetailed;\n @Input() WKTInputEnabled?: boolean = false;\n @Input() deleteEnabled?: boolean = false;\n // Injects\n private _snackbar = inject(MatSnackBar);\n private _settingsHelper = inject(KomponentSettingsHelperService);\n private _drawLayerService = inject(DrawLayerSourceService);\n private _featureHelper = inject(FeatureHelperService);\n private _undoRedo = inject(UndoRedoService);\n private _geomSplitService = inject(GeometrySplitService);\n selectedGeometrySetting: GeometryTypeSetting | undefined = undefined;\n\n showInputWKT: boolean = false;\n WKTString?: string;\n activateShowInputWKT(): void {\n this._clearAllInteractions(); \n this.showInputWKT = true;\n }\n\n cancelWKT(): void {\n this._clearAllInteractions();\n this.showInputWKT = false;\n }\n\n settingsChanged(evt: MatSelectChange): void {\n this._clearAllInteractions();\n }\n\n private _activeFeaturesSource = new VectorSource();\n private _activeArea: VectorLayer | undefined;\n\n undo(): void {\n this._undoRedo.undo();\n }\n\n redo(): void {\n this._undoRedo.redo();\n } \n\n ReadWKT(): void {\n this._clearAllInteractions();\n this._setupActiveLayer();\n if (!this.WKTString) { return; }\n const wktFormat = new WKT();\n try {\n\n const feature = wktFormat.readFeature(this.WKTString, { featureProjection: 'EPSG:25832', dataProjection: 'EPSG:25832' });\n const featureType = feature.getGeometry()?.getType();\n if (!this.selectedGeometrySetting?.availableGeometryTypes?.some(g => g === featureType)) {\n this._snackbar.open(`Den WKT du indlæser er af typen ${featureType} og det er ikke tilladt for denne indstilling`, '', { duration: 4000 });\n return;\n }\n this._settingsHelper.getStyle(this.selectedGeometrySetting!.style, this.profile.styleRepositoryWorkspace!, this.profile.styleRepositoryGeoserver!, featureType!).subscribe({\n next: featureStyle => {\n feature.setStyle(featureStyle);\n this._featureHelper.setTypeId(feature, this.selectedGeometrySetting?.typeId || '')\n this._activeFeaturesSource.addFeature(feature);\n const extent = buffer(feature.getGeometry()!.getExtent(), 10);\n this.map.getView().fit(extent);\n }\n })\n } catch (ex) {\n this._snackbar.open(`WKT kunne ikke indlæses - den er muligvis ikke formatteret korrekt`, '', { duration: 4000 });\n }\n }\n\n private _drawLayer: VectorLayer | undefined;\n private _drawPolygon = new Draw({\n type: 'Polygon',\n source: this._drawLayerService.source\n });\n \n private _actionSource = new VectorSource();\n clipHole(): void {\n this._clearAllInteractions();\n const clipHoleDraw = new Draw({\n source: this._actionSource,\n type: 'Polygon' \n });\n this._setAsTemp(clipHoleDraw);\n clipHoleDraw.on('drawend', evt => {\n \n const overlappingFeatures = this._drawLayerService.source.getFeatures().filter(f => f.getGeometry()?.intersectsExtent(evt.feature.getGeometry()!.getExtent()));\n const geoJsonFormat = new GeoJSON<Feature<Polygon>>();\n const holeGeoJson = geoJsonFormat.writeFeatureObject(evt.feature);\n overlappingFeatures.forEach(f => {\n const overlappingFeatureGeoJson = geoJsonFormat.writeFeatureObject(f);\n // because the difference function takes featurecollection, I add the two features to a collection\n // I have to cast this as any, because the featurecollection needs to be of Polygon or MultiPoly and it\n // doesnt resolve to that.\n const features = featureCollection([overlappingFeatureGeoJson, holeGeoJson]) as any;\n const clipped = difference(features);\n if (clipped) {\n const geom = geoJsonFormat.readGeometry(clipped.geometry);\n f.setGeometry(geom);\n }\n });\n });\n\n this.map.addInteraction(clipHoleDraw);\n }\n\n split(): void {\n this._clearAllInteractions();\n const splitInteraction = new Draw({\n type: 'LineString',\n source: this._actionSource\n });\n this._setAsTemp(splitInteraction);\n splitInteraction.on('drawend', evt => {\n this._geomSplitService.splitPolygonsWithBufferedLine(evt.feature as Feature<LineString>, this._drawLayerService.source, 0.01);\n });\n this.map.addInteraction(splitInteraction);\n }\n\n startDrawPoint(): void {\n this._startDraw('Point');\n }\n\n startDrawLineString() {\n this._startDraw('LineString');\n }\n\n startDrawPolygon(): void {\n this._startDraw('Polygon');\n }\n\n private _deleteSelect: Select | undefined;\n private get deleteSelect(): Select {\n if (this._deleteSelect) return this._deleteSelect; \n this._deleteSelect = new Select({ \n layers: [this._drawLayer! ],\n style: null, // ABSOLUTELY leave this as null! If not, select fires a change, because it applies a change of styling. LEAVE IT!\n filter: feature => !this._featureHelper.isLocked(feature)\n });\n this._setAsTemp(this.deleteSelect);\n this.deleteSelect.on('select', evt => {\n this._drawLayerService.source.removeFeatures(evt.selected)\n })\n return this._deleteSelect;\n }\n \n private _setAsTemp(interaction: Interaction): void {\n interaction.set('temp', 'true');\n }\n\n private _deleting: boolean = false;\n startDelete(): void {\n this._clearAllInteractions();\n this._deleting = true; \n this.map.addInteraction(this.deleteSelect);\n }\n\n startEditRemovePoints(): void {\n this._clearAllInteractions();\n const modifyRemove = new Modify({\n source: this._drawLayerService.source,\n // Make sure delete is allowed and other interactions are not.\n deleteCondition: always,\n insertVertexCondition: never\n });\n\n this._setAsTemp(modifyRemove); \n this.map.addInteraction(modifyRemove);\n }\n\n startEdit(): void {\n this._clearAllInteractions();\n const modify = new Modify({ \n source: this._drawLayerService.source,\n // No delete\n deleteCondition: () => false,\n // Allow moving existing and add new points\n condition: always, \n insertVertexCondition: always, \n });\n /* Modify fires changes to features a LOT, so to not flood the UndoRedo service, I disable until ending the modify\n and then force an update, to add the updated feature to the undo-service. */\n modify.on('modifystart', () => this._undoRedo.disable());\n modify.on('modifyend', (evt) => { this._undoRedo.enable(); evt.features.forEach(f => f.set('updated', new Date().toISOString() )) });\n \n this._setAsTemp(modify); \n this.map.addInteraction(modify);\n }\n \n private _startDraw(geomType: geometryType): void {\n this._clearAllInteractions();\n if (!this.selectedGeometrySetting) { return; }\n this._settingsHelper.getStyle(this.selectedGeometrySetting.style, this.profile.styleRepositoryWorkspace!, this.profile.styleRepositoryGeoserver!, geomType)\n .subscribe({\n next: style => { \n const drawLineString = new Draw({\n type: geomType, \n source: this._drawLayerService.source,\n style: style \n });\n drawLineString.on('drawend', evt => {\n this._featureHelper.setTypeId(evt.feature, this.selectedGeometrySetting?.typeId || '');\n this._featureHelper.setId(evt.feature);\n evt.feature.setStyle(style);\n });\n this._setAsTemp(drawLineString);\n this._setDrawLayer()\n this.map.addInteraction(drawLineString); \n this.map.getTargetElement().style.cursor = 'crosshair'; // Placeholder for now\n }\n })\n }\n\n\n private _clearDrawInteractions(): void {\n this.map.getTargetElement().style.cursor = '';\n this.map.getInteractions().forEach(i => {\n if (i.get('temp') === 'true') {\n this.map.removeInteraction(i);\n }\n });\n }\n\n compareGeometrySetting = (g1: GeometryTypeSetting, g2: GeometryTypeSetting) => g1 && g2 && g1.typeId === g2.typeId;\n\n private _areaSource = new VectorSource();\n private _areaLayer = new VectorLayer({\n source: this._areaSource,\n style: (feature) => {\n const geom = feature.getGeometry() as Polygon;\n const area = getArea(geom);\n const formattedArea = area > 1000000 ? `${(area / 1000000).toFixed(2)} km2` : `${area.toFixed(2)} m2`\n return new Style({\n stroke: new Stroke({\n color: 'blue',\n width: 2\n }),\n fill: new Fill({\n color: 'grey'\n }),\n text: new Text({\n text: formattedArea,\n font: '12px Calibri,sans-serif',\n fill: new Fill({ color: '#000' }),\n stroke: new Stroke({ color: '#fff', width: 3 }),\n placement: 'line'\n })\n });\n }\n })\n\n private _distanceLabelSource = new VectorSource();\n private _distanceLabelLayer = new VectorLayer({\n source: this._distanceLabelSource,\n style: (feature) => {\n return new Style({\n text: new Text({\n text: feature.get('label'),\n font: '12px Calibri,sans-serif',\n fill: new Fill({ color: '#000' }),\n stroke: new Stroke({ color: '#fff', width: 3 })\n })\n });\n }\n });\n\n\n private _distanceSource = new VectorSource();\n private _distanceLayer = new VectorLayer({\n source: this._distanceSource,\n style: (feature) => {\n const geom = feature.getGeometry() as LineString;\n const length = getLength(geom);\n const formattedLength = `${length.toFixed(2)} m`\n return new Style({\n stroke: new Stroke({\n color: 'blue',\n width: 2\n }),\n text: new Text({\n text: formattedLength,\n font: '12px Calibri,sans-serif',\n fill: new Fill({ color: '#000' }),\n stroke: new Stroke({ color: '#fff', width: 3 }),\n placement: 'line'\n })\n });\n }\n })\n\n private _distanceMeasureDraw = new Draw({\n type: 'LineString',\n source: this._distanceLayer.getSource()!,\n });\n\n\n\n private _areaMeasureDraw = new Draw({\n type: 'Polygon',\n source: this._areaSource\n })\n private _active: 'No' | 'Area' | 'Distance' = 'No';\n\n private _setupActiveLayer(): void {\n if (!this._activeArea) {\n this._activeArea = new VectorLayer({\n source: this._activeFeaturesSource\n });\n this.map.addLayer(this._activeArea);\n }\n }\n\n constructor() {\n\n // TODO: Move out from constructor\n // In order to add the distance to each segment of the distance measure feature, we need some extra handling like this.\n this._distanceMeasureDraw.on('drawstart', (evt: DrawEvent) => {\n\n const sketch = evt.feature as Feature;\n\n sketch.getGeometry()!.on('change', (geomEvt) => {\n const geom = geomEvt.target as LineString;\n const coords = geom.getCoordinates();\n\n this._distanceLabelSource.clear(); // Clear existing labels for each change\n\n let totalLength = 0;\n\n for (let i = 0; i < coords.length - 1; i++) {\n const c1 = coords[i];\n const c2 = coords[i + 1];\n const segment = new LineString([c1, c2]);\n const length = getLength(segment);\n totalLength += length;\n\n const mid = [(c1[0] + c2[0]) / 2, (c1[1] + c2[1]) / 2];\n const formatted = `${length.toFixed(2)} m`; \n\n const labelFeature = new Feature({\n geometry: new Point(mid),\n label: formatted\n });\n\n this._distanceLabelSource.addFeature(labelFeature);\n }\n\n // Add total length at the last point\n if (coords.length > 1) {\n const endPoint = coords[coords.length - 1];\n const formattedTotal = `${totalLength.toFixed(2)} m`;\n\n const totalFeature = new Feature({\n geometry: new Point(endPoint),\n label: `Total: ${formattedTotal}`\n });\n\n this._distanceLabelSource.addFeature(totalFeature);\n }\n });\n });\n }\n\n private _clearAllInteractions(): void {\n this.stopMeasureArea();\n this.stopMeasureLength();\n this._deleting = false;\n this._clearDrawInteractions();\n this._undoRedo.enable();\n }\n\n private _setDrawLayer(): void {\n if (!this._drawLayer) {\n this._drawLayer = new VectorLayer({\n source: this._drawLayerService.source, \n // source: this._drawLayerSource, \n });\n this._drawLayer.set('DRAWLAYER', 'true');\n this.map.addLayer(this._drawLayer);\n this._setupMouseStyleCursor();\n }\n }\n\n ngOnInit(): void {\n if (this.settings.geometryTypeSettings && this.settings.geometryTypeSettings.length === 1) {\n this.selectedGeometrySetting = this.settings.geometryTypeSettings![0];\n }\n this._drawPolygon.on('drawend', evt => {\n this._featureHelper.setTypeId(evt.feature, this.selectedGeometrySetting?.typeId || '');\n });\n }\n\n private _setupMouseStyleCursor(): void {\n this.map.on('pointermove', (evt) => {\n const pixel = this.map.getEventPixel(evt.originalEvent);\n const feature = this.map.forEachFeatureAtPixel(pixel, (f) => f, { \n layerFilter: (layer) => { \n return layer.get('DRAWLAYER') === 'true'; \n }\n });\n\n const cursor = feature && this._deleting && !feature.get('LOCKED') ? 'crosshair' : ''; // TODO: Set actual style for delete\n this.map.getTargetElement().style.cursor = cursor;\n });\n\n }\n\n toggleCollapsed(): void {\n this.collapsed = !this.collapsed;\n if (this.collapsed) {\n this.stopMeasureArea();\n this.stopMeasureLength();\n }\n }\n\n startMeasureArea(): void {\n if (this._active === 'Area') {\n this.stopMeasureArea();\n this._active = 'No'\n return;\n }\n // this.geometryTypeSettings \n this._clearDrawInteractions();\n this.stopMeasureLength();\n this.map.addLayer(this._areaLayer);\n this.map.addInteraction(this._areaMeasureDraw);\n this._active = 'Area'\n }\n\n stopMeasureArea(): void {\n this.map.getTargetElement().style.cursor = '';\n this._areaSource.clear();\n this.map.removeInteraction(this._areaMeasureDraw);\n this.map.removeLayer(this._areaLayer);\n }\n\n stopMeasureLength(): void {\n this.map.getTargetElement().style.cursor = '';\n this._distanceSource.clear();\n this._distanceLabelSource.clear();\n this.map.removeInteraction(this._distanceMeasureDraw);\n this.map.removeLayer(this._distanceLayer);\n this.map.removeLayer(this._distanceLabelLayer);\n\n }\n\n startMeasureLength(): void { \n if (this._active === 'Distance') {\n this.stopMeasureLength();\n this._active = 'No';\n return;\n }\n this._clearAllInteractions();\n this.map.addLayer(this._distanceLayer);\n this.map.addLayer(this._distanceLabelLayer);\n this.map.addInteraction(this._distanceMeasureDraw);\n this._active = 'Distance';\n }\n}","<div class=\"toolbox-wrapper\" cdkDrag cdkDragBoundary=\".map-container\">\n <div class=\"drag-handle-toolbox\" cdkDragHandle>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"toolbox-container\">\n <mat-icon class=\"toggle-icon\" (click)=\"toggleCollapsed()\">{{ collapsed ? 'expand_more' : 'expand_less' }}</mat-icon>\n @if(!collapsed) {\n <div class=\"toolbox-content\">\n @if (settings.geometryTypeSettings && settings.geometryTypeSettings.length) {\n <mat-select class=\"geometry-selector\" (selectionChange)=\"settingsChanged($event)\" [(ngModel)]=\"selectedGeometrySetting\" [compareWith]=\"compareGeometrySetting\">\n @for (setting of settings.geometryTypeSettings; track setting) {\n <mat-option [value]=\"setting\">{{setting.typeName}}</mat-option>\n }\n </mat-select> \n }\n <mat-icon class=\"compact-icon\" (click)=\"undo()\" matTooltip=\"Fortryd\" matTooltipPosition=\"right\">undo</mat-icon>\n <mat-icon class=\"compact-icon\" (click)=\"redo()\" matTooltip=\"Gentag\" matTooltipPosition=\"right\">redo</mat-icon>\n @if(settings.editEnabled) {\n <mat-icon class=\"compact-icon\" (click)=\"startEdit()\" matTooltip=\"Rediger\" matTooltipPosition=\"right\">edit_square</mat-icon>\n <mat-icon class=\"compact-icon\" (click)=\"startEditRemovePoints()\" matTooltip=\"Fjern punkter\" matTooltipPosition=\"right\">close</mat-icon>\n }\n @if(settings.cutHoleEnabled) {\n <mat-icon class=\"compact-icon\" (click)=\"clipHole()\" matTooltip=\"Klip hul\" matTooltipPosition=\"right\">restaurant</mat-icon>\n }\n @if(settings.splitEnabled) {\n <mat-icon class=\"compact-icon\" (click)=\"split()\" matTooltip=\"Skær over\" matTooltipPosition=\"right\">carpenter</mat-icon>\n }\n @if(selectedGeometrySetting && selectedGeometrySetting.availableGeometryTypes?.length) {\n <div class=\"geometry-tools\">\n @for(geomType of selectedGeometrySetting.availableGeometryTypes;track geomType) {\n @if(geomType === 'Polygon') {\n <button class=\"compact-button primary\" (click)=\"startDrawPolygon()\">Polygon</button>\n }\n @if(geomType === 'LineString') {\n <button class=\"compact-button primary\" (click)=\"startDrawLineString()\">LineString</button>\n }\n @if(geomType === 'Point') {\n <button class=\"compact-button primary\" (click)=\"startDrawPoint()\">Punkter</button>\n }\n }\n <button class=\"compact-button secondary\" (click)=\"activateShowInputWKT()\">WKT</button>\n </div>\n @if(showInputWKT) {\n <div class=\"wkt-section\">\n <input class=\"compact-input\" [(ngModel)]=\"WKTString\">\n <div class=\"wkt-actions\">\n <button class=\"compact-button primary\" (click)=\"ReadWKT()\">Indlæs WKT</button>\n <button class=\"compact-button\" (click)=\"cancelWKT()\">Annuller</button>\n </div>\n </div>\n }\n }\n <div class=\"measurement-tools\">\n @if (deleteEnabled) {\n <mat-icon class=\"compact-icon\" (click)=\"startDelete()\">delete</mat-icon>\n }\n @if (showMeasureDistance) {\n <mat-icon class=\"compact-icon\" (click)=\"startMeasureLength()\">straighten</mat-icon>\n }\n @if(showMeasureArea) {\n <mat-icon class=\"compact-icon\" (click)=\"startMeasureArea()\">square_foot</mat-icon>\n } \n </div>\n </div>\n }\n </div>\n</div>","import { Component, inject, Input } from '@angular/core';\nimport { DrawLayerSourceService } from '../../services/drawLayerSource.service';\nimport { FeatureHelperService } from '../../services/featureHelper.service';\nimport { getArea } from 'ol/sphere';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { GisKomponentSettings } from '../../models/GisKomponentSettings';\nimport Feature from 'ol/Feature';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\ninterface IFeature { \n locked: boolean;\n area: string;\n id: string | number;\n}\n\ninterface IFeatures {\n display: string;\n featureType: string;\n features: IFeature[];\n}\n\n@Component({\n selector: 'activeObjects',\n styleUrl: './activeObjects.component.scss',\n templateUrl: './activeObjects.component.html',\n imports: [CommonModule, MatExpansionModule, MatIconModule, DragDropModule]\n})\nexport class ActiveObjectsComponent {\n\n private _drawLayerService = inject(DrawLayerSourceService);\n features$ = this._drawLayerService.features$;\n collapsed = false;\n\n @Input({ required: true}) settings!: GisKomponentSettings;\n\n activeFeatures: IFeatures[] = [];\n private _featureHelper = inject(FeatureHelperService);\n constructor() {\n this.features$.subscribe({ \n next: features => {\n const featureTypes = [ ... new Set(features.map(f => this._featureHelper.typeId(f)).filter(typeId => !!typeId))];\n const featuresObj: IFeatures[] = featureTypes\n .map(ft => ({ featureType: ft, \n display: this.settings.geometryTypeSettings.find(gts => gts.typeId === ft)!.typeName,\n features: features.filter(f => this._featureHelper.typeId(f) === ft)\n .map(f => ({ id: f.getId()!, locked: this._featureHelper.isLocked(f), area: this._getAreaString(f) }))}))\n this.activeFeatures = [...featuresObj];\n }});\n }\n\n private _getAreaString(feature: Feature): string {\n if (feature.getGeometry()?.getType() !== 'Polygon') { // We only have polygon, linestring and points and only polygons have area\n return ''; \n }\n\n return this.settings.sizeInHa ? `(${(getArea(feature.getGeometry()!) /10000).toFixed(2)} ha)` : `(${getArea(feature.getGeometry()!).toFixed(2)} m2)`;\n }\n\n highlight(id: number | string): void {\n console.log(\"🚀 ~ ActiveObjectsComponent ~ highlight ~ id:\", id)\n }\n\n unhighlight(id: number | string): void {\n console.log(\"🚀 ~ ActiveObjectsComponent ~ unhighlight ~ id:\", id)\n }\n\n delete(id: string | number): void {\n this._drawLayerService.remove(id);\n this.unhighlight(id);\n }\n togglePanel(): void {\n this.collapsed = !this.collapsed;\n }\n}","<div class=\"active-objects-wrapper\" cdkDrag cdkDragBoundary=\".map-container\" [class.collapsed]=\"collapsed\">\n <div class=\"drag-handle-active-objects\" cdkDragHandle>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"active-objects-container\">\n <mat-icon class=\"toggle-icon\" (click)=\"togglePanel()\">{{ collapsed ? 'expand_more' : 'expand_less' }}</mat-icon>\n @if(!collapsed) {\n <div class=\"active-objects-content\">\n <h4>Aktive flader</h4>\n @for(featureTypeObj of activeFeatures; track featureTypeObj.featureType) {\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <span class=\"panel-title\">\n {{featureTypeObj.display}} ({{featureTypeObj.features.length}})\n </span>\n </mat-expansion-panel-header>\n <div class=\"item-list\">\n @for(item of featureTypeObj.features; track item.id) {\n <div class=\"item\" (mouseenter)=\"highlight(item.id)\" (mouseleave)=\"unhighlight(item.id)\">\n <div class=\"item-text\">\n <span class=\"item-id\">{{item.id}}</span>\n <span class=\"item-area\">{{item.area}}</span>\n </div>\n <mat-icon *ngIf=\"!item.locked\" (click)=\"delete(item.id)\">delete</mat-icon>\n </div>\n }\n </div>\n </mat-expansion-panel>\n }\n </div>\n }\n </div> \n</div>","import { Component, OnInit } from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DragDropModule, CdkDragEnd } from '@angular/cdk/drag-drop';\n\n@Component({\n selector: 'lib-map-search',\n templateUrl: './map-search.component.html',\n styleUrls: ['./map-search.component.scss'],\n imports: [\n CommonModule,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatAutocompleteModule,\n MatOptionModule,\n MatIconModule,\n DragDropModule\n ]\n})\nexport class MapSearchComponent implements OnInit {\n searchAddress: string = '';\n allResults = ['address1', 'address2', 'address3', 'address4'];\n filteredResults: string[] = [];\n collapsed = true;\n dragPosition = { x: 0, y: 0 };\n private readonly POSITION_STORAGE_KEY = 'mapSearchPosition';\n\n ngOnInit(): void {\n this.filterResults();\n this._loadPosition();\n }\n\n filterResults(): void {\n if (!this.searchAddress) {\n this.filteredResults = [];\n return;\n }\n this.filteredResults = this.allResults.filter(r =>\n r.toLowerCase().includes(this.searchAddress.toLowerCase())\n );\n }\n\n toggleSearch(): void {\n this.collapsed = !this.collapsed;\n if (this.collapsed) {\n this.searchAddress = '';\n this.filterResults();\n }\n }\n\n onDragEnded(event: CdkDragEnd): void {\n const position = event.source.getFreeDragPosition();\n this.dragPosition = position;\n this._savePosition(position);\n }\n\n private _savePosition(position: { x: number; y: number }): void {\n try {\n localStorage.setItem(this.POSITION_STORAGE_KEY, JSON.stringify(position));\n } catch (error) {\n console.error('Error saving position to localStorage:', error);\n }\n }\n\n private _loadPosition(): void {\n try {\n const savedPosition = localStorage.getItem(this.POSITION_STORAGE_KEY);\n if (savedPosition) {\n this.dragPosition = JSON.parse(savedPosition);\n }\n } catch (error) {\n console.error('Error loading position from localStorage:', error);\n this.dragPosition = { x: 0, y: 0 };\n }\n }\n}","<div class=\"search-container\" \n cdkDrag \n cdkDragBoundary=\".map-container\" \n [cdkDragFreeDragPosition]=\"dragPosition\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n [class.collapsed]=\"collapsed\">\n <div class=\"drag-handle\" cdkDragHandle>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"search-content\">\n <mat-icon class=\"toggle-icon\" (click)=\"toggleSearch()\">{{ collapsed ? 'search' : 'close' }}</mat-icon>\n @if(!collapsed) {\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <mat-icon class=\"search-icon\" matPrefix>search</mat-icon>\n <mat-label>Søge</mat-label>\n <input\n type=\"text\"\n matInput\n [(ngModel)]=\"searchAddress\"\n [matAutocomplete]=\"auto\"\n (input)=\"filterResults()\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let result of filteredResults\" [value]=\"result\">\n {{ result }}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n }\n </div>\n</div>","import { inject, Injectable } from '@angular/core';\nimport { GISKOMPONENT_CONFIG } from '../config/config';\nimport { Observable } from 'rxjs';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { ILegend } from '../models/ILegend';\nimport { PagedResult } from '../models/pagedResult';\n\nexport interface PagedFilterBase {\n take?: number,\n skip?: number, \n}\n\nexport type FilterParams = PagedFilterBase & Record<string, any>;\n@Injectable({\n providedIn: 'root'\n})\nexport class LegendService {\n\n private config = inject(GISKOMPONENT_CONFIG);\n private _baseUrl = this.config.apiBaseUrl;\n private _http = inject(HttpClient);\n\n getAll(filter?: FilterParams): Observable<PagedResult<ILegend>> {\n const params = this._getFilterParameter(filter);\n return this._http.get<PagedResult<ILegend>>(this._baseUrl + '/api/legend', { params });\n }\n\n private _getFilterParameter(params?: FilterParams): HttpParams {\n // removes empty keys and values from the params object and builds a HttpParams object from the key/value pairs\n return Object.entries(params || {})\n .filter(([key, value]) => !!key && !!value)\n .reduce((httpparams, [key, value]) => \n httpparams.set(key, value), new HttpParams() );\n }\n}","import { Component, ElementRef, inject, Input, OnInit, ViewChild } from '@angular/core';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormsModule } from '@angular/forms';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatInputModule } from '@angular/material/input';\nimport Map from 'ol/Map';\nimport ol_control_Control from 'ol/control/Control';\nimport { ILegend } from '../../models/ILegend';\nimport { FilterParams, LegendService } from '../../services/legend.service';\nimport { GISKOMPONENT_CONFIG } from '../../config/config';\n\ninterface ILegendWithUrl extends ILegend {\n imageUrl: string;\n}\n\n@Component({\n selector: 'lib-legends-list',\n templateUrl: './legends-list.component.html',\n styleUrls: ['./legends-list.component.scss'],\n imports: [ MatFormFieldModule, CommonModule, MatIconModule, FormsModule, DragDropModule, \n MatExpansionModule, MatInputModule ]\n})\nexport class LegendsListComponent implements OnInit {\n ngOnInit(): void {\n this.setFilteredLegends();\n this._initializeMapIconControl();\n }\n @ViewChild('legendsListIcon', { static: false }) set contentIcon(content: ElementRef) {\n this._legendsListIcon = content;\n }\n @ViewChild('legendsListBody', { static: false }) set contentBody(content: ElementRef) {\n this._legendsListBody = content;\n }\n @Input() map!: Map;\n searchText = '';\n filteredLegends: ILegendWithUrl[] = [];\n showList: boolean = false;\n private config = inject(GISKOMPONENT_CONFIG);\n private _baseUrl = this.config.apiBaseUrl;\n private _legendsListIcon!: ElementRef;\n private _legendsListIconControl!: ol_control_Control;\n private _legendsListBody!: ElementRef;\n private _legendsListBodyControl!: ol_control_Control;\n private readonly _legendService: LegendService = inject(LegendService);\n\n setFilteredLegends(): void {\n const filter: FilterParams = { filter: this.searchText};\n this._legendService.getAll(filter)\n .subscribe(legends => {\n this.filteredLegends = legends.items.map(l => ({... l, imageUrl: l.imageName ? this._getImageUrl(l.imageName) : l.imageExternalURL ?? ''}));\n })\n }\n\n toggleLegendsList(): void {\n this.showList = !this.showList;\n if (this.showList) {\n this._addMapBodyControl();\n } else {\n this._removeMapBodyControl();\n }\n }\n\n clearSearchText(): void {\n this.searchText = '';\n this.setFilteredLegends();\n }\n\n private _initializeMapIconControl(): void {\n this.map.removeControl(this._legendsListIconControl);\n const element = this._legendsListIcon.nativeElement;\n this._legendsListIconControl = new ol_control_Control({ element: element });\n this.map.addControl(this._legendsListIconControl);\n }\n\n private _getImageUrl(fileName: string): string {\n return `${this._baseUrl}/api/image/${fileName}`;\n }\n\n private _addMapBodyControl(): void {\n this.map.removeControl(this._legendsListBodyControl);\n const element = this._legendsListBody.nativeElement;\n this._legendsListBodyControl = new ol_control_Control({ element: element });\n this.map.addControl(this._legendsListBodyControl);\n }\n\n private _removeMapBodyControl(): void {\n this.map.removeControl(this._legendsListBodyControl);\n }\n}\n","<div #legendsListIcon class=\"ol-unselectable ol-control legends-list-icon\">\n <mat-icon (click)=\"toggleLegendsList()\">area_chart</mat-icon>\n</div>\n<div #legendsListBody [class.display-none]=\"!showList\" class=\"legends-list-body-wrapper\" cdkDrag cdkDragBoundary=\".map-container\">\n <div class=\"drag-handle-selector\" cdkDragHandle>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"ol-unselectable ol-control legends-list-body\">\n <div class=\"search-section\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Filtrer</mat-label>\n <input \n matInput \n type=\"text\" \n [(ngModel)]=\"searchText\" \n (ngModelChange)=\"setFilteredLegends()\"\n placeholder=\"Skriv for at filtrere...\"\n />\n </mat-form-field>\n <mat-icon (click)=\"clearSearchText()\">undo</mat-icon>\n </div>\n \n <div class=\"item-list\">\n @for (legend of filteredLegends; track legend.id; let gIndex = $index) {\n <div class=\"legend\">\n <span>\n <img [src]=\"legend.imageUrl\" class=\"legend-thumbnail\" /> {{ legend.name}} ({{ legend.layerCount}})\n </span>\n </div>\n }\n </div>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, inject, Input, input, OnInit, ViewChild } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport Map from 'ol/Map';\nimport View from 'ol/View';\nimport TileLayer from 'ol/layer/Tile';\nimport ol_layer_Vector from 'ol/layer/Vector';\nimport VectorSource from 'ol/source/Vector';\nimport ImageWMS from 'ol/source/ImageWMS';\nimport WMTSCapabilities from 'ol/format/WMTSCapabilities';\nimport Draw from 'ol/interaction/Draw';\nimport Translate from 'ol/interaction/Translate';\nimport ImageLayer from 'ol/layer/Image';\nimport { ProfileService } from '../../services/profile.service';\nimport LayerGroup from 'ol/layer/Group';\nimport { IKeyValue, ILayer } from \"../../models/ILayer\";\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatListModule } from '@angular/material/list';\nimport { HttpClient } from '@angular/common/http';\nimport ol_control_mouse from 'ol/control/MousePosition';\nimport ol_control_scale from 'ol/control/ScaleLine';\nimport BaseLayer from 'ol/layer/Base';\nimport { register } from 'ol/proj/proj4';\nimport proj4 from 'proj4';\nimport { LogoControl } from '../../controls/LogoControl/logoControl';\nimport { CopyrightControl } from '../../controls/CopyrightControl/copyRightControl';\nimport { TileWMS } from 'ol/source';\nimport { combineLatest, map, Observable, of } from 'rxjs';\nimport WMTS, { optionsFromCapabilities } from 'ol/source/WMTS';\nimport { LayerHelperService } from '../../services/layerHelper.service';\nimport { IProfile, IProfileDetailed } from '../../models/IProfile';\nimport { Profile } from '../../models/profile';\nimport { LayerSelectorComponent } from \"../layer-selector/layer-selector.component\";\nimport { GisKomponentSettings } from '../../models/GisKomponentSettings';\nimport { KomponentSettingsHelperService } from '../../services/komponentSettingsHelper.service';\nimport 'ol/ol.css';\nimport MapEvent from 'ol/MapEvent';\nimport { Control } from 'ol/control';\nimport { ToolboxComponent } from '../toolbox/toolbox.component';\nimport { ActiveObjectsComponent } from '../active-objects/activeObjects.component';\nimport { UndoRedoService } from '../../services/UndoRedo.service';\nimport { LayerErrorService } from '../../services/layerError.service';\nimport { MapSearchComponent } from \"../map-search/map-search.component\";\nimport { LegendsListComponent } from \"../legends-list/legends-list.component\";\n\n@Component({\n selector: 'gis-komponent',\n templateUrl: './gis-komponent.component.html',\n styleUrls: ['./gis-komponent.component.scss'],\n imports: [CommonModule, MatIconModule, MatListModule, MatSelectModule, LayerSelectorComponent, MapSearchComponent, ToolboxComponent, ActiveObjectsComponent, LegendsListComponent],\n providers: [LayerHelperService]\n})\nexport class GisKomponentComponent implements OnInit {\n\n private readonly _profileService = inject(ProfileService);\n private readonly _undoRedo = inject(UndoRedoService);\n private readonly _http = inject(HttpClient);\n private readonly _layerHelper = inject(LayerHelperService);\n private readonly _layerErrorService = inject(LayerErrorService);\n @Input() identifier!: string;\n @Input() settings: GisKomponentSettings | undefined;\n @ViewChild('toolbarRef', { static: true }) toolbarRef!: ElementRef;\n @ViewChild('activeObjectsRef', {static: true }) activeObjectsRef!: ElementRef;\n map!: Map;\n toolbarCollapsed = false;\n layerPanelCollapsed = false;\n activeObjectsCollapsed = false;\n conflictsCollapsed = false;\n showConflicts = false;\n showObjects = false;\n showActiveObjects = false;\n profiles: IProfile[] = [];\n selectedProfile!: IProfileDetailed;\n showToolbar = false;\n private readonly _komponentSettingsHelper = inject(KomponentSettingsHelperService);\n\n layers: { name: string, visible: boolean, activeInSelector: boolean, legendUrl: string }[] = [];\n\n\n private source = new VectorSource({ wrapX: false});\n private layer = new ol_layer_Vector({ source: this.source});\n private draw = new Draw({ source: this.source, type: 'Polygon'});\n private move = new Translate({ layers: [this.layer] });\n private mousePositionCtrl = new ol_control_mouse({ projection: 'EPSG:25832' }); \n private onMoveEndCheckZoomFunction: ((event: MapEvent) => void) = () => {};\n currentZoomLevel: number = 0;\n private scaleCtrl = new ol_control_scale({\n units: 'metric',\n bar: true,\n steps: 4,\n text: true,\n minWidth: 120\n });\n \n profileSelected(profileIdentifier: string): void {\n this._profileService.getByIdentifier(profileIdentifier).subscribe({\n next: profile => { \n this.selectedProfile = profile; \n const view: View = new View({\n center: [profile.centerX, profile.centerY],\n extent: [profile.minX, profile.minX, profile.maxX, profile.maxY],\n zoom: profile.zoom ?? 8,\n maxZoom: profile.maxZoom ?? undefined,\n minZoom: profile.minZoom ?? undefined,\n projection: 'EPSG:25832'\n });\n\n this.currentZoomLevel = profile.zoom ?? 8;\n\n this._getCapabilitiesObject(profile).subscribe({\n next: capabilityObject => { \n const layers: BaseLayer[] = [...profile.layerGroups.map((lg: { layers: any[]; id: number; }) => \n new LayerGroup({\n layers: lg.layers\n .filter(layer => layer.activeInSelector)\n .sort((a, b) => a.sortOrder - b.sortOrder)\n .map((l, index) => this._mapLayer(l, capabilityObject, 'EPSG:25832', lg.id, index)) // for now, we default to EPSG:25832. \n })\n )\n ];\n this.map.setLayers(layers);\n this._layerHelper.applyCachedLayersToDisplayInMap(this.map, profile.id);\n }\n });\n \n const toolbarControl = new Control({\n element: this.toolbarRef.nativeElement\n });\n \n if (profile.showToolbar) {\n this.showToolbar = true;\n this.map.addControl(toolbarControl);\n }\n\n this.showActiveObjects = true;\n const activeObjectsControl = new Control({\n element: this.activeObjectsRef.nativeElement\n });\n this.map.addControl(activeObjectsControl);\n\n this._handleShowMouseCoordinates(profile.showCoordinates);\n this._handleShowScale(profile.showScale);\n this._setLogo(profile.logoUrl);\n this._setCopyRight(profile.copyrightMessage);\n this.map.setView(view);\n this.onMoveEndCheckZoomFunction = () => {\n this._checkZoom(this.map);\n };\n this.map.on('moveend', this.onMoveEndCheckZoomFunction);\n this._undoRedo.init();\n }}); \n }\n\n private _checkZoom(map: Map) : void {\n this.currentZoomLevel = map.getView().getZoom() ?? this.currentZoomLevel;\n }\n\n private _getCapabilitiesObject(profile: Profile): Observable<Record<string, any>> {\n // Find all WMTS-layers and get their base url's for retrieving the capabilities. Make sure every url is only called once by removing duplicates\n const layerGroupLayers = [... new Set(profile.layerGroups.flatMap(lg => lg.layers).filter(lg => lg.layerType === 'WMTS'))];\n const parser = new WMTSCapabilities();\n const capabilities$ = layerGroupLayers\n .map(layer => {\n let getCapabilitiesUrl = `${layer.baseUrl}?SERVICE=WMTS&REQUEST=GetCapabilities`\n layer.wmsParameters.forEach((keyValue: IKeyValue) => {\n getCapabilitiesUrl = `${getCapabilitiesUrl}&${keyValue.key}=${keyValue.value}`;\n });\n return this._http.get(getCapabilitiesUrl, {responseType: 'text'})\n .pipe(\n map(result => {\n let item = new CapabilitiesItem();\n item.url = layer.baseUrl;\n item.sourceObject = parser.read(result);\n return item;\n })\n )\n });\n // To make it easier to find the appropriate object, I convert the array to an object of a key/value type.\n return capabilities$.length == 0 ? of({} as Record<string, any>) :\n combineLatest(capabilities$).pipe(map(allCapabilities => \n allCapabilities.reduce((obj, item) => {\n obj[item.url] = item.sourceObject;\n return obj;\n }, {} as Record<string, any>)\n ));\n }\n\n private _mapLayer(layer: ILayer, wmtsOptions: Record<string, any>, projection: string, layerGroupDbId: number, zIndex: number): BaseLayer {\n const params: { [x: string]: any } = {\n layers: layer.layers,\n }\n if (layer.token) {\n params[layer.authKeyName] = layer.token;\n }\n layer.wmsParameters.forEach(param => {\n params[param.key] = param.value\n });\n\n let result: BaseLayer;\n switch (layer.layerType) {\n case 'WMS':\n result = new ImageLayer({ \n source: new ImageWMS({ \n url: layer.baseUrl,\n params\n }) \n }); \n break;\n case 'TILEWMS':\n result = new TileLayer({\n source: new TileWMS({\n url: layer.baseUrl,\n params, \n })\n });\n break;\n case 'WMTS':\n // Create WMST options from the capabilities loaded from the getCapabilities called.\n const options = optionsFromCapabilities(wmtsOptions[layer.baseUrl], {\n layer: layer.layers,\n matrixSet: layer.projection || projection\n });\n result = new TileLayer({\n source: new WMTS(options!)\n });\n break;\n }\n \n if (layer.minZoom) {\n result.setMinZoom(layer.minZoom); \n }\n if (layer.maxZoom) {\n result.setMaxZoom(layer.maxZoom);\n } \n if (layer.maxX && layer.minX && layer.maxY && layer.minY) {\n result.setExtent([layer.minX, layer.minX, layer.maxX, layer.maxY]);\n }\n this._layerHelper.setDbId(result, layer.id);\n this._layerHelper.setLayerGroupDbId(result, layerGroupDbId);\n this._layerErrorService.registerLayer(layer.id, result);\n result.setZIndex(zIndex);\n return result;\n }\n\n private _setLogo(url: string): void {\n const logoCtrl = new LogoControl(url);\n this.map.addControl(logoCtrl);\n }\n\n private _setCopyRight(message: string): void {\n const copyrightCtrl = new CopyrightControl(message);\n this.map.addControl(copyrightCtrl);\n }\n\n private _handleShowMouseCoordinates(showCoords: boolean): void {\n if (showCoords) {\n this.map.addControl(this.mousePositionCtrl);\n } else {\n this.map.removeControl(this.mousePositionCtrl);\n }\n }\n\n private _handleShowScale(showScale: boolean): void {\n if (showScale) {\n this.map.addControl(this.scaleCtrl);\n } else {\n this.map.removeControl(this.scaleCtrl);\n }\n }\n\n ngOnInit(): void {\n this.profileSelected(this.identifier);\n proj4.defs('EPSG:25832', '+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs +type=crs');\n register(proj4);\n \n this.map = new Map({\n target: 'map',\n });\n\n this.draw.setActive(false);\n this.move.setActive(false);\n this.map.addInteraction(this.draw);\n this.map.addInteraction(this.move);\n }\n\n toggleDraw(): void {\n this.move.setActive(false);\n this.draw.setActive(!this.draw.getActive());\n }\n\n toggleShowConflicts(): void {\n this.showConflicts = !this.showConflicts;\n }\n\n toggleShowObjects(): void {\n this.showObjects = !this.showObjects;\n }\n\n toggleMove(): void {\n this.draw.setActive(false);\n this.move.setActive(true);\n }\n toggleToolbar(): void {\n this.toolbarCollapsed = !this.toolbarCollapsed;\n }\n\n toggleLayerPanel(): void {\n this.layerPanelCollapsed = !this.layerPanelCollapsed;\n }\n\n toggleActiveObjectsCollapsed(): void { \n this.activeObjectsCollapsed = !this.activeObjectsCollapsed;\n }\n}\nclass CapabilitiesItem {\n url: string = '';\n sourceObject: any = null;\n}","<lib-layer-selector [map]=\"map\" [profile]=\"selectedProfile\" [currentZoomLevel]=\"currentZoomLevel\"></lib-layer-selector>\n<lib-legends-list [map]=\"map\"></lib-legends-list>\n<span>Zoom: {{ currentZoomLevel}}</span>\n<div #activeObjectsRef>\n @if(showActiveObjects && settings) {\n <activeObjects [settings]=\"settings\"></activeObjects>\n }\n</div>\n<div #toolbarRef class=\"map-toolbar-container\">\n @if(showToolbar && settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [collapsed]=\"selectedProfile.toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile.showAreaMeasurement\" [showMeasureDistance]=\"selectedProfile.showDistanceMeasurement\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search></lib-map-search>\n\n <!-- Objektvisning -->\n <!-- @if (showObjects) {\n <div class=\"object-panel\" [class.collapsed]=\"activeObjectsCollapsed\">\n <div class=\"header\" (click)=\"toggleActiveObjectsCollapsed()\">\n <span>Aktive objekter ({{activeObjects.length}})</span>\n <mat-icon>{{ activeObjectsCollapsed ? 'expand_more' : 'expand_less' }}</mat-icon>\n </div>\n @if (!activeObjectsCollapsed){\n <ul>\n <li *ngFor=\"let obj of activeObjects\">{{ obj.name }} ({{obj.size}})</li>\n </ul>\n }\n </div>\n } -->\n\n <!-- Konflikter -->\n @if (showConflicts) {\n\n <div class=\"conflict-panel\" [class.collapsed]=\"conflictsCollapsed\">\n <div class=\"header\">\n <span>Konflikter (3)</span>\n <mat-icon>{{ activeObjectsCollapsed ? 'expand_more' : 'expand_less' }}</mat-icon> -->\n </div>\n <mat-list>\n <mat-list-item>\n <span matListItemTitle>Lag #1</span>\n <span matListItemLine><mat-icon>highlight</mat-icon> Objekt #1</span>\n </mat-list-item>\n <mat-list-item>\n <span matListItemTitle>Lag #2 (svarer ikke)</span>\n </mat-list-item>\n <mat-list-item>\n <span matListItemTitle>Lag #3</span>\n <span matListItemLine><mat-icon>highlight</mat-icon> Objekt #1</span>\n <span matListItemLine><mat-icon>highlight</mat-icon> Objekt #2</span>\n </mat-list-item>\n </mat-list>\n </div>\n \n } \n\n <!-- Kort -->\n <div id=\"map\" class=\"map\"></div>\n \n\n</div>\n","import { HttpInterceptorFn, HttpErrorResponse } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { catchError, throwError } from 'rxjs';\nimport { LibErrorService } from './libError.service';\n\nexport const libErrorInterceptor: HttpInterceptorFn = (req, next) => {\n const errorService = inject(LibErrorService);\n\n return next(req).pipe(\n catchError((error: HttpErrorResponse) => {\n errorService.log(error);\n errorService.show(error);\n return throwError(() => error); // Let the component decide if needed\n })\n );\n};\n","import { Provider } from '@angular/core';\nimport { GISKOMPONENT_CONFIG, GISKomponentConfig } from './config';\nimport { provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { libErrorInterceptor } from '../services/libError.interceptor.service';\n// Call this in the consuming app's app.config.ts file to inject the API URL into the library\n// Example:\n// export const appConfig: ApplicationConfig = { providers: [ provideLibrary( { apiBaseUrl: environment.urlAddress})]}\nexport function provideLibrary(config: GISKomponentConfig): Provider[] {\n return [ \n { provide: GISKOMPONENT_CONFIG, useValue: config }\n ];\n}\n// Call this in the consuming app's app.config.ts file to inject the library's HttpClient with interceptor \n// and custom error handler\n// Example:\n// export const appConfig: ApplicationConfig = { providers: [ provideLibraryHttpClient()]}\nexport function provideLibraryHttpClient(): any {\n return [\n provideHttpClient(withInterceptors([libErrorInterceptor]))\n ]\n};","/*\n * Public API Surface of gis-komponent\n */\n\nexport * from './lib/components/gis-komponent/gis-komponent.component';\nexport * from './lib/config/library-provider';\nexport * from './lib/services/profile.service';\nexport * from './lib/services/layerHelper.service';\nexport * from './lib/models/GisKomponentSettings';\nexport * from './lib/services/libError.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DrawLayerSourceService","buffer","i3","i4","i6","i2","i1","i5","i8","ol_layer_Vector","LayerGroup","Map"],"mappings":"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"}
|