@regionerne/gis-komponent 0.0.97 → 0.0.99
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 +186 -35
- package/fesm2022/regionerne-gis-komponent.mjs.map +1 -1
- package/lib/components/fast-switch-selector/fast-switch-selector.component.d.ts +31 -0
- package/lib/components/gis-komponent/gis-komponent.component.d.ts +1 -0
- package/lib/components/legends-list/legends-list.component.d.ts +2 -3
- package/lib/models/IProfile.d.ts +2 -0
- package/lib/models/profile.d.ts +1 -0
- package/lib/services/infoSearch.service.d.ts +2 -0
- package/lib/services/layerHelper.service.d.ts +5 -1
- package/lib/services/wfsSearch.service.d.ts +5 -0
- package/package.json +1 -1
|
@@ -20,7 +20,7 @@ import ol_control_mouse from 'ol/control/MousePosition';
|
|
|
20
20
|
import ol_control_scale from 'ol/control/ScaleLine';
|
|
21
21
|
import { register } from 'ol/proj/proj4';
|
|
22
22
|
import proj4 from 'proj4';
|
|
23
|
-
import { Control
|
|
23
|
+
import { Control } from 'ol/control';
|
|
24
24
|
import { TileWMS, Vector } from 'ol/source';
|
|
25
25
|
import { Subject, BehaviorSubject, tap, switchMap, EMPTY, map, combineLatest, Observable, debounceTime, distinctUntilChanged, filter, take, of, ReplaySubject, interval, catchError, forkJoin } from 'rxjs';
|
|
26
26
|
import WMTS, { optionsFromCapabilities } from 'ol/source/WMTS';
|
|
@@ -233,6 +233,11 @@ class LayerHelperService {
|
|
|
233
233
|
set map(value) {
|
|
234
234
|
this._map = value;
|
|
235
235
|
}
|
|
236
|
+
getParamsObject(layer) {
|
|
237
|
+
let params = layer.wmsParameters.reduce((current, value) => { return current.append(value.key, value.value); }, new HttpParams());
|
|
238
|
+
params = layer.authKeyName ? params.append(layer.authKeyName, layer.token) : params;
|
|
239
|
+
return params;
|
|
240
|
+
}
|
|
236
241
|
setName(layer, name) {
|
|
237
242
|
layer.set(this._layerNameKey, name);
|
|
238
243
|
}
|
|
@@ -355,20 +360,20 @@ class LayerHelperService {
|
|
|
355
360
|
}
|
|
356
361
|
});
|
|
357
362
|
}
|
|
358
|
-
toggleLayerInMap(map, layerId) {
|
|
363
|
+
toggleLayerInMap(map, layerId, value = undefined) {
|
|
359
364
|
map.getLayers().getArray().forEach(layergroup => {
|
|
360
365
|
if (layergroup instanceof OLLayerGroup) {
|
|
361
366
|
layergroup.getLayers().getArray().forEach(l => {
|
|
362
367
|
if (l.get(this._layerDbIdKey) === layerId) {
|
|
363
368
|
const current = l.getVisible();
|
|
364
|
-
l.setVisible(!current);
|
|
369
|
+
l.setVisible(value != undefined ? value : !current);
|
|
365
370
|
}
|
|
366
371
|
});
|
|
367
372
|
// DMP layer
|
|
368
373
|
}
|
|
369
374
|
else if (layergroup.get('dmp') && layergroup.get(this._layerDbIdKey) === layerId) {
|
|
370
375
|
const current = layergroup.getVisible();
|
|
371
|
-
layergroup.setVisible(!current);
|
|
376
|
+
layergroup.setVisible(value != undefined ? value : !current);
|
|
372
377
|
}
|
|
373
378
|
});
|
|
374
379
|
}
|
|
@@ -794,10 +799,10 @@ class WidgetConstants {
|
|
|
794
799
|
static searchWidth = 374;
|
|
795
800
|
static activeObjectsHeight = 80;
|
|
796
801
|
static activeObjectsWidth = 350;
|
|
797
|
-
static layerSelectorHeight =
|
|
802
|
+
static layerSelectorHeight = 610;
|
|
798
803
|
static layerSelectorWidth = 429;
|
|
799
|
-
static legendsHeight =
|
|
800
|
-
static legendsWidth =
|
|
804
|
+
static legendsHeight = 610;
|
|
805
|
+
static legendsWidth = 350;
|
|
801
806
|
static toolboxDefaultX = 29;
|
|
802
807
|
static toolboxDefaultY = 120;
|
|
803
808
|
static searchDefaultX = 29;
|
|
@@ -2297,6 +2302,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
|
|
|
2297
2302
|
|
|
2298
2303
|
class SearchProviderBase {
|
|
2299
2304
|
_http = inject(HttpClient);
|
|
2305
|
+
_layerHelperService = inject(LayerHelperService);
|
|
2300
2306
|
wfsFormat = new WFS();
|
|
2301
2307
|
_serializer = new XMLSerializer();
|
|
2302
2308
|
search(searchValue, maxCount) {
|
|
@@ -2314,8 +2320,9 @@ class SearchProviderBase {
|
|
|
2314
2320
|
filter
|
|
2315
2321
|
});
|
|
2316
2322
|
const body = this._serializer.serializeToString(searchFeature);
|
|
2323
|
+
let params = this._layerHelperService.getParamsObject(layer);
|
|
2317
2324
|
// Call the post without generic <WfsFeatureCollection>, because the GeoServer will return a 200 and an error as xml. Handle the deserialize manually instead.
|
|
2318
|
-
const req$ = this._http.post(layer.baseUrl.replace('wms', 'wfs'), body, { headers: { 'Content-Type': 'text/xml' }, responseType: 'text', observe: 'response' }).pipe(map(r => {
|
|
2325
|
+
const req$ = this._http.post(layer.baseUrl.replace('wms', 'wfs'), body, { headers: { 'Content-Type': 'text/xml' }, params, responseType: 'text', observe: 'response' }).pipe(map(r => {
|
|
2319
2326
|
try {
|
|
2320
2327
|
const result = JSON.parse(r.body ?? '');
|
|
2321
2328
|
return this.map(layer, result);
|
|
@@ -2900,7 +2907,7 @@ class SelectedFeatureInfoComponent {
|
|
|
2900
2907
|
if (this.features) {
|
|
2901
2908
|
this.features.forEach(item => {
|
|
2902
2909
|
if (this.collapsedStates[item.layerName] === undefined) {
|
|
2903
|
-
this.collapsedStates[item.layerName] =
|
|
2910
|
+
this.collapsedStates[item.layerName] = false;
|
|
2904
2911
|
}
|
|
2905
2912
|
});
|
|
2906
2913
|
}
|
|
@@ -2914,11 +2921,11 @@ class SelectedFeatureInfoComponent {
|
|
|
2914
2921
|
return this.collapsedStates[layerName] || false;
|
|
2915
2922
|
}
|
|
2916
2923
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SelectedFeatureInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2917
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: SelectedFeatureInfoComponent, isStandalone: true, selector: "selected-feature-info", host: { properties: { "hidden": "this.hidden" } }, ngImport: i0, template: "\n@if(features && features.length > 0) {\n <div class=\"selected-features-wrapper\"> \n\n @for(item of features; track item.layerName) { \n @if(item.values && item.values.length >0) {\n <div class=\"feature-section\">\n <span (click)=\"toggleCollapse(item.layerName)\" class=\"collapsible-header\">\n <mat-icon class=\"collapse-icon\">\n {{ isCollapsed(item.layerName) ? '
|
|
2924
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: SelectedFeatureInfoComponent, isStandalone: true, selector: "selected-feature-info", host: { properties: { "hidden": "this.hidden" } }, ngImport: i0, template: "\n@if(features && features.length > 0) {\n <div class=\"selected-features-wrapper\"> \n\n @for(item of features; track item.layerName) { \n @if(item.values && item.values.length >0) {\n <div class=\"feature-section\">\n <span (click)=\"toggleCollapse(item.layerName)\" class=\"collapsible-header\">\n <mat-icon class=\"collapse-icon\">\n {{ isCollapsed(item.layerName) ? 'expand_more' : 'keyboard_arrow_up' }}\n </mat-icon>\n {{item.layerName}}\n </span>\n <div class=\"feature-content\" [class.collapsed]=\"isCollapsed(item.layerName)\">\n @for(feature of item.values; track feature) {\n <div class=\"feature-item\">\n <div *ngFor=\"let kv of (feature | keyvalue)\" class=\"feature-row\">\n <div class=\"feature-label\">\n {{ kv.value.name }}:\n </div>\n <div class=\"feature-value\">\n <ng-container [ngSwitch]=\"kv.value.kind\">\n <img *ngSwitchCase=\"'img'\" [src]=\"kv.value.data\" alt=\"{{ kv.key }}\" style=\"max-width:240px;\" />\n <a *ngSwitchCase=\"'url'\" [href]=\"kv.value.data\" target=\"_blank\" rel=\"noopener noreferrer\">\n {{ kv.key }}\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n <span *ngSwitchDefault>{{ kv.value.data }}</span>\n </ng-container>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n}\n", styles: ["::ng-deep .selected-features-wrapper{background:#4c4d51;border-radius:5px;box-shadow:0 4px 6px #00000012,0 10px 20px #0000001a;max-width:420px;max-height:450px;overflow-y:auto;position:relative}::ng-deep .selected-features-wrapper::-webkit-scrollbar{width:12px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .selected-features-wrapper::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:decrement{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 4l-4 4h8z'/%3E%3C/svg%3E\") no-repeat center;border-radius:8px 8px 0 0}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:increment{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8l4-4H2z'/%3E%3C/svg%3E\") no-repeat center;border-radius:0 0 8px 8px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}::ng-deep .selected-features-wrapper .feature-section{padding:0;margin-bottom:8px;position:relative;overflow:hidden;border:1px solid rgba(255,255,255,.03);transition:all .2s ease}::ng-deep .selected-features-wrapper .feature-section:not(:last-child){margin-bottom:10px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{color:#fff;font-weight:600;cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;align-items:center;padding:14px 16px 14px 20px;background:#ffffff26;border-bottom:1px solid rgba(255,255,255,.05);transition:all .2s ease;position:relative;z-index:2;font-size:14px;letter-spacing:.3px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header:hover{background:#ffffff0d}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header:hover:before{opacity:1}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header .collapse-icon{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-size:22px;width:22px;height:22px;transition:transform .3s ease;color:#fff;opacity:.9}::ng-deep .selected-features-wrapper .feature-section .feature-content{max-height:350px;overflow:auto;transition:max-height .3s cubic-bezier(.4,0,.2,1),opacity .2s ease;opacity:1;padding:12px 16px 12px 20px}::ng-deep .selected-features-wrapper .feature-section .feature-content.collapsed{max-height:0;opacity:0;padding:0 16px 0 20px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar{width:12px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .selected-features-wrapper .feature-section .feature-item{background:#ffffff0d;border-radius:6px;padding:12px;transition:all .2s ease;position:relative;color:#fff;border:1px solid rgba(255,255,255,.02);margin-bottom:8px}::ng-deep .selected-features-wrapper .feature-section .feature-item:last-child{margin-bottom:0}::ng-deep .selected-features-wrapper .feature-row{display:flex;align-items:flex-start;margin-bottom:10px;gap:12px;padding:2px 0}::ng-deep .selected-features-wrapper .feature-row:last-child{margin-bottom:0}::ng-deep .selected-features-wrapper .feature-label{color:#bdc1c3cc;min-width:120px;flex-shrink:0;font-size:13px;letter-spacing:.2px}::ng-deep .selected-features-wrapper .feature-value{color:#fff;flex-grow:1;font-size:13px;word-break:break-word}::ng-deep .selected-features-wrapper img{margin-top:4px;border-radius:6px;border:1px solid rgba(255,255,255,.1);max-width:100%;max-height:180px;display:block;box-shadow:0 2px 8px #0003;transition:all .2s ease}::ng-deep .selected-features-wrapper img:hover{transform:scale(1.02);box-shadow:0 4px 12px #0000004d}::ng-deep .selected-features-wrapper a{color:#89bbeb!important;font-weight:500;transition:all .2s ease;text-decoration:none;position:relative;padding:2px 4px;border-radius:4px;display:inline-flex;align-items:center;gap:4px;background:#89bbeb0d}::ng-deep .selected-features-wrapper a:hover{color:#a8ccf0!important;background:#89bbeb1a}::ng-deep .selected-features-wrapper a .link-icon{font-size:16px;width:16px;height:16px;opacity:.7}::ng-deep .selected-features-wrapper div[ng-reflect-ng-for-of]{display:none}@media (max-width: 768px){::ng-deep .selected-features-wrapper{max-width:100%;border-radius:12px 12px 0 0;max-height:70vh}::ng-deep .selected-features-wrapper .feature-section{margin-bottom:6px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{padding:12px 16px;font-size:15px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header .collapse-icon{right:10px;font-size:20px;width:20px;height:20px}::ng-deep .selected-features-wrapper .feature-section .feature-content{padding:10px 12px 10px 16px}::ng-deep .selected-features-wrapper .feature-row{flex-direction:column;gap:4px;margin-bottom:12px}::ng-deep .selected-features-wrapper .feature-row:before{left:4px}::ng-deep .selected-features-wrapper .feature-label{min-width:auto;font-size:12px;color:#89bbeb}::ng-deep .selected-features-wrapper .feature-value{padding-left:8px;border-left:2px solid rgba(137,187,235,.2);font-size:12px}::ng-deep .selected-features-wrapper .feature-item{padding:10px}::ng-deep .selected-features-wrapper .feature-item:hover{transform:none}::ng-deep .selected-features-wrapper img{max-height:150px}}@media (max-width: 480px){::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{font-size:14px;padding:10px 14px}::ng-deep .selected-features-wrapper .feature-item{padding:8px}}@keyframes slideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.feature-content:not(.collapsed) .feature-item{animation:slideIn .2s ease-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i1$2.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
2918
2925
|
}
|
|
2919
2926
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SelectedFeatureInfoComponent, decorators: [{
|
|
2920
2927
|
type: Component,
|
|
2921
|
-
args: [{ selector: 'selected-feature-info', imports: [CommonModule, FormsModule, AsyncPipe, JsonPipe, MatButtonModule, MatIconModule], template: "\n@if(features && features.length > 0) {\n <div class=\"selected-features-wrapper\"> \n\n @for(item of features; track item.layerName) { \n @if(item.values && item.values.length >0) {\n <div class=\"feature-section\">\n <span (click)=\"toggleCollapse(item.layerName)\" class=\"collapsible-header\">\n <mat-icon class=\"collapse-icon\">\n {{ isCollapsed(item.layerName) ? '
|
|
2928
|
+
args: [{ selector: 'selected-feature-info', imports: [CommonModule, FormsModule, AsyncPipe, JsonPipe, MatButtonModule, MatIconModule], template: "\n@if(features && features.length > 0) {\n <div class=\"selected-features-wrapper\"> \n\n @for(item of features; track item.layerName) { \n @if(item.values && item.values.length >0) {\n <div class=\"feature-section\">\n <span (click)=\"toggleCollapse(item.layerName)\" class=\"collapsible-header\">\n <mat-icon class=\"collapse-icon\">\n {{ isCollapsed(item.layerName) ? 'expand_more' : 'keyboard_arrow_up' }}\n </mat-icon>\n {{item.layerName}}\n </span>\n <div class=\"feature-content\" [class.collapsed]=\"isCollapsed(item.layerName)\">\n @for(feature of item.values; track feature) {\n <div class=\"feature-item\">\n <div *ngFor=\"let kv of (feature | keyvalue)\" class=\"feature-row\">\n <div class=\"feature-label\">\n {{ kv.value.name }}:\n </div>\n <div class=\"feature-value\">\n <ng-container [ngSwitch]=\"kv.value.kind\">\n <img *ngSwitchCase=\"'img'\" [src]=\"kv.value.data\" alt=\"{{ kv.key }}\" style=\"max-width:240px;\" />\n <a *ngSwitchCase=\"'url'\" [href]=\"kv.value.data\" target=\"_blank\" rel=\"noopener noreferrer\">\n {{ kv.key }}\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n <span *ngSwitchDefault>{{ kv.value.data }}</span>\n </ng-container>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n}\n", styles: ["::ng-deep .selected-features-wrapper{background:#4c4d51;border-radius:5px;box-shadow:0 4px 6px #00000012,0 10px 20px #0000001a;max-width:420px;max-height:450px;overflow-y:auto;position:relative}::ng-deep .selected-features-wrapper::-webkit-scrollbar{width:12px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .selected-features-wrapper::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:decrement{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 4l-4 4h8z'/%3E%3C/svg%3E\") no-repeat center;border-radius:8px 8px 0 0}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:increment{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8l4-4H2z'/%3E%3C/svg%3E\") no-repeat center;border-radius:0 0 8px 8px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}::ng-deep .selected-features-wrapper .feature-section{padding:0;margin-bottom:8px;position:relative;overflow:hidden;border:1px solid rgba(255,255,255,.03);transition:all .2s ease}::ng-deep .selected-features-wrapper .feature-section:not(:last-child){margin-bottom:10px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{color:#fff;font-weight:600;cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;align-items:center;padding:14px 16px 14px 20px;background:#ffffff26;border-bottom:1px solid rgba(255,255,255,.05);transition:all .2s ease;position:relative;z-index:2;font-size:14px;letter-spacing:.3px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header:hover{background:#ffffff0d}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header:hover:before{opacity:1}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header .collapse-icon{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-size:22px;width:22px;height:22px;transition:transform .3s ease;color:#fff;opacity:.9}::ng-deep .selected-features-wrapper .feature-section .feature-content{max-height:350px;overflow:auto;transition:max-height .3s cubic-bezier(.4,0,.2,1),opacity .2s ease;opacity:1;padding:12px 16px 12px 20px}::ng-deep .selected-features-wrapper .feature-section .feature-content.collapsed{max-height:0;opacity:0;padding:0 16px 0 20px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar{width:12px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .selected-features-wrapper .feature-section .feature-item{background:#ffffff0d;border-radius:6px;padding:12px;transition:all .2s ease;position:relative;color:#fff;border:1px solid rgba(255,255,255,.02);margin-bottom:8px}::ng-deep .selected-features-wrapper .feature-section .feature-item:last-child{margin-bottom:0}::ng-deep .selected-features-wrapper .feature-row{display:flex;align-items:flex-start;margin-bottom:10px;gap:12px;padding:2px 0}::ng-deep .selected-features-wrapper .feature-row:last-child{margin-bottom:0}::ng-deep .selected-features-wrapper .feature-label{color:#bdc1c3cc;min-width:120px;flex-shrink:0;font-size:13px;letter-spacing:.2px}::ng-deep .selected-features-wrapper .feature-value{color:#fff;flex-grow:1;font-size:13px;word-break:break-word}::ng-deep .selected-features-wrapper img{margin-top:4px;border-radius:6px;border:1px solid rgba(255,255,255,.1);max-width:100%;max-height:180px;display:block;box-shadow:0 2px 8px #0003;transition:all .2s ease}::ng-deep .selected-features-wrapper img:hover{transform:scale(1.02);box-shadow:0 4px 12px #0000004d}::ng-deep .selected-features-wrapper a{color:#89bbeb!important;font-weight:500;transition:all .2s ease;text-decoration:none;position:relative;padding:2px 4px;border-radius:4px;display:inline-flex;align-items:center;gap:4px;background:#89bbeb0d}::ng-deep .selected-features-wrapper a:hover{color:#a8ccf0!important;background:#89bbeb1a}::ng-deep .selected-features-wrapper a .link-icon{font-size:16px;width:16px;height:16px;opacity:.7}::ng-deep .selected-features-wrapper div[ng-reflect-ng-for-of]{display:none}@media (max-width: 768px){::ng-deep .selected-features-wrapper{max-width:100%;border-radius:12px 12px 0 0;max-height:70vh}::ng-deep .selected-features-wrapper .feature-section{margin-bottom:6px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{padding:12px 16px;font-size:15px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header .collapse-icon{right:10px;font-size:20px;width:20px;height:20px}::ng-deep .selected-features-wrapper .feature-section .feature-content{padding:10px 12px 10px 16px}::ng-deep .selected-features-wrapper .feature-row{flex-direction:column;gap:4px;margin-bottom:12px}::ng-deep .selected-features-wrapper .feature-row:before{left:4px}::ng-deep .selected-features-wrapper .feature-label{min-width:auto;font-size:12px;color:#89bbeb}::ng-deep .selected-features-wrapper .feature-value{padding-left:8px;border-left:2px solid rgba(137,187,235,.2);font-size:12px}::ng-deep .selected-features-wrapper .feature-item{padding:10px}::ng-deep .selected-features-wrapper .feature-item:hover{transform:none}::ng-deep .selected-features-wrapper img{max-height:150px}}@media (max-width: 480px){::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{font-size:14px;padding:10px 14px}::ng-deep .selected-features-wrapper .feature-item{padding:8px}}@keyframes slideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.feature-content:not(.collapsed) .feature-item{animation:slideIn .2s ease-out}\n"] }]
|
|
2922
2929
|
}], propDecorators: { hidden: [{
|
|
2923
2930
|
type: HostBinding,
|
|
2924
2931
|
args: ['hidden']
|
|
@@ -4951,6 +4958,7 @@ class WFSSearchService {
|
|
|
4951
4958
|
_searcheableLayers = [];
|
|
4952
4959
|
geoJsonFormat = new GeoJSON$1({ dataProjection: 'EPSG:25832', featureProjection: 'EPSG:25832' });
|
|
4953
4960
|
_serializer = new XMLSerializer();
|
|
4961
|
+
_layerHelper = inject(LayerHelperService);
|
|
4954
4962
|
search(searchValue, geometry, maxCount = 5) {
|
|
4955
4963
|
const wftSearches = [];
|
|
4956
4964
|
this._searcheableLayers.flatMap(layer => {
|
|
@@ -4966,6 +4974,7 @@ class WFSSearchService {
|
|
|
4966
4974
|
filter
|
|
4967
4975
|
});
|
|
4968
4976
|
const fieldsToExclude = new Set(layer.fieldsToExcludeFromInfoFromInfo.split(',').map(f => f.toLowerCase().trim()));
|
|
4977
|
+
const headers = this._layerHelper.getParamsObject(layer);
|
|
4969
4978
|
wftSearches.push(this._http.post(layer.baseUrl.replace('wms', 'wfs'), this._serializer.serializeToString(searchFeature), { headers: { 'Content-Type': 'text/xml' }, responseType: 'json' }).pipe(map$1(r => {
|
|
4970
4979
|
const result = {
|
|
4971
4980
|
title: layer.name,
|
|
@@ -5084,7 +5093,8 @@ class MapSearchComponent {
|
|
|
5084
5093
|
.filter(layer => layer.wfsSearchable && visibleLayerIds.includes(layer.id))
|
|
5085
5094
|
.map(layer => ({ featureType: layer.layers, baseUrl: layer.baseUrl, name: layer.name,
|
|
5086
5095
|
headerField: layer.headerField, searchField: layer.searchField, geometryField: layer.geometryField,
|
|
5087
|
-
fieldsToExcludeFromInfoFromInfo: layer.fieldsToExcludeFromInfoFromInfo
|
|
5096
|
+
fieldsToExcludeFromInfoFromInfo: layer.fieldsToExcludeFromInfoFromInfo,
|
|
5097
|
+
authKeyName: layer.authKeyName, wmsParameters: layer.wmsParameters, token: layer.token }));
|
|
5088
5098
|
this._wfsSearch.setSearcheableLayers(searcheableLayers);
|
|
5089
5099
|
}
|
|
5090
5100
|
}
|
|
@@ -5325,11 +5335,11 @@ class LegendsListComponent {
|
|
|
5325
5335
|
}
|
|
5326
5336
|
return this._layerService.getByIds(layerIdsCachedToDisplay)
|
|
5327
5337
|
.pipe(switchMap(layers => {
|
|
5328
|
-
const enriched$ = layers.map(layer => this.
|
|
5338
|
+
const enriched$ = layers.map(layer => this._resolveLegendImage(layer));
|
|
5329
5339
|
return forkJoin(enriched$); // Wait until all items are enriched
|
|
5330
5340
|
}));
|
|
5331
5341
|
}
|
|
5332
|
-
|
|
5342
|
+
_resolveLegendImage(layer) {
|
|
5333
5343
|
if (layer.legend?.imageName) {
|
|
5334
5344
|
return of({
|
|
5335
5345
|
...layer,
|
|
@@ -5344,7 +5354,8 @@ class LegendsListComponent {
|
|
|
5344
5354
|
}
|
|
5345
5355
|
// Fallback to Geoserver legend file
|
|
5346
5356
|
const fallbackUrl = `${layer.baseUrl}?service=WMS&REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&STRICT=false&layer=${layer.layers}`;
|
|
5347
|
-
|
|
5357
|
+
const params = this._layerHelperService.getParamsObject(layer);
|
|
5358
|
+
return this._http.get(fallbackUrl, { responseType: 'blob', params }).pipe(map(blob => {
|
|
5348
5359
|
// Blob returned as an image, so layer has a legend in Geoserver
|
|
5349
5360
|
const isImage = blob.type.startsWith('image/');
|
|
5350
5361
|
return {
|
|
@@ -5590,6 +5601,105 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
|
|
|
5590
5601
|
args: [{ selector: 'document-search-info', imports: [CommonModule, FormsModule, AsyncPipe, JsonPipe, MatButtonModule, MatIconModule], template: "<div *ngIf=\"showPanel && (features$ | async) as features\" class=\"doc-info-panel\">\n <div class=\"doc-info-features\">\n <div *ngFor=\"let feature of features\" class=\"doc-info-layer\">\n <h3 class=\"doc-info-layer-title\">{{feature.layer}}</h3>\n <div *ngFor=\"let item of feature.items\" class=\"doc-info-item\">\n <mat-icon class=\"doc-info-item-icon\">{{getIcon(item.url)}}</mat-icon>\n <a [href]=\"item.url\" target=\"_blank\" rel=\"noopener\" class=\"doc-info-item-link\">\n {{ item.header }}\n </a>\n </div>\n </div>\n </div>\n</div>", styles: ["::ng-deep .doc-info-panel{display:block;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:#4c4d51;border:1px solid rgba(255,255,255,.07);padding:.75rem;border-radius:5px;box-shadow:0 2px 4px #0000004d,0 8px 24px #00000059,inset 0 1px #ffffff0f;max-width:420px;max-height:450px;overflow-y:auto;position:relative}::ng-deep .doc-info-panel::-webkit-scrollbar{width:12px}::ng-deep .doc-info-panel::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .doc-info-panel::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .doc-info-panel::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .doc-info-panel::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .doc-info-panel::-webkit-scrollbar-button:vertical:decrement{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 4l-4 4h8z'/%3E%3C/svg%3E\") no-repeat center;border-radius:8px 8px 0 0}::ng-deep .doc-info-panel::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .doc-info-panel::-webkit-scrollbar-button:vertical:increment{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8l4-4H2z'/%3E%3C/svg%3E\") no-repeat center;border-radius:0 0 8px 8px}::ng-deep .doc-info-panel::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}::ng-deep .doc-info-panel .doc-info-layer{background:#ffffff08;border:1px solid rgba(255,255,255,.06);border-radius:5px;overflow:hidden;margin-bottom:.5rem;transition:border-color .2s ease,box-shadow .2s ease}::ng-deep .doc-info-panel .doc-info-layer:last-child{margin-bottom:0}::ng-deep .doc-info-panel .doc-info-layer:hover{border-color:#ffffff1a;box-shadow:0 2px 12px #0003}::ng-deep .doc-info-panel .doc-info-layer-title{font-size:13px;font-weight:600;color:#bdc1c3cc;padding:.6rem .875rem .5rem;margin:0;border-bottom:1px solid rgba(255,255,255,.06);background:#0000001f}::ng-deep .doc-info-panel .doc-info-item{display:flex;align-items:center;gap:.6rem;padding:.55rem .875rem;border-bottom:1px solid rgba(255,255,255,.06);border-radius:0;transition:background .15s ease}::ng-deep .doc-info-panel .doc-info-item:last-child{border-bottom:none}::ng-deep .doc-info-panel .doc-info-item:hover{background:#ffffff0d}::ng-deep .doc-info-panel .doc-info-item:hover .doc-info-item-icon{transform:scale(1.12);opacity:1}::ng-deep .doc-info-panel .doc-info-item:hover .doc-info-item-link{color:#5cb8ff!important}::ng-deep .doc-info-panel .doc-info-item-icon{font-size:1rem;width:1rem;height:1rem;flex-shrink:0;opacity:.65;color:#8a8a94;transition:transform .15s ease,opacity .15s ease}::ng-deep .doc-info-panel .doc-info-item-link{font-size:12.5px;font-weight:450;color:#4da6f5!important;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:330px;letter-spacing:.01em;transition:color .15s ease;background:none}::ng-deep .doc-info-panel .doc-info-item-link:hover{text-decoration:underline;text-underline-offset:2px;text-decoration-color:#4da6f566;color:#5cb8ff!important;background:none!important}::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".pdf\"]){color:#e06c75;opacity:.85}::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".docx\"]),::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".doc\"]){color:#4da6f5;opacity:.85}::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".xlsx\"]),::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".xls\"]){color:#56c784;opacity:.85}::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".jpg\"]),::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".jpeg\"]),::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".png\"]),::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".gif\"]){color:#b07ce8;opacity:.85}\n"] }]
|
|
5591
5602
|
}] });
|
|
5592
5603
|
|
|
5604
|
+
class FastSwitchSelectorComponent {
|
|
5605
|
+
_http = inject(HttpClient);
|
|
5606
|
+
_layerService = inject(LayerService);
|
|
5607
|
+
_layerHelper = inject(LayerHelperService);
|
|
5608
|
+
config = inject(GISKOMPONENT_CONFIG);
|
|
5609
|
+
map;
|
|
5610
|
+
profile;
|
|
5611
|
+
collapsed = true;
|
|
5612
|
+
selectedLayer;
|
|
5613
|
+
layerGroup = [];
|
|
5614
|
+
fastSwitchLayers = [];
|
|
5615
|
+
_baseUrl = this.config.apiBaseUrl;
|
|
5616
|
+
ngOnChanges(changes) {
|
|
5617
|
+
if (changes['profile'] && this.profile) {
|
|
5618
|
+
this.fastSwitchLayers = this.profile.fastSwitchLayerGroup?.layers ? this.profile.fastSwitchLayerGroup?.layers : [];
|
|
5619
|
+
this._setFilteredLegends().subscribe(result => {
|
|
5620
|
+
this.layerGroup = result.filter(lg => this.profile.fastSwitchLayerGroup?.layers.find(l => l.id === lg.id)?.activeInSelector);
|
|
5621
|
+
// Turn them all off (except for first one)
|
|
5622
|
+
this.layerGroup.forEach((layer, index) => {
|
|
5623
|
+
if (index > 0) {
|
|
5624
|
+
this._layerHelper.toggleLayerInMap(this.map, layer.id, false);
|
|
5625
|
+
}
|
|
5626
|
+
else {
|
|
5627
|
+
this._layerHelper.toggleLayerInMap(this.map, layer.id, true);
|
|
5628
|
+
}
|
|
5629
|
+
});
|
|
5630
|
+
if (this.layerGroup.length > 0)
|
|
5631
|
+
this.selectedLayer = this.layerGroup[0];
|
|
5632
|
+
});
|
|
5633
|
+
}
|
|
5634
|
+
}
|
|
5635
|
+
toggleCollapsed() {
|
|
5636
|
+
this.collapsed = !this.collapsed;
|
|
5637
|
+
}
|
|
5638
|
+
layerChanged(layer) {
|
|
5639
|
+
// Turn off current layer
|
|
5640
|
+
if (this.selectedLayer?.id)
|
|
5641
|
+
this._layerHelper.toggleLayerInMap(this.map, this.selectedLayer?.id, false);
|
|
5642
|
+
this.selectedLayer = layer;
|
|
5643
|
+
// Turn on new layer
|
|
5644
|
+
this._layerHelper.toggleLayerInMap(this.map, layer.id, true);
|
|
5645
|
+
this.collapsed = true;
|
|
5646
|
+
}
|
|
5647
|
+
_getImageUrl(fileName) {
|
|
5648
|
+
return `${this._baseUrl}/api/image/${fileName}`;
|
|
5649
|
+
}
|
|
5650
|
+
_setFilteredLegends() {
|
|
5651
|
+
if (!this.profile?.id) {
|
|
5652
|
+
return of([]);
|
|
5653
|
+
}
|
|
5654
|
+
return this._layerService.getByIds(this.fastSwitchLayers.map(layer => layer.id))
|
|
5655
|
+
.pipe(switchMap(layers => {
|
|
5656
|
+
const enriched$ = layers.map(layer => this._resolveLegendImage(layer));
|
|
5657
|
+
return forkJoin(enriched$); // Wait until all items are enriched
|
|
5658
|
+
}));
|
|
5659
|
+
}
|
|
5660
|
+
_resolveLegendImage(layer) {
|
|
5661
|
+
if (layer.legend?.imageName) {
|
|
5662
|
+
return of({
|
|
5663
|
+
...layer,
|
|
5664
|
+
imageUrl: this._getImageUrl(layer.legend.imageName)
|
|
5665
|
+
});
|
|
5666
|
+
}
|
|
5667
|
+
if (layer.legend?.imageExternalURL) {
|
|
5668
|
+
return of({
|
|
5669
|
+
...layer,
|
|
5670
|
+
imageUrl: layer.legend.imageExternalURL
|
|
5671
|
+
});
|
|
5672
|
+
}
|
|
5673
|
+
// Fallback to Geoserver legend file
|
|
5674
|
+
const fallbackUrl = `${layer.baseUrl}?service=WMS&REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&STRICT=false&layer=${layer.layers}`;
|
|
5675
|
+
return this._http.get(fallbackUrl, { responseType: 'blob' }).pipe(map(blob => {
|
|
5676
|
+
// Blob returned as an image, so layer has a legend in Geoserver
|
|
5677
|
+
const isImage = blob.type.startsWith('image/');
|
|
5678
|
+
return {
|
|
5679
|
+
...layer,
|
|
5680
|
+
imageUrl: isImage ? fallbackUrl : ''
|
|
5681
|
+
};
|
|
5682
|
+
}), catchError((err) => {
|
|
5683
|
+
console.error(`Signatur kunne ikke indlæses for ${layer.name}`, err);
|
|
5684
|
+
return of({
|
|
5685
|
+
...layer,
|
|
5686
|
+
imageUrl: '' // fallback failed, layer has no legend on Geoserver
|
|
5687
|
+
});
|
|
5688
|
+
}));
|
|
5689
|
+
}
|
|
5690
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: FastSwitchSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5691
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: FastSwitchSelectorComponent, isStandalone: true, selector: "lib-fast-switch-selector", inputs: { map: "map", profile: "profile" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"fast-switch-body-wrapper\" \n [class.collapsed]=\"collapsed\">\n @if(collapsed) {\n <div class=\"fast-switch-collapsed\">\n <div class=\"legend\">\n <img [src]=\"selectedLayer?.imageUrl\" class=\"legend-thumbnail\" (click)=\"toggleCollapsed()\"/>\n </div>\n </div>\n }\n @if(!collapsed) {\n <div class=\"fast-switch-expanded global-wrapper-container\">\n \n <div class=\"ol-unselectable ol-control legends-list-body\">\n <div class=\"item-list\">\n @for (layer of layerGroup; track layer.id; let i = $index) {\n @if (layer.imageUrl) {\n <mat-expansion-panel [expanded]=\"true\"> \n <div class=\"legend\">\n <img [src]=\"layer.imageUrl\" class=\"legend-thumbnail\" (click)=\"layerChanged(layer)\"/>\n </div>\n </mat-expansion-panel>\n }\n }\n </div>\n </div>\n </div>\n }\n</div>", styles: [".fast-switch-body-wrapper{position:absolute;bottom:100px;left:20px}.fast-switch-body-wrapper .fast-switch-collapsed{width:100px;max-height:100px}.fast-switch-body-wrapper .fast-switch-expanded{width:145px;max-height:610px;position:absolute;bottom:0}.fast-switch-body-wrapper .legends-list-body{bottom:0}.fast-switch-body-wrapper .legend-thumbnail{width:100px;height:100px;border:5px solid white;border-radius:6px}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i6.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatTooltipModule }] });
|
|
5692
|
+
}
|
|
5693
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: FastSwitchSelectorComponent, decorators: [{
|
|
5694
|
+
type: Component,
|
|
5695
|
+
args: [{ selector: 'lib-fast-switch-selector', imports: [MatFormFieldModule, CommonModule, MatIconModule, FormsModule, DragDropModule,
|
|
5696
|
+
MatExpansionModule, MatInputModule, MatTooltipModule], template: "<div class=\"fast-switch-body-wrapper\" \n [class.collapsed]=\"collapsed\">\n @if(collapsed) {\n <div class=\"fast-switch-collapsed\">\n <div class=\"legend\">\n <img [src]=\"selectedLayer?.imageUrl\" class=\"legend-thumbnail\" (click)=\"toggleCollapsed()\"/>\n </div>\n </div>\n }\n @if(!collapsed) {\n <div class=\"fast-switch-expanded global-wrapper-container\">\n \n <div class=\"ol-unselectable ol-control legends-list-body\">\n <div class=\"item-list\">\n @for (layer of layerGroup; track layer.id; let i = $index) {\n @if (layer.imageUrl) {\n <mat-expansion-panel [expanded]=\"true\"> \n <div class=\"legend\">\n <img [src]=\"layer.imageUrl\" class=\"legend-thumbnail\" (click)=\"layerChanged(layer)\"/>\n </div>\n </mat-expansion-panel>\n }\n }\n </div>\n </div>\n </div>\n }\n</div>", styles: [".fast-switch-body-wrapper{position:absolute;bottom:100px;left:20px}.fast-switch-body-wrapper .fast-switch-collapsed{width:100px;max-height:100px}.fast-switch-body-wrapper .fast-switch-expanded{width:145px;max-height:610px;position:absolute;bottom:0}.fast-switch-body-wrapper .legends-list-body{bottom:0}.fast-switch-body-wrapper .legend-thumbnail{width:100px;height:100px;border:5px solid white;border-radius:6px}\n"] }]
|
|
5697
|
+
}], propDecorators: { map: [{
|
|
5698
|
+
type: Input
|
|
5699
|
+
}], profile: [{
|
|
5700
|
+
type: Input
|
|
5701
|
+
}] } });
|
|
5702
|
+
|
|
5593
5703
|
class GisKomponentComponent {
|
|
5594
5704
|
_profileService = inject(ProfileService);
|
|
5595
5705
|
_http = inject(HttpClient);
|
|
@@ -5605,6 +5715,7 @@ class GisKomponentComponent {
|
|
|
5605
5715
|
settings;
|
|
5606
5716
|
toolbarRef;
|
|
5607
5717
|
legendsListRef;
|
|
5718
|
+
fastSwitchSelectorRef;
|
|
5608
5719
|
layerSelectorRef;
|
|
5609
5720
|
activeObjectsRef;
|
|
5610
5721
|
documentInfoRef;
|
|
@@ -5667,14 +5778,18 @@ class GisKomponentComponent {
|
|
|
5667
5778
|
this.currentZoomLevel = profile.zoom ?? 8;
|
|
5668
5779
|
this._getCapabilitiesObject(profile).subscribe({
|
|
5669
5780
|
next: capabilityObject => {
|
|
5670
|
-
|
|
5671
|
-
|
|
5672
|
-
|
|
5673
|
-
|
|
5674
|
-
|
|
5675
|
-
|
|
5676
|
-
|
|
5677
|
-
|
|
5781
|
+
let allLayergroups = [...profile.layerGroups];
|
|
5782
|
+
if (profile.fastSwitchLayerGroup) {
|
|
5783
|
+
const mappedFastSwitchGroup = { ...profile.fastSwitchLayerGroup, sortOrder: -1, fastSwitchLayerGroup: true };
|
|
5784
|
+
allLayergroups = allLayergroups.concat(mappedFastSwitchGroup);
|
|
5785
|
+
}
|
|
5786
|
+
const layers = allLayergroups.map((lg) => new OLLayerGroup({
|
|
5787
|
+
layers: lg.layers
|
|
5788
|
+
.filter(layer => layer.activeInSelector)
|
|
5789
|
+
.sort((a, b) => a.sortOrder - b.sortOrder)
|
|
5790
|
+
.map((l, index) => this._mapLayer(l, capabilityObject, 'EPSG:25832', lg.id, lg.fastSwitchLayerGroup === true ? -1 : index)), // for now, we default to EPSG:25832.
|
|
5791
|
+
properties: { id: lg.id }
|
|
5792
|
+
}));
|
|
5678
5793
|
this.map.setLayers(layers);
|
|
5679
5794
|
if (this.settings) {
|
|
5680
5795
|
this._featureLoader.loadFeaturesSettings(this.settings);
|
|
@@ -5697,6 +5812,13 @@ class GisKomponentComponent {
|
|
|
5697
5812
|
//Toolbox is hidden, but needed for default tool, so expand it
|
|
5698
5813
|
this.toolbarCollapsed = false;
|
|
5699
5814
|
}
|
|
5815
|
+
if (profile.fastSwitchLayerGroup?.layers &&
|
|
5816
|
+
profile.fastSwitchLayerGroup?.layers.length > 0) {
|
|
5817
|
+
const fastSwitchControl = new Control({
|
|
5818
|
+
element: this.fastSwitchSelectorRef?.nativeElement
|
|
5819
|
+
});
|
|
5820
|
+
this.map.addControl(fastSwitchControl);
|
|
5821
|
+
}
|
|
5700
5822
|
if (profile.showLegends) {
|
|
5701
5823
|
const legendsListControl = new Control({
|
|
5702
5824
|
element: this.legendsListRef?.nativeElement
|
|
@@ -5762,15 +5884,18 @@ class GisKomponentComponent {
|
|
|
5762
5884
|
}
|
|
5763
5885
|
_getCapabilitiesObject(profile) {
|
|
5764
5886
|
// 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
|
|
5765
|
-
|
|
5887
|
+
let layerGroupLayers = [...new Set(profile.layerGroups.flatMap(lg => lg.layers).filter(lg => lg.layerType === 'WMTS'))];
|
|
5888
|
+
if (profile.fastSwitchLayerGroup)
|
|
5889
|
+
layerGroupLayers = layerGroupLayers.concat(profile.fastSwitchLayerGroup.layers.filter(lg => lg.layerType === 'WMTS'));
|
|
5766
5890
|
const parser = new WMTSCapabilities();
|
|
5767
5891
|
const capabilities$ = layerGroupLayers
|
|
5768
5892
|
.map(layer => {
|
|
5769
5893
|
let getCapabilitiesUrl = `${layer.baseUrl}?SERVICE=WMTS&REQUEST=GetCapabilities`;
|
|
5894
|
+
const params = this._layerHelper.getParamsObject(layer);
|
|
5770
5895
|
layer.wmsParameters.forEach((keyValue) => {
|
|
5771
5896
|
getCapabilitiesUrl = `${getCapabilitiesUrl}&${keyValue.key}=${keyValue.value}`;
|
|
5772
5897
|
});
|
|
5773
|
-
return this._http.get(getCapabilitiesUrl, { responseType: 'text' })
|
|
5898
|
+
return this._http.get(getCapabilitiesUrl, { responseType: 'text', params })
|
|
5774
5899
|
.pipe(map(result => {
|
|
5775
5900
|
let item = new CapabilitiesItem();
|
|
5776
5901
|
item.url = layer.baseUrl;
|
|
@@ -5881,18 +6006,41 @@ class GisKomponentComponent {
|
|
|
5881
6006
|
}
|
|
5882
6007
|
// Added custom north-arrow with a compass one
|
|
5883
6008
|
_addRotateControl() {
|
|
5884
|
-
const
|
|
6009
|
+
const button = document.createElement('button');
|
|
6010
|
+
button.className = 'ol-rotate-reset';
|
|
6011
|
+
button.setAttribute('type', 'button');
|
|
6012
|
+
button.setAttribute('aria-label', 'Nulstil mod Nord');
|
|
6013
|
+
const hoverText = document.createElement('span');
|
|
6014
|
+
hoverText.className = 'hover-text';
|
|
6015
|
+
hoverText.textContent = 'Nulstil mod Nord';
|
|
6016
|
+
const compassSpan = document.createElement('span');
|
|
6017
|
+
compassSpan.className = 'ol-compass';
|
|
5885
6018
|
const img = document.createElement('img');
|
|
5886
6019
|
img.src = IconsConstants.tooltipObjBase64;
|
|
5887
6020
|
img.width = 22;
|
|
5888
6021
|
img.height = 22;
|
|
5889
|
-
|
|
5890
|
-
|
|
5891
|
-
|
|
5892
|
-
|
|
5893
|
-
|
|
6022
|
+
img.alt = '';
|
|
6023
|
+
img.setAttribute('aria-hidden', 'true');
|
|
6024
|
+
compassSpan.appendChild(img);
|
|
6025
|
+
button.appendChild(hoverText);
|
|
6026
|
+
button.appendChild(compassSpan);
|
|
6027
|
+
const controlDiv = document.createElement('div');
|
|
6028
|
+
controlDiv.className = 'ol-rotate ol-unselectable ol-control';
|
|
6029
|
+
controlDiv.appendChild(button);
|
|
6030
|
+
const customRotateControl = new Control({
|
|
6031
|
+
element: controlDiv,
|
|
6032
|
+
});
|
|
6033
|
+
button.addEventListener('click', (e) => {
|
|
6034
|
+
e.preventDefault();
|
|
6035
|
+
this.map.getView().setRotation(0);
|
|
5894
6036
|
});
|
|
5895
|
-
|
|
6037
|
+
const updateCompassRotation = () => {
|
|
6038
|
+
const rotation = this.map.getView().getRotation();
|
|
6039
|
+
compassSpan.style.transform = `rotate(${-rotation}rad)`;
|
|
6040
|
+
};
|
|
6041
|
+
this.map.on('moveend', updateCompassRotation);
|
|
6042
|
+
updateCompassRotation();
|
|
6043
|
+
this.map.addControl(customRotateControl);
|
|
5896
6044
|
}
|
|
5897
6045
|
_applyCustomTooltips() {
|
|
5898
6046
|
const targets = [
|
|
@@ -5926,15 +6074,15 @@ class GisKomponentComponent {
|
|
|
5926
6074
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: GisKomponentComponent, isStandalone: true, selector: "gis-komponent", inputs: { identifier: "identifier", settings: "settings" }, outputs: { sessionDone: "sessionDone", featuresChanged: "featuresChanged" }, providers: [CurrentItemsService, FeatureLoaderService, DrawLayerSourceService, ZoomService, UndoRedoService, ShowInfoHoverService, HoverInfoSearchService, CenterPointService, PrintDrawLayerSourceService,
|
|
5927
6075
|
HighlightService, ShowInfoService, InfoSearchProvider, InteractionHelperService, ConflictAnalysisSearchProvider,
|
|
5928
6076
|
MergeFeaturesService, OverlapService, CowiService, SearchProviderService, AddressSearchService, CadastreSearchService, ShowDocumentInfoService, DocumentSearchService,
|
|
5929
|
-
DmpCatalogService, OlCapabilitiesService, DmpLayerMapperService, GeometrySearchService, GeometrySplitService, PolygonCleanupService], viewQueries: [{ propertyName: "toolbarRef", first: true, predicate: ["toolbarRef"], descendants: true, static: true }, { propertyName: "legendsListRef", first: true, predicate: ["legendsListRef"], descendants: true, static: true }, { propertyName: "layerSelectorRef", first: true, predicate: ["layerSelectorRef"], descendants: true, static: true }, { propertyName: "activeObjectsRef", first: true, predicate: ["activeObjectsRef"], descendants: true, static: true }, { propertyName: "documentInfoRef", first: true, predicate: ["documentInfoRef"], descendants: true, static: true }], ngImport: i0, template: "<div #layerSelectorRef class=\"layer-selector-container\">\n @if (selectedProfile && selectedProfile.showLayerSelector) {\n <lib-layer-selector [map]=\"map\" [profile]=\"selectedProfile\" [currentZoomLevel]=\"currentZoomLevel\"></lib-layer-selector>\n }\n</div>\n\n<div #legendsListRef class=\"legends-list-container\">\n @if (selectedProfile && selectedProfile.showLegends) {\n <lib-legends-list [map]=\"map\" [profile]=\"selectedProfile\"></lib-legends-list>\n }\n</div>\n\n<div #documentInfoRef class=\"documents-features-wrapper\">\n <document-search-info></document-search-info>\n</div>\n\n<div #activeObjectsRef class=\"active-objects-container\">\n @if(showActiveObjects && settings && selectedProfile) {\n <activeObjects [settings]=\"settings\" [profile]=\"selectedProfile\" (sessionDone)=\"sessionDoneFromActiveObject()\"></activeObjects>\n }\n</div>\n\n<div #toolbarRef class=\"map-toolbar-container\">\n @if (settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [class.toolbox-hidden]=\"!profileShowToolbox\"\n [collapsed]=\"toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile?.showAreaMeasurement || false\" [showMeasureDistance]=\"selectedProfile?.showDistanceMeasurement || false\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search *ngIf=\"showSearch\" [profile]=\"selectedProfile\"></lib-map-search>\n\n <!-- Kort -->\n <div id=\"map\" class=\"map\"></div>\n</div>\n", styles: ["::ng-deep .global-wrapper-container{background:#4c4d51}::ng-deep .dmp-dialog-content mat-dialog-content{background:#4c4d51!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input{color:#fff!important;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input .search-icon{color:#fff!important}::ng-deep button.ol-zoom-in,::ng-deep button.ol-zoom-out{background:#4c4d51!important;color:#fff;border-radius:5px!important}::ng-deep button.ol-zoom-in:hover,::ng-deep button.ol-zoom-out:hover{color:#e9e3e3;outline:none}::ng-deep button.ol-rotate-reset{border:none}::ng-deep button.ol-rotate-reset:hover{outline:none}::ng-deep [data-tooltip]{position:relative}::ng-deep [data-tooltip]:after{content:attr(data-tooltip);position:absolute;left:calc(100% + 8px);top:50%;transform:translateY(-50%);background:#4c4d51;color:#fff;padding:8px;border-radius:5px;white-space:nowrap;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-size:12px;pointer-events:none;opacity:0;transition:opacity .2s}::ng-deep [data-tooltip]:hover:after{opacity:1}::ng-deep mat-expansion-panel .mat-expansion-panel-header{height:40px!important;min-height:40px!important;background:#ffffff0d;transition:background .2s ease;border-top-left-radius:4px!important;border-top-right-radius:4px!important;padding:0 16px;margin-bottom:2px}::ng-deep mat-expansion-panel .mat-expansion-panel-header:hover{background:#ffffff14!important}::ng-deep mat-expansion-panel .mat-expansion-panel-header .panel-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:320px;margin-right:10px;color:#fff;font-weight:600;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:15px}::ng-deep mat-expansion-panel .mat-expansion-panel-header-title{color:#fff}::ng-deep .custom-image-icon,.compact-icon{background:none}::ng-deep .custom-image-icon img,.compact-icon img{width:100%;height:100%;object-fit:contain;transition:filter .2s ease}::ng-deep .custom-image-icon.active,.compact-icon.active{background:#f7b528!important;border-color:transparent;box-shadow:0 4px 12px #0ea5e966}::ng-deep .custom-image-icon.active img,.compact-icon.active img{filter:brightness(0) invert(1)}::ng-deep .custom-image-icon.active:hover,.compact-icon.active:hover{box-shadow:0 6px 20px #0ea5e980}::ng-deep .custom-image-icon:hover:not(.active),.compact-icon:hover:not(.active){background:#ffffff1a!important;border-color:none;box-shadow:none}::ng-deep .custom-image-icon:hover:not(.active) img,.compact-icon:hover:not(.active) img{filter:brightness(0) invert(.8)}::ng-deep .layer-selector-body .search-section mat-form-field input{color:#fff!important}::ng-deep .search-field .mat-mdc-input-element{color:#fff!important}::ng-deep .mat-mdc-text-field-wrapper{background:#878787!important}::ng-deep .mat-mdc-select-panel{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .active-objects-wrapper.collapsed,::ng-deep .layer-selector-body-wrapper.collapsed,::ng-deep .legends-list-body-wrapper.collapsed,::ng-deep .search-container.collapsed,::ng-deep .toolbox-wrapper.collapsed{width:90px;max-width:90px;min-width:90px}::ng-deep .drag-handle-active-objects,::ng-deep .drag-handle-legends,::ng-deep .drag-handle,::ng-deep .drag-handle-selector,::ng-deep .drag-handle-toolbox{display:flex;align-items:center;justify-content:space-between;padding:0 2px;cursor:move;color:#fff;border-radius:5px;width:100%;box-sizing:border-box}:host{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#dee2e6!important;border-width:1px!important}:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#d1d5db!important;border-width:1px!important;box-shadow:0 0 0 3px #d1d5db40!important}::ng-deep .mat-mdc-form-field-flex{height:40px!important;display:flex!important;align-items:center!important}::ng-deep .mat-expansion-indicator svg{fill:#fff!important}::ng-deep .ol-control{background-color:transparent!important}::ng-deep .search-result-option{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .mat-mdc-autocomplete-panel .mat-pseudo-checkbox{display:none!important}::ng-deep .mat-mdc-autocomplete-panel .mdc-list-item__end{display:none!important}::ng-deep .mat-mdc-tooltip{--mdc-plain-tooltip-container-color: #050505 !important;--mdc-plain-tooltip-supporting-text-color: white !important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip .mdc-tooltip__surface{background-color:#050505!important;color:#fff!important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip-surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mdc-tooltip .mdc-tooltip__surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}:host{display:block;width:100%;height:100%;overflow:hidden}::ng-deep .lib-error-snackbar{background-color:#d32f2f;color:#fff;font-weight:500}::ng-deep .map-container{position:relative;height:81vh;width:100%;overflow:hidden}::ng-deep .toolbox-hidden{visibility:hidden!important}::ng-deep #map{width:100%;height:100%;position:absolute;inset:0;overflow:hidden}::ng-deep .ol-viewport{overflow:hidden!important}::ng-deep ::ng-deep .ol-logo{position:absolute;left:auto;right:3em;top:6.25em}::ng-deep ::ng-deep .ol-copyright{background-color:transparent;position:absolute;bottom:10px;width:250px;display:flex;justify-content:end;right:5px}::ng-deep ::ng-deep .toolbar{position:absolute;top:10px;left:10px;background:#fff;padding:4px;border-radius:4px;display:flex;flex-direction:column;transition:width .3s;z-index:1000;overflow:hidden}::ng-deep ::ng-deep .toolbar.collapsed{width:40px;overflow:hidden}::ng-deep .object-panel{position:absolute;bottom:10px;left:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .object-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep .conflict-panel{position:absolute;bottom:10px;right:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .conflict-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep ::ng-deep .ol-zoom.ol-unselectable.ol-control{display:flex;flex-direction:column;position:absolute}::ng-deep ::ng-deep .ol-scale-text{display:flex}::ng-deep .ol-scale-bar.ol-unselectable{position:absolute;bottom:3rem}::ng-deep .ol-mouse-position{position:absolute;bottom:10px;left:6px;top:auto;background:#0000004d;color:#fffcfc;width:189px;height:30px;padding:2px;border-radius:5px;text-align:center;display:flex;align-items:center;justify-content:flex-start;z-index:1000}::ng-deep .documents-features-wrapper{position:absolute!important;left:45px;top:9px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatListModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: LayerSelectorComponent, selector: "lib-layer-selector", inputs: ["map", "profile", "currentZoomLevel"] }, { kind: "component", type: MapSearchComponent, selector: "lib-map-search", inputs: ["profile"] }, { kind: "component", type: ToolboxComponent, selector: "map-toolbox", inputs: ["map", "showMeasureDistance", "showMeasureArea", "collapsed", "settings", "profile", "WKTInputEnabled", "deleteEnabled"] }, { kind: "component", type: ActiveObjectsComponent, selector: "activeObjects", inputs: ["settings", "profile"], outputs: ["sessionDone"] }, { kind: "component", type: LegendsListComponent, selector: "lib-legends-list", inputs: ["map", "profile"] }, { kind: "component", type: DocumentSearchInfoComponent, selector: "document-search-info" }] });
|
|
6077
|
+
DmpCatalogService, OlCapabilitiesService, DmpLayerMapperService, GeometrySearchService, GeometrySplitService, PolygonCleanupService], viewQueries: [{ propertyName: "toolbarRef", first: true, predicate: ["toolbarRef"], descendants: true, static: true }, { propertyName: "legendsListRef", first: true, predicate: ["legendsListRef"], descendants: true, static: true }, { propertyName: "fastSwitchSelectorRef", first: true, predicate: ["fastSwitchSelectorRef"], descendants: true, static: true }, { propertyName: "layerSelectorRef", first: true, predicate: ["layerSelectorRef"], descendants: true, static: true }, { propertyName: "activeObjectsRef", first: true, predicate: ["activeObjectsRef"], descendants: true, static: true }, { propertyName: "documentInfoRef", first: true, predicate: ["documentInfoRef"], descendants: true, static: true }], ngImport: i0, template: "<div #layerSelectorRef class=\"layer-selector-container\">\n @if (selectedProfile && selectedProfile.showLayerSelector) {\n <lib-layer-selector [map]=\"map\" [profile]=\"selectedProfile\" [currentZoomLevel]=\"currentZoomLevel\"></lib-layer-selector>\n }\n</div>\n\n<div #legendsListRef class=\"legends-list-container\">\n @if (selectedProfile && selectedProfile.showLegends) {\n <lib-legends-list [map]=\"map\" [profile]=\"selectedProfile\"></lib-legends-list>\n }\n</div>\n\n<div #fastSwitchSelectorRef class=\"fast-switch-container\">\n @if (selectedProfile && selectedProfile.fastSwitchLayerGroup\n && selectedProfile.fastSwitchLayerGroup.layers \n && selectedProfile.fastSwitchLayerGroup.layers.length > 0) {\n <lib-fast-switch-selector [map]=\"map\" [profile]=\"selectedProfile\"></lib-fast-switch-selector>\n }\n</div>\n\n<div #documentInfoRef class=\"documents-features-wrapper\">\n <document-search-info></document-search-info>\n</div>\n\n<div #activeObjectsRef class=\"active-objects-container\">\n @if(showActiveObjects && settings && selectedProfile) {\n <activeObjects [settings]=\"settings\" [profile]=\"selectedProfile\" (sessionDone)=\"sessionDoneFromActiveObject()\"></activeObjects>\n }\n</div>\n\n<div #toolbarRef class=\"map-toolbar-container\">\n @if (settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [class.toolbox-hidden]=\"!profileShowToolbox\"\n [collapsed]=\"toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile?.showAreaMeasurement || false\" [showMeasureDistance]=\"selectedProfile?.showDistanceMeasurement || false\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search *ngIf=\"showSearch\" [profile]=\"selectedProfile\"></lib-map-search>\n\n <!-- Kort -->\n <div id=\"map\" class=\"map\"></div>\n</div>\n", styles: ["::ng-deep .global-wrapper-container{background:#4c4d51}::ng-deep .dmp-dialog-content mat-dialog-content{background:#4c4d51!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input{color:#fff!important;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input .search-icon{color:#fff!important}::ng-deep .ol-rotate.ol-control{position:absolute;top:10px;right:10px;background:transparent}@media (max-width: 768px){::ng-deep .ol-rotate.ol-control{top:5px;right:5px}}::ng-deep .ol-rotate-reset{position:relative;background:#4c4d51;color:#fff;border-radius:5px;border:none;width:32px;height:32px;display:flex;align-items:center;justify-content:center;margin:0;padding:0}::ng-deep .ol-rotate-reset .hover-text{position:absolute;right:calc(100% + 12px);top:50%;transform:translateY(-50%);background:#4c4d51;color:#fff;padding:8px;border-radius:5px;white-space:nowrap;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:12px;font-weight:500;pointer-events:none;opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease;z-index:9999}::ng-deep .ol-rotate-reset:hover .hover-text{opacity:1;visibility:visible}::ng-deep .ol-rotate-reset .ol-compass{display:inline-block;transition:transform .3s ease;line-height:0}::ng-deep .ol-rotate.ol-control{background:transparent!important;border-radius:0!important;padding:0!important;margin:0!important}::ng-deep .ol-rotate.ol-control button{margin:0}::ng-deep button.ol-zoom-in,::ng-deep button.ol-zoom-out{background:#4c4d51!important;color:#fff;border-radius:5px!important}::ng-deep button.ol-zoom-in:hover,::ng-deep button.ol-zoom-out:hover{color:#e9e3e3;outline:none}::ng-deep button.ol-rotate-reset{border:none}::ng-deep button.ol-rotate-reset:hover{outline:none}::ng-deep [data-tooltip]{position:relative}::ng-deep [data-tooltip]:after{content:attr(data-tooltip);position:absolute;left:calc(100% + 8px);top:50%;transform:translateY(-50%);background:#4c4d51;color:#fff;padding:8px;border-radius:5px;white-space:nowrap;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-size:12px;pointer-events:none;opacity:0;transition:opacity .2s}::ng-deep [data-tooltip]:hover:after{opacity:1}::ng-deep mat-expansion-panel .mat-expansion-panel-header{height:40px!important;min-height:40px!important;background:#ffffff0d;transition:background .2s ease;border-top-left-radius:4px!important;border-top-right-radius:4px!important;padding:0 16px;margin-bottom:2px}::ng-deep mat-expansion-panel .mat-expansion-panel-header:hover{background:#ffffff14!important}::ng-deep mat-expansion-panel .mat-expansion-panel-header .panel-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:320px;margin-right:10px;color:#fff;font-weight:600;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:15px}::ng-deep mat-expansion-panel .mat-expansion-panel-header-title{color:#fff}::ng-deep .custom-image-icon,.compact-icon{background:none}::ng-deep .custom-image-icon img,.compact-icon img{width:100%;height:100%;object-fit:contain;transition:filter .2s ease}::ng-deep .custom-image-icon.active,.compact-icon.active{background:#f7b528!important;border-color:transparent;box-shadow:0 4px 12px #0ea5e966}::ng-deep .custom-image-icon.active img,.compact-icon.active img{filter:brightness(0) invert(1)}::ng-deep .custom-image-icon.active:hover,.compact-icon.active:hover{box-shadow:0 6px 20px #0ea5e980}::ng-deep .custom-image-icon:hover:not(.active),.compact-icon:hover:not(.active){background:#ffffff1a!important;border-color:none;box-shadow:none}::ng-deep .custom-image-icon:hover:not(.active) img,.compact-icon:hover:not(.active) img{filter:brightness(0) invert(.8)}::ng-deep .layer-selector-body .search-section mat-form-field input{color:#fff!important}::ng-deep .search-field .mat-mdc-input-element{color:#fff!important}::ng-deep .mat-mdc-text-field-wrapper{background:#878787!important}::ng-deep .mat-mdc-select-panel{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .active-objects-wrapper.collapsed,::ng-deep .layer-selector-body-wrapper.collapsed,::ng-deep .legends-list-body-wrapper.collapsed,::ng-deep .search-container.collapsed,::ng-deep .toolbox-wrapper.collapsed{width:90px;max-width:90px;min-width:90px}::ng-deep .drag-handle-active-objects,::ng-deep .drag-handle-legends,::ng-deep .drag-handle,::ng-deep .drag-handle-selector,::ng-deep .drag-handle-toolbox{display:flex;align-items:center;justify-content:space-between;padding:0 2px;cursor:move;color:#fff;border-radius:5px;width:100%;box-sizing:border-box}:host{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#dee2e6!important;border-width:1px!important}:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#d1d5db!important;border-width:1px!important;box-shadow:0 0 0 3px #d1d5db40!important}::ng-deep .mat-mdc-form-field-flex{height:40px!important;display:flex!important;align-items:center!important}::ng-deep .mat-expansion-indicator svg{fill:#fff!important}::ng-deep .ol-control{background-color:transparent!important}::ng-deep .search-result-option{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .mat-mdc-autocomplete-panel .mat-pseudo-checkbox{display:none!important}::ng-deep .mat-mdc-autocomplete-panel .mdc-list-item__end{display:none!important}::ng-deep .mat-mdc-tooltip{--mdc-plain-tooltip-container-color: #050505 !important;--mdc-plain-tooltip-supporting-text-color: white !important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip .mdc-tooltip__surface{background-color:#050505!important;color:#fff!important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip-surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mdc-tooltip .mdc-tooltip__surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-option .mat-pseudo-checkbox-minimal{display:none}:host{display:block;width:100%;height:100%;overflow:hidden}::ng-deep .lib-error-snackbar{background-color:#d32f2f;color:#fff;font-weight:500}::ng-deep .map-container{position:relative;height:81vh;width:100%;overflow:hidden}::ng-deep .toolbox-hidden{visibility:hidden!important}::ng-deep #map{width:100%;height:100%;position:absolute;inset:0;overflow:hidden}::ng-deep .ol-viewport{overflow:hidden!important}::ng-deep ::ng-deep .ol-logo{position:absolute;left:auto;right:3em;top:6.25em}::ng-deep ::ng-deep .ol-copyright{background-color:transparent;position:absolute;bottom:10px;width:250px;display:flex;justify-content:end;right:5px}::ng-deep ::ng-deep .toolbar{position:absolute;top:10px;left:10px;background:#fff;padding:4px;border-radius:4px;display:flex;flex-direction:column;transition:width .3s;z-index:1000;overflow:hidden}::ng-deep ::ng-deep .toolbar.collapsed{width:40px;overflow:hidden}::ng-deep .object-panel{position:absolute;bottom:10px;left:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .object-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep .conflict-panel{position:absolute;bottom:10px;right:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .conflict-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep ::ng-deep .ol-zoom.ol-unselectable.ol-control{display:flex;flex-direction:column;position:absolute}::ng-deep ::ng-deep .ol-scale-text{display:flex}::ng-deep .ol-scale-bar.ol-unselectable{position:absolute;bottom:3rem}::ng-deep .ol-mouse-position{position:absolute;bottom:10px;left:6px;top:auto;background:#0000004d;color:#fffcfc;width:189px;height:30px;padding:2px;border-radius:5px;text-align:center;display:flex;align-items:center;justify-content:flex-start;z-index:1000}::ng-deep .documents-features-wrapper{position:absolute!important;left:45px;top:9px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatListModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: LayerSelectorComponent, selector: "lib-layer-selector", inputs: ["map", "profile", "currentZoomLevel"] }, { kind: "component", type: MapSearchComponent, selector: "lib-map-search", inputs: ["profile"] }, { kind: "component", type: ToolboxComponent, selector: "map-toolbox", inputs: ["map", "showMeasureDistance", "showMeasureArea", "collapsed", "settings", "profile", "WKTInputEnabled", "deleteEnabled"] }, { kind: "component", type: ActiveObjectsComponent, selector: "activeObjects", inputs: ["settings", "profile"], outputs: ["sessionDone"] }, { kind: "component", type: LegendsListComponent, selector: "lib-legends-list", inputs: ["map", "profile"] }, { kind: "component", type: DocumentSearchInfoComponent, selector: "document-search-info" }, { kind: "component", type: FastSwitchSelectorComponent, selector: "lib-fast-switch-selector", inputs: ["map", "profile"] }] });
|
|
5930
6078
|
}
|
|
5931
6079
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: GisKomponentComponent, decorators: [{
|
|
5932
6080
|
type: Component,
|
|
5933
6081
|
args: [{ selector: 'gis-komponent', imports: [CommonModule, MatIconModule, MatListModule, MatSelectModule, LayerSelectorComponent, MapSearchComponent, ToolboxComponent, ActiveObjectsComponent,
|
|
5934
|
-
LegendsListComponent, DocumentSearchInfoComponent], providers: [CurrentItemsService, FeatureLoaderService, DrawLayerSourceService, ZoomService, UndoRedoService, ShowInfoHoverService, HoverInfoSearchService, CenterPointService, PrintDrawLayerSourceService,
|
|
6082
|
+
LegendsListComponent, DocumentSearchInfoComponent, FastSwitchSelectorComponent], providers: [CurrentItemsService, FeatureLoaderService, DrawLayerSourceService, ZoomService, UndoRedoService, ShowInfoHoverService, HoverInfoSearchService, CenterPointService, PrintDrawLayerSourceService,
|
|
5935
6083
|
HighlightService, ShowInfoService, InfoSearchProvider, InteractionHelperService, ConflictAnalysisSearchProvider,
|
|
5936
6084
|
MergeFeaturesService, OverlapService, CowiService, SearchProviderService, AddressSearchService, CadastreSearchService, ShowDocumentInfoService, DocumentSearchService,
|
|
5937
|
-
DmpCatalogService, OlCapabilitiesService, DmpLayerMapperService, GeometrySearchService, GeometrySplitService, PolygonCleanupService], template: "<div #layerSelectorRef class=\"layer-selector-container\">\n @if (selectedProfile && selectedProfile.showLayerSelector) {\n <lib-layer-selector [map]=\"map\" [profile]=\"selectedProfile\" [currentZoomLevel]=\"currentZoomLevel\"></lib-layer-selector>\n }\n</div>\n\n<div #legendsListRef class=\"legends-list-container\">\n @if (selectedProfile && selectedProfile.showLegends) {\n <lib-legends-list [map]=\"map\" [profile]=\"selectedProfile\"></lib-legends-list>\n }\n</div>\n\n<div #documentInfoRef class=\"documents-features-wrapper\">\n <document-search-info></document-search-info>\n</div>\n\n<div #activeObjectsRef class=\"active-objects-container\">\n @if(showActiveObjects && settings && selectedProfile) {\n <activeObjects [settings]=\"settings\" [profile]=\"selectedProfile\" (sessionDone)=\"sessionDoneFromActiveObject()\"></activeObjects>\n }\n</div>\n\n<div #toolbarRef class=\"map-toolbar-container\">\n @if (settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [class.toolbox-hidden]=\"!profileShowToolbox\"\n [collapsed]=\"toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile?.showAreaMeasurement || false\" [showMeasureDistance]=\"selectedProfile?.showDistanceMeasurement || false\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search *ngIf=\"showSearch\" [profile]=\"selectedProfile\"></lib-map-search>\n\n <!-- Kort -->\n <div id=\"map\" class=\"map\"></div>\n</div>\n", styles: ["::ng-deep .global-wrapper-container{background:#4c4d51}::ng-deep .dmp-dialog-content mat-dialog-content{background:#4c4d51!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input{color:#fff!important;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input .search-icon{color:#fff!important}::ng-deep button.ol-zoom-in,::ng-deep button.ol-zoom-out{background:#4c4d51!important;color:#fff;border-radius:5px!important}::ng-deep button.ol-zoom-in:hover,::ng-deep button.ol-zoom-out:hover{color:#e9e3e3;outline:none}::ng-deep button.ol-rotate-reset{border:none}::ng-deep button.ol-rotate-reset:hover{outline:none}::ng-deep [data-tooltip]{position:relative}::ng-deep [data-tooltip]:after{content:attr(data-tooltip);position:absolute;left:calc(100% + 8px);top:50%;transform:translateY(-50%);background:#4c4d51;color:#fff;padding:8px;border-radius:5px;white-space:nowrap;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-size:12px;pointer-events:none;opacity:0;transition:opacity .2s}::ng-deep [data-tooltip]:hover:after{opacity:1}::ng-deep mat-expansion-panel .mat-expansion-panel-header{height:40px!important;min-height:40px!important;background:#ffffff0d;transition:background .2s ease;border-top-left-radius:4px!important;border-top-right-radius:4px!important;padding:0 16px;margin-bottom:2px}::ng-deep mat-expansion-panel .mat-expansion-panel-header:hover{background:#ffffff14!important}::ng-deep mat-expansion-panel .mat-expansion-panel-header .panel-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:320px;margin-right:10px;color:#fff;font-weight:600;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:15px}::ng-deep mat-expansion-panel .mat-expansion-panel-header-title{color:#fff}::ng-deep .custom-image-icon,.compact-icon{background:none}::ng-deep .custom-image-icon img,.compact-icon img{width:100%;height:100%;object-fit:contain;transition:filter .2s ease}::ng-deep .custom-image-icon.active,.compact-icon.active{background:#f7b528!important;border-color:transparent;box-shadow:0 4px 12px #0ea5e966}::ng-deep .custom-image-icon.active img,.compact-icon.active img{filter:brightness(0) invert(1)}::ng-deep .custom-image-icon.active:hover,.compact-icon.active:hover{box-shadow:0 6px 20px #0ea5e980}::ng-deep .custom-image-icon:hover:not(.active),.compact-icon:hover:not(.active){background:#ffffff1a!important;border-color:none;box-shadow:none}::ng-deep .custom-image-icon:hover:not(.active) img,.compact-icon:hover:not(.active) img{filter:brightness(0) invert(.8)}::ng-deep .layer-selector-body .search-section mat-form-field input{color:#fff!important}::ng-deep .search-field .mat-mdc-input-element{color:#fff!important}::ng-deep .mat-mdc-text-field-wrapper{background:#878787!important}::ng-deep .mat-mdc-select-panel{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .active-objects-wrapper.collapsed,::ng-deep .layer-selector-body-wrapper.collapsed,::ng-deep .legends-list-body-wrapper.collapsed,::ng-deep .search-container.collapsed,::ng-deep .toolbox-wrapper.collapsed{width:90px;max-width:90px;min-width:90px}::ng-deep .drag-handle-active-objects,::ng-deep .drag-handle-legends,::ng-deep .drag-handle,::ng-deep .drag-handle-selector,::ng-deep .drag-handle-toolbox{display:flex;align-items:center;justify-content:space-between;padding:0 2px;cursor:move;color:#fff;border-radius:5px;width:100%;box-sizing:border-box}:host{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#dee2e6!important;border-width:1px!important}:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#d1d5db!important;border-width:1px!important;box-shadow:0 0 0 3px #d1d5db40!important}::ng-deep .mat-mdc-form-field-flex{height:40px!important;display:flex!important;align-items:center!important}::ng-deep .mat-expansion-indicator svg{fill:#fff!important}::ng-deep .ol-control{background-color:transparent!important}::ng-deep .search-result-option{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .mat-mdc-autocomplete-panel .mat-pseudo-checkbox{display:none!important}::ng-deep .mat-mdc-autocomplete-panel .mdc-list-item__end{display:none!important}::ng-deep .mat-mdc-tooltip{--mdc-plain-tooltip-container-color: #050505 !important;--mdc-plain-tooltip-supporting-text-color: white !important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip .mdc-tooltip__surface{background-color:#050505!important;color:#fff!important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip-surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mdc-tooltip .mdc-tooltip__surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}:host{display:block;width:100%;height:100%;overflow:hidden}::ng-deep .lib-error-snackbar{background-color:#d32f2f;color:#fff;font-weight:500}::ng-deep .map-container{position:relative;height:81vh;width:100%;overflow:hidden}::ng-deep .toolbox-hidden{visibility:hidden!important}::ng-deep #map{width:100%;height:100%;position:absolute;inset:0;overflow:hidden}::ng-deep .ol-viewport{overflow:hidden!important}::ng-deep ::ng-deep .ol-logo{position:absolute;left:auto;right:3em;top:6.25em}::ng-deep ::ng-deep .ol-copyright{background-color:transparent;position:absolute;bottom:10px;width:250px;display:flex;justify-content:end;right:5px}::ng-deep ::ng-deep .toolbar{position:absolute;top:10px;left:10px;background:#fff;padding:4px;border-radius:4px;display:flex;flex-direction:column;transition:width .3s;z-index:1000;overflow:hidden}::ng-deep ::ng-deep .toolbar.collapsed{width:40px;overflow:hidden}::ng-deep .object-panel{position:absolute;bottom:10px;left:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .object-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep .conflict-panel{position:absolute;bottom:10px;right:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .conflict-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep ::ng-deep .ol-zoom.ol-unselectable.ol-control{display:flex;flex-direction:column;position:absolute}::ng-deep ::ng-deep .ol-scale-text{display:flex}::ng-deep .ol-scale-bar.ol-unselectable{position:absolute;bottom:3rem}::ng-deep .ol-mouse-position{position:absolute;bottom:10px;left:6px;top:auto;background:#0000004d;color:#fffcfc;width:189px;height:30px;padding:2px;border-radius:5px;text-align:center;display:flex;align-items:center;justify-content:flex-start;z-index:1000}::ng-deep .documents-features-wrapper{position:absolute!important;left:45px;top:9px}\n"] }]
|
|
6085
|
+
DmpCatalogService, OlCapabilitiesService, DmpLayerMapperService, GeometrySearchService, GeometrySplitService, PolygonCleanupService], template: "<div #layerSelectorRef class=\"layer-selector-container\">\n @if (selectedProfile && selectedProfile.showLayerSelector) {\n <lib-layer-selector [map]=\"map\" [profile]=\"selectedProfile\" [currentZoomLevel]=\"currentZoomLevel\"></lib-layer-selector>\n }\n</div>\n\n<div #legendsListRef class=\"legends-list-container\">\n @if (selectedProfile && selectedProfile.showLegends) {\n <lib-legends-list [map]=\"map\" [profile]=\"selectedProfile\"></lib-legends-list>\n }\n</div>\n\n<div #fastSwitchSelectorRef class=\"fast-switch-container\">\n @if (selectedProfile && selectedProfile.fastSwitchLayerGroup\n && selectedProfile.fastSwitchLayerGroup.layers \n && selectedProfile.fastSwitchLayerGroup.layers.length > 0) {\n <lib-fast-switch-selector [map]=\"map\" [profile]=\"selectedProfile\"></lib-fast-switch-selector>\n }\n</div>\n\n<div #documentInfoRef class=\"documents-features-wrapper\">\n <document-search-info></document-search-info>\n</div>\n\n<div #activeObjectsRef class=\"active-objects-container\">\n @if(showActiveObjects && settings && selectedProfile) {\n <activeObjects [settings]=\"settings\" [profile]=\"selectedProfile\" (sessionDone)=\"sessionDoneFromActiveObject()\"></activeObjects>\n }\n</div>\n\n<div #toolbarRef class=\"map-toolbar-container\">\n @if (settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [class.toolbox-hidden]=\"!profileShowToolbox\"\n [collapsed]=\"toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile?.showAreaMeasurement || false\" [showMeasureDistance]=\"selectedProfile?.showDistanceMeasurement || false\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search *ngIf=\"showSearch\" [profile]=\"selectedProfile\"></lib-map-search>\n\n <!-- Kort -->\n <div id=\"map\" class=\"map\"></div>\n</div>\n", styles: ["::ng-deep .global-wrapper-container{background:#4c4d51}::ng-deep .dmp-dialog-content mat-dialog-content{background:#4c4d51!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input{color:#fff!important;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input .search-icon{color:#fff!important}::ng-deep .ol-rotate.ol-control{position:absolute;top:10px;right:10px;background:transparent}@media (max-width: 768px){::ng-deep .ol-rotate.ol-control{top:5px;right:5px}}::ng-deep .ol-rotate-reset{position:relative;background:#4c4d51;color:#fff;border-radius:5px;border:none;width:32px;height:32px;display:flex;align-items:center;justify-content:center;margin:0;padding:0}::ng-deep .ol-rotate-reset .hover-text{position:absolute;right:calc(100% + 12px);top:50%;transform:translateY(-50%);background:#4c4d51;color:#fff;padding:8px;border-radius:5px;white-space:nowrap;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:12px;font-weight:500;pointer-events:none;opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease;z-index:9999}::ng-deep .ol-rotate-reset:hover .hover-text{opacity:1;visibility:visible}::ng-deep .ol-rotate-reset .ol-compass{display:inline-block;transition:transform .3s ease;line-height:0}::ng-deep .ol-rotate.ol-control{background:transparent!important;border-radius:0!important;padding:0!important;margin:0!important}::ng-deep .ol-rotate.ol-control button{margin:0}::ng-deep button.ol-zoom-in,::ng-deep button.ol-zoom-out{background:#4c4d51!important;color:#fff;border-radius:5px!important}::ng-deep button.ol-zoom-in:hover,::ng-deep button.ol-zoom-out:hover{color:#e9e3e3;outline:none}::ng-deep button.ol-rotate-reset{border:none}::ng-deep button.ol-rotate-reset:hover{outline:none}::ng-deep [data-tooltip]{position:relative}::ng-deep [data-tooltip]:after{content:attr(data-tooltip);position:absolute;left:calc(100% + 8px);top:50%;transform:translateY(-50%);background:#4c4d51;color:#fff;padding:8px;border-radius:5px;white-space:nowrap;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-size:12px;pointer-events:none;opacity:0;transition:opacity .2s}::ng-deep [data-tooltip]:hover:after{opacity:1}::ng-deep mat-expansion-panel .mat-expansion-panel-header{height:40px!important;min-height:40px!important;background:#ffffff0d;transition:background .2s ease;border-top-left-radius:4px!important;border-top-right-radius:4px!important;padding:0 16px;margin-bottom:2px}::ng-deep mat-expansion-panel .mat-expansion-panel-header:hover{background:#ffffff14!important}::ng-deep mat-expansion-panel .mat-expansion-panel-header .panel-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:320px;margin-right:10px;color:#fff;font-weight:600;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:15px}::ng-deep mat-expansion-panel .mat-expansion-panel-header-title{color:#fff}::ng-deep .custom-image-icon,.compact-icon{background:none}::ng-deep .custom-image-icon img,.compact-icon img{width:100%;height:100%;object-fit:contain;transition:filter .2s ease}::ng-deep .custom-image-icon.active,.compact-icon.active{background:#f7b528!important;border-color:transparent;box-shadow:0 4px 12px #0ea5e966}::ng-deep .custom-image-icon.active img,.compact-icon.active img{filter:brightness(0) invert(1)}::ng-deep .custom-image-icon.active:hover,.compact-icon.active:hover{box-shadow:0 6px 20px #0ea5e980}::ng-deep .custom-image-icon:hover:not(.active),.compact-icon:hover:not(.active){background:#ffffff1a!important;border-color:none;box-shadow:none}::ng-deep .custom-image-icon:hover:not(.active) img,.compact-icon:hover:not(.active) img{filter:brightness(0) invert(.8)}::ng-deep .layer-selector-body .search-section mat-form-field input{color:#fff!important}::ng-deep .search-field .mat-mdc-input-element{color:#fff!important}::ng-deep .mat-mdc-text-field-wrapper{background:#878787!important}::ng-deep .mat-mdc-select-panel{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .active-objects-wrapper.collapsed,::ng-deep .layer-selector-body-wrapper.collapsed,::ng-deep .legends-list-body-wrapper.collapsed,::ng-deep .search-container.collapsed,::ng-deep .toolbox-wrapper.collapsed{width:90px;max-width:90px;min-width:90px}::ng-deep .drag-handle-active-objects,::ng-deep .drag-handle-legends,::ng-deep .drag-handle,::ng-deep .drag-handle-selector,::ng-deep .drag-handle-toolbox{display:flex;align-items:center;justify-content:space-between;padding:0 2px;cursor:move;color:#fff;border-radius:5px;width:100%;box-sizing:border-box}:host{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#dee2e6!important;border-width:1px!important}:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#d1d5db!important;border-width:1px!important;box-shadow:0 0 0 3px #d1d5db40!important}::ng-deep .mat-mdc-form-field-flex{height:40px!important;display:flex!important;align-items:center!important}::ng-deep .mat-expansion-indicator svg{fill:#fff!important}::ng-deep .ol-control{background-color:transparent!important}::ng-deep .search-result-option{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .mat-mdc-autocomplete-panel .mat-pseudo-checkbox{display:none!important}::ng-deep .mat-mdc-autocomplete-panel .mdc-list-item__end{display:none!important}::ng-deep .mat-mdc-tooltip{--mdc-plain-tooltip-container-color: #050505 !important;--mdc-plain-tooltip-supporting-text-color: white !important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip .mdc-tooltip__surface{background-color:#050505!important;color:#fff!important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip-surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mdc-tooltip .mdc-tooltip__surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-option .mat-pseudo-checkbox-minimal{display:none}:host{display:block;width:100%;height:100%;overflow:hidden}::ng-deep .lib-error-snackbar{background-color:#d32f2f;color:#fff;font-weight:500}::ng-deep .map-container{position:relative;height:81vh;width:100%;overflow:hidden}::ng-deep .toolbox-hidden{visibility:hidden!important}::ng-deep #map{width:100%;height:100%;position:absolute;inset:0;overflow:hidden}::ng-deep .ol-viewport{overflow:hidden!important}::ng-deep ::ng-deep .ol-logo{position:absolute;left:auto;right:3em;top:6.25em}::ng-deep ::ng-deep .ol-copyright{background-color:transparent;position:absolute;bottom:10px;width:250px;display:flex;justify-content:end;right:5px}::ng-deep ::ng-deep .toolbar{position:absolute;top:10px;left:10px;background:#fff;padding:4px;border-radius:4px;display:flex;flex-direction:column;transition:width .3s;z-index:1000;overflow:hidden}::ng-deep ::ng-deep .toolbar.collapsed{width:40px;overflow:hidden}::ng-deep .object-panel{position:absolute;bottom:10px;left:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .object-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep .conflict-panel{position:absolute;bottom:10px;right:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .conflict-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep ::ng-deep .ol-zoom.ol-unselectable.ol-control{display:flex;flex-direction:column;position:absolute}::ng-deep ::ng-deep .ol-scale-text{display:flex}::ng-deep .ol-scale-bar.ol-unselectable{position:absolute;bottom:3rem}::ng-deep .ol-mouse-position{position:absolute;bottom:10px;left:6px;top:auto;background:#0000004d;color:#fffcfc;width:189px;height:30px;padding:2px;border-radius:5px;text-align:center;display:flex;align-items:center;justify-content:flex-start;z-index:1000}::ng-deep .documents-features-wrapper{position:absolute!important;left:45px;top:9px}\n"] }]
|
|
5938
6086
|
}], ctorParameters: () => [], propDecorators: { identifier: [{
|
|
5939
6087
|
type: Input,
|
|
5940
6088
|
args: [{ required: true }]
|
|
@@ -5946,6 +6094,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
|
|
|
5946
6094
|
}], legendsListRef: [{
|
|
5947
6095
|
type: ViewChild,
|
|
5948
6096
|
args: ['legendsListRef', { static: true }]
|
|
6097
|
+
}], fastSwitchSelectorRef: [{
|
|
6098
|
+
type: ViewChild,
|
|
6099
|
+
args: ['fastSwitchSelectorRef', { static: true }]
|
|
5949
6100
|
}], layerSelectorRef: [{
|
|
5950
6101
|
type: ViewChild,
|
|
5951
6102
|
args: ['layerSelectorRef', { static: true }]
|