@regionerne/gis-komponent 0.0.117 → 0.0.119
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.
|
@@ -2142,6 +2142,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
|
|
|
2142
2142
|
type: Injectable
|
|
2143
2143
|
}] });
|
|
2144
2144
|
|
|
2145
|
+
class GeometryService {
|
|
2146
|
+
config = inject(GISKOMPONENT_CONFIG);
|
|
2147
|
+
_baseUrl = this.config.apiBaseUrl;
|
|
2148
|
+
_http = inject(HttpClient);
|
|
2149
|
+
validate(wkt) {
|
|
2150
|
+
const url = `${this._baseUrl}/api/geometry/validate`;
|
|
2151
|
+
return this._http.post(url, { wkt: wkt });
|
|
2152
|
+
}
|
|
2153
|
+
dmpValidate(wkt) {
|
|
2154
|
+
const url = `${this._baseUrl}/api/geometry/dmpvalidate`;
|
|
2155
|
+
return this._http.post(url, { wkt: wkt });
|
|
2156
|
+
}
|
|
2157
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: GeometryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2158
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: GeometryService, providedIn: 'root' });
|
|
2159
|
+
}
|
|
2160
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: GeometryService, decorators: [{
|
|
2161
|
+
type: Injectable,
|
|
2162
|
+
args: [{
|
|
2163
|
+
providedIn: 'root'
|
|
2164
|
+
}]
|
|
2165
|
+
}] });
|
|
2166
|
+
|
|
2145
2167
|
class MergeFeaturesService {
|
|
2146
2168
|
_current = inject(CurrentItemsService);
|
|
2147
2169
|
_featureHelper = inject(FeatureHelperService);
|
|
@@ -2149,9 +2171,11 @@ class MergeFeaturesService {
|
|
|
2149
2171
|
_drawLayerService = inject(DrawLayerSourceService);
|
|
2150
2172
|
_undoRedoService = inject(UndoRedoService);
|
|
2151
2173
|
_overLapService = inject(OverlapService);
|
|
2174
|
+
_geometryService = inject(GeometryService);
|
|
2152
2175
|
_selectedMergeFeature;
|
|
2153
2176
|
formatter = new GeoJSON$1();
|
|
2154
2177
|
_formatterOptions = { dataProjection: 'EPSG:4326', featureProjection: 'EPSG:25832' };
|
|
2178
|
+
_wktFormat = new WKT$1();
|
|
2155
2179
|
_selectFilter(f, typeId) {
|
|
2156
2180
|
if (this._featureHelper.isLocked(f)) {
|
|
2157
2181
|
return false;
|
|
@@ -2187,29 +2211,44 @@ class MergeFeaturesService {
|
|
|
2187
2211
|
if (evt.selected && evt.selected.length > 0 && this._selectedMergeFeature.getId() !== evt.selected[0].getId()) {
|
|
2188
2212
|
const feature1 = this.formatter.writeFeatureObject(this._selectedMergeFeature, this._formatterOptions);
|
|
2189
2213
|
const feature2 = this.formatter.writeFeatureObject(evt.selected[0], this._formatterOptions);
|
|
2190
|
-
const bufferedFeature1 = buffer(feature1,
|
|
2191
|
-
const bufferedFeature2 = buffer(feature2,
|
|
2192
|
-
const
|
|
2214
|
+
const bufferedFeature1 = buffer(feature1, 1, { units: 'centimeters' });
|
|
2215
|
+
const bufferedFeature2 = buffer(feature2, 1, { units: 'centimeters' });
|
|
2216
|
+
const newFeatureObjectUnminusBuffered = union(featureCollection([bufferedFeature1, bufferedFeature2]));
|
|
2217
|
+
const newFeatureObject = buffer(newFeatureObjectUnminusBuffered, -1, { units: 'centimeters' });
|
|
2193
2218
|
const newFeature = this.formatter.readFeature(newFeatureObject, this._formatterOptions);
|
|
2194
|
-
this.
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
this.
|
|
2204
|
-
this._featureHelper.
|
|
2205
|
-
this.
|
|
2206
|
-
|
|
2219
|
+
const newFeatureWKT = this._wktFormat.writeGeometry(newFeature.getGeometry());
|
|
2220
|
+
this._geometryService.validate(newFeatureWKT).subscribe({
|
|
2221
|
+
next: r => {
|
|
2222
|
+
const result = r;
|
|
2223
|
+
if (result.wasCorrected) {
|
|
2224
|
+
const geometry = this._wktFormat.readGeometry(result.correctedGeometries[0]);
|
|
2225
|
+
newFeature.setGeometry(geometry);
|
|
2226
|
+
}
|
|
2227
|
+
this._drawLayerService.source.removeFeatures([evt.selected[0], this._selectedMergeFeature]);
|
|
2228
|
+
const style = this._selectedMergeFeature.getStyle();
|
|
2229
|
+
const typeId = this._featureHelper.typeId(this._selectedMergeFeature);
|
|
2230
|
+
this._overLapService.handleOverlaps([newFeature]).subscribe({
|
|
2231
|
+
next: overlapResult => {
|
|
2232
|
+
this._selectedMergeFeature?.setGeometry(overlapResult[0].getGeometry());
|
|
2233
|
+
const mergedFeature = evt.selected[0].clone();
|
|
2234
|
+
mergedFeature.setGeometry(overlapResult[0].getGeometry());
|
|
2235
|
+
mergedFeature.setStyle(style);
|
|
2236
|
+
this._featureHelper.setTypeId(mergedFeature, typeId);
|
|
2237
|
+
this._featureHelper.setId(mergedFeature);
|
|
2238
|
+
this._drawLayerService.source.addFeature(mergedFeature);
|
|
2239
|
+
this._undoRedoService.addStep();
|
|
2240
|
+
this._selectedMergeFeature = undefined;
|
|
2241
|
+
map.removeInteraction(select);
|
|
2242
|
+
done();
|
|
2243
|
+
}
|
|
2244
|
+
});
|
|
2207
2245
|
}
|
|
2208
2246
|
});
|
|
2209
2247
|
}
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2248
|
+
else {
|
|
2249
|
+
this._selectedMergeFeature = undefined;
|
|
2250
|
+
done();
|
|
2251
|
+
}
|
|
2213
2252
|
}
|
|
2214
2253
|
else {
|
|
2215
2254
|
this._selectedMergeFeature = evt.selected[0];
|
|
@@ -2629,28 +2668,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
|
|
|
2629
2668
|
type: Injectable
|
|
2630
2669
|
}] });
|
|
2631
2670
|
|
|
2632
|
-
class GeometryService {
|
|
2633
|
-
config = inject(GISKOMPONENT_CONFIG);
|
|
2634
|
-
_baseUrl = this.config.apiBaseUrl;
|
|
2635
|
-
_http = inject(HttpClient);
|
|
2636
|
-
validate(wkt) {
|
|
2637
|
-
const url = `${this._baseUrl}/api/geometry/validate`;
|
|
2638
|
-
return this._http.post(url, { wkt: wkt });
|
|
2639
|
-
}
|
|
2640
|
-
dmpValidate(wkt) {
|
|
2641
|
-
const url = `${this._baseUrl}/api/geometry/dmpvalidate`;
|
|
2642
|
-
return this._http.post(url, { wkt: wkt });
|
|
2643
|
-
}
|
|
2644
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: GeometryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2645
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: GeometryService, providedIn: 'root' });
|
|
2646
|
-
}
|
|
2647
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: GeometryService, decorators: [{
|
|
2648
|
-
type: Injectable,
|
|
2649
|
-
args: [{
|
|
2650
|
-
providedIn: 'root'
|
|
2651
|
-
}]
|
|
2652
|
-
}] });
|
|
2653
|
-
|
|
2654
2671
|
class PrintHelperService {
|
|
2655
2672
|
_layerHelper = inject(LayerHelperService);
|
|
2656
2673
|
setVisibiltyOnDOMElements(baseElement, visible, printSetting) {
|
|
@@ -2698,6 +2715,7 @@ class PrintHelperService {
|
|
|
2698
2715
|
setTimeout(() => {
|
|
2699
2716
|
html2canvas(htmlElement, {
|
|
2700
2717
|
useCORS: true,
|
|
2718
|
+
allowTaint: true,
|
|
2701
2719
|
}).then(originalCanvas => {
|
|
2702
2720
|
if (printSetting.printDimensions) {
|
|
2703
2721
|
const srcW = originalCanvas.width;
|
|
@@ -4740,6 +4758,7 @@ class ToolboxComponent {
|
|
|
4740
4758
|
this._printHelper.setVisibiltyOnDOMElements(htmlElement, false);
|
|
4741
4759
|
html2canvas(htmlElement, {
|
|
4742
4760
|
useCORS: true,
|
|
4761
|
+
allowTaint: true,
|
|
4743
4762
|
}).then(canvas => {
|
|
4744
4763
|
const imgData = canvas.toDataURL(this.format);
|
|
4745
4764
|
const link = document.createElement('a');
|
|
@@ -4753,8 +4772,11 @@ class ToolboxComponent {
|
|
|
4753
4772
|
}
|
|
4754
4773
|
link.download = download;
|
|
4755
4774
|
link.click();
|
|
4756
|
-
|
|
4757
|
-
|
|
4775
|
+
})
|
|
4776
|
+
.catch(error => {
|
|
4777
|
+
console.error("🚀 ~ ToolboxComponent ~ doPrint ~ error:", error);
|
|
4778
|
+
})
|
|
4779
|
+
.finally(() => this._printHelper.setVisibiltyOnDOMElements(htmlElement, true));
|
|
4758
4780
|
}
|
|
4759
4781
|
toggleSelectFeatureHighlight() {
|
|
4760
4782
|
if (this.activeMode === 'select-highlight') {
|
|
@@ -6291,8 +6313,8 @@ class GisKomponentComponent {
|
|
|
6291
6313
|
case 'WMS':
|
|
6292
6314
|
result = new ImageLayer({
|
|
6293
6315
|
source: new ImageWMS({
|
|
6316
|
+
crossOrigin: 'anonymous', // Print requires CORS-enabled sources
|
|
6294
6317
|
url: layer.baseUrl,
|
|
6295
|
-
// crossOrigin: 'anonymous', // This gives us CORS errors sometimes
|
|
6296
6318
|
params,
|
|
6297
6319
|
})
|
|
6298
6320
|
});
|
|
@@ -6301,7 +6323,7 @@ class GisKomponentComponent {
|
|
|
6301
6323
|
result = new TileLayer({
|
|
6302
6324
|
source: new TileWMS({
|
|
6303
6325
|
url: layer.baseUrl,
|
|
6304
|
-
|
|
6326
|
+
crossOrigin: 'anonymous', // Print requires CORS-enabled sources
|
|
6305
6327
|
params,
|
|
6306
6328
|
})
|
|
6307
6329
|
});
|
|
@@ -6311,7 +6333,7 @@ class GisKomponentComponent {
|
|
|
6311
6333
|
const options = optionsFromCapabilities(wmtsOptions[layer.baseUrl], {
|
|
6312
6334
|
layer: layer.layers,
|
|
6313
6335
|
matrixSet: layer.projection || projection,
|
|
6314
|
-
crossOrigin: 'anonymous'
|
|
6336
|
+
crossOrigin: 'anonymous' // Print requires CORS-enabled sources
|
|
6315
6337
|
});
|
|
6316
6338
|
result = new TileLayer({
|
|
6317
6339
|
source: new WMTS(options)
|