@regionerne/gis-komponent 0.0.117 → 0.0.118

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, 5, { units: 'centimeters' });
2191
- const bufferedFeature2 = buffer(feature2, 5, { units: 'centimeters' });
2192
- const newFeatureObject = union(featureCollection([bufferedFeature1, bufferedFeature2]));
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._drawLayerService.source.removeFeatures([evt.selected[0], this._selectedMergeFeature]);
2195
- const style = this._selectedMergeFeature.getStyle();
2196
- const typeId = this._featureHelper.typeId(this._selectedMergeFeature);
2197
- this._overLapService.handleOverlaps([newFeature]).subscribe({
2198
- next: overlapResult => {
2199
- this._selectedMergeFeature?.setGeometry(overlapResult[0].getGeometry());
2200
- const mergedFeature = evt.selected[0].clone();
2201
- mergedFeature.setGeometry(overlapResult[0].getGeometry());
2202
- mergedFeature.setStyle(style);
2203
- this._featureHelper.setTypeId(mergedFeature, typeId);
2204
- this._featureHelper.setId(mergedFeature);
2205
- this._drawLayerService.source.addFeature(mergedFeature);
2206
- this._undoRedoService.addStep();
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
- this._selectedMergeFeature = undefined;
2211
- map.removeInteraction(select);
2212
- done();
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) {