@artstesh/maps 4.0.5 → 4.0.7

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.
Files changed (101) hide show
  1. package/dist/esm2020/map/helpers/index.mjs +3 -1
  2. package/dist/esm2020/map/helpers/marker-style.helper.mjs +5 -1
  3. package/dist/esm2020/map/helpers/polygon-style.helper.mjs +16 -0
  4. package/dist/esm2020/map/helpers/text-style.helper.mjs +14 -0
  5. package/dist/esm2020/map/map-plate/features/index.mjs +2 -1
  6. package/dist/esm2020/map/map-plate/features/polygons/polygons.component.mjs +41 -0
  7. package/dist/esm2020/map/map-plate/layers/cluster-layer/cluster-layer-factory.service.mjs +59 -0
  8. package/dist/esm2020/map/map-plate/layers/cluster-layer/cluster-layer.component.mjs +50 -0
  9. package/dist/esm2020/map/map-plate/layers/cluster-layer/cluster-layer.manager.mjs +18 -0
  10. package/dist/esm2020/map/map-plate/layers/cluster-layer/cluster-layer.settings.mjs +61 -0
  11. package/dist/esm2020/map/map-plate/layers/index.mjs +3 -1
  12. package/dist/esm2020/map/map-plate/map-plate.component.mjs +4 -3
  13. package/dist/esm2020/map/map.module.mjs +23 -3
  14. package/dist/esm2020/map/messages/commands/add-layer.command.mjs +1 -1
  15. package/dist/esm2020/map/messages/commands/fit-to-features.command.mjs +13 -0
  16. package/dist/esm2020/map/messages/events/map-click.event.mjs +3 -2
  17. package/dist/esm2020/map/models/i-identified.mjs +2 -0
  18. package/dist/esm2020/map/models/index.mjs +2 -1
  19. package/dist/esm2020/map/models/map.constants.mjs +4 -0
  20. package/dist/esm2020/map/models/marker-model.mjs +3 -2
  21. package/dist/esm2020/map/models/polygon.model.mjs +25 -0
  22. package/dist/esm2020/map/services/map-click.service.mjs +7 -3
  23. package/dist/esm2020/map/services/map-feature.service.mjs +39 -0
  24. package/dist/esm2020/map/services/map-management.service.mjs +6 -3
  25. package/dist/esm2020/map/services/message-registrator.service.mjs +9 -6
  26. package/dist/esm2020/src/map/helpers/index.mjs +3 -1
  27. package/dist/esm2020/src/map/helpers/marker-style.helper.mjs +5 -1
  28. package/dist/esm2020/src/map/helpers/polygon-style.helper.mjs +16 -0
  29. package/dist/esm2020/src/map/helpers/text-style.helper.mjs +14 -0
  30. package/dist/esm2020/src/map/map-plate/features/index.mjs +2 -1
  31. package/dist/esm2020/src/map/map-plate/features/polygons/polygons.component.mjs +41 -0
  32. package/dist/esm2020/src/map/map-plate/layers/cluster-layer/cluster-layer-factory.service.mjs +59 -0
  33. package/dist/esm2020/src/map/map-plate/layers/cluster-layer/cluster-layer.component.mjs +50 -0
  34. package/dist/esm2020/src/map/map-plate/layers/cluster-layer/cluster-layer.manager.mjs +18 -0
  35. package/dist/esm2020/src/map/map-plate/layers/cluster-layer/cluster-layer.settings.mjs +61 -0
  36. package/dist/esm2020/src/map/map-plate/layers/index.mjs +3 -1
  37. package/dist/esm2020/src/map/map-plate/map-plate.component.mjs +4 -3
  38. package/dist/esm2020/src/map/map.module.mjs +23 -3
  39. package/dist/esm2020/src/map/messages/commands/add-layer.command.mjs +1 -1
  40. package/dist/esm2020/src/map/messages/commands/fit-to-features.command.mjs +13 -0
  41. package/dist/esm2020/src/map/messages/events/map-click.event.mjs +3 -2
  42. package/dist/esm2020/src/map/models/i-identified.mjs +2 -0
  43. package/dist/esm2020/src/map/models/index.mjs +2 -1
  44. package/dist/esm2020/src/map/models/map.constants.mjs +4 -0
  45. package/dist/esm2020/src/map/models/marker-model.mjs +3 -2
  46. package/dist/esm2020/src/map/models/polygon.model.mjs +25 -0
  47. package/dist/esm2020/src/map/services/map-click.service.mjs +7 -3
  48. package/dist/esm2020/src/map/services/map-feature.service.mjs +39 -0
  49. package/dist/esm2020/src/map/services/map-management.service.mjs +6 -3
  50. package/dist/esm2020/src/map/services/message-registrator.service.mjs +9 -6
  51. package/dist/fesm2015/maps-components-src-map.mjs +355 -17
  52. package/dist/fesm2015/maps-components-src-map.mjs.map +1 -1
  53. package/dist/fesm2015/maps-components.mjs +355 -17
  54. package/dist/fesm2015/maps-components.mjs.map +1 -1
  55. package/dist/fesm2020/maps-components-src-map.mjs +349 -16
  56. package/dist/fesm2020/maps-components-src-map.mjs.map +1 -1
  57. package/dist/fesm2020/maps-components.mjs +349 -16
  58. package/dist/fesm2020/maps-components.mjs.map +1 -1
  59. package/dist/map/helpers/index.d.ts +2 -0
  60. package/dist/map/helpers/marker-style.helper.d.ts +2 -0
  61. package/dist/map/helpers/polygon-style.helper.d.ts +4 -0
  62. package/dist/map/helpers/text-style.helper.d.ts +4 -0
  63. package/dist/map/map-plate/features/index.d.ts +1 -0
  64. package/dist/map/map-plate/features/polygons/polygons.component.d.ts +16 -0
  65. package/dist/map/map-plate/layers/cluster-layer/cluster-layer-factory.service.d.ts +11 -0
  66. package/dist/map/map-plate/layers/cluster-layer/cluster-layer.component.d.ts +21 -0
  67. package/dist/map/map-plate/layers/cluster-layer/cluster-layer.manager.d.ts +11 -0
  68. package/dist/map/map-plate/layers/cluster-layer/cluster-layer.settings.d.ts +20 -0
  69. package/dist/map/map-plate/layers/index.d.ts +2 -0
  70. package/dist/map/map.module.d.ts +4 -2
  71. package/dist/map/messages/commands/add-layer.command.d.ts +3 -2
  72. package/dist/map/messages/commands/fit-to-features.command.d.ts +10 -0
  73. package/dist/map/messages/events/map-click.event.d.ts +10 -2
  74. package/dist/map/models/i-identified.d.ts +3 -0
  75. package/dist/map/models/index.d.ts +1 -0
  76. package/dist/map/models/map.constants.d.ts +3 -0
  77. package/dist/map/models/polygon.model.d.ts +19 -0
  78. package/dist/map/services/map-feature.service.d.ts +14 -0
  79. package/dist/map/services/message-registrator.service.d.ts +2 -1
  80. package/dist/src/map/helpers/index.d.ts +2 -0
  81. package/dist/src/map/helpers/marker-style.helper.d.ts +2 -0
  82. package/dist/src/map/helpers/polygon-style.helper.d.ts +4 -0
  83. package/dist/src/map/helpers/text-style.helper.d.ts +4 -0
  84. package/dist/src/map/map-plate/features/index.d.ts +1 -0
  85. package/dist/src/map/map-plate/features/polygons/polygons.component.d.ts +16 -0
  86. package/dist/src/map/map-plate/layers/cluster-layer/cluster-layer-factory.service.d.ts +11 -0
  87. package/dist/src/map/map-plate/layers/cluster-layer/cluster-layer.component.d.ts +21 -0
  88. package/dist/src/map/map-plate/layers/cluster-layer/cluster-layer.manager.d.ts +11 -0
  89. package/dist/src/map/map-plate/layers/cluster-layer/cluster-layer.settings.d.ts +20 -0
  90. package/dist/src/map/map-plate/layers/index.d.ts +2 -0
  91. package/dist/src/map/map.module.d.ts +4 -2
  92. package/dist/src/map/messages/commands/add-layer.command.d.ts +3 -2
  93. package/dist/src/map/messages/commands/fit-to-features.command.d.ts +10 -0
  94. package/dist/src/map/messages/events/map-click.event.d.ts +10 -2
  95. package/dist/src/map/models/i-identified.d.ts +3 -0
  96. package/dist/src/map/models/index.d.ts +1 -0
  97. package/dist/src/map/models/map.constants.d.ts +3 -0
  98. package/dist/src/map/models/polygon.model.d.ts +19 -0
  99. package/dist/src/map/services/map-feature.service.d.ts +14 -0
  100. package/dist/src/map/services/message-registrator.service.d.ts +2 -1
  101. package/package.json +1 -1
@@ -4,6 +4,8 @@ import * as i4 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import { Feature } from 'ol';
6
6
  import { Point } from 'ol/geom';
7
+ import { GeoJSON, WKT } from 'ol/format';
8
+ import { getCenter, createEmpty, extend } from 'ol/extent';
7
9
  import { useGeographic, get } from 'ol/proj';
8
10
  import { Subject } from 'rxjs';
9
11
  import { PostboyService, PostboyAbstractRegistrator } from '@artstesh/postboy';
@@ -15,8 +17,11 @@ import { filter, first } from 'rxjs/operators';
15
17
  import { XYZ, Vector } from 'ol/source';
16
18
  import { Vector as Vector$1 } from 'ol/layer';
17
19
  import Overlay from 'ol/Overlay';
20
+ import { bbox } from 'ol/loadingstrategy';
21
+ import { fromExtent } from 'ol/geom/Polygon';
22
+ import Cluster from 'ol/source/Cluster';
18
23
  import Style from 'ol/style/Style';
19
- import { Icon, Circle, Fill, Stroke } from 'ol/style';
24
+ import { Icon, Circle, Fill, Stroke, Text } from 'ol/style';
20
25
 
21
26
  class DestructibleComponent {
22
27
  constructor() {
@@ -120,6 +125,10 @@ class IdGenerator {
120
125
  }
121
126
  IdGenerator.collection = 'ABCDEFGHIJKLMNOPQRSTUVWXTZ0123456789'.split('');
122
127
 
128
+ class MapConstants {
129
+ }
130
+ MapConstants.FeatureInfo = 'f-info';
131
+
123
132
  class MarkerModel {
124
133
  constructor(lat, lng, id, info) {
125
134
  this.lat = lat;
@@ -135,11 +144,33 @@ class MarkerModel {
135
144
  const feature = new Feature(new Point([this.lng, this.lat]));
136
145
  feature.setId(this.id);
137
146
  if (this.info)
138
- feature.set('info', this.info);
147
+ feature.set(MapConstants.FeatureInfo, this.info);
139
148
  return feature;
140
149
  }
141
150
  }
142
151
 
152
+ class PolygonModel {
153
+ static fromGeoJson(id, json, info) {
154
+ let feature = new GeoJSON().readFeature(json);
155
+ feature.setId(id);
156
+ return new PolygonModel(feature, id, info);
157
+ }
158
+ static fromWKT(id, wkt, info) {
159
+ let feature = new WKT().readFeature(wkt);
160
+ feature.setId(id);
161
+ return new PolygonModel(feature, id, info);
162
+ }
163
+ constructor(feature, id, info) {
164
+ this.info = info;
165
+ this.id = id == null ? IdGenerator.get() : id;
166
+ this._feature = feature;
167
+ [this.lng, this.lat] = getCenter(this._feature.getGeometry()?.getExtent());
168
+ }
169
+ get feature() {
170
+ return this._feature;
171
+ }
172
+ }
173
+
143
174
  class GenericMessage {
144
175
  }
145
176
  class CallbackMessage extends GenericMessage {
@@ -166,10 +197,11 @@ class MapRenderedEvent extends GenericMessage {
166
197
  MapRenderedEvent.ID = 'b6121807-3b89-4cd3-82cf-089d2cefdc4f';
167
198
 
168
199
  class MapClickEvent extends GenericMessage {
169
- constructor(coordinates, entities) {
200
+ constructor(coordinates, entities, features) {
170
201
  super();
171
202
  this.coordinates = coordinates;
172
203
  this.entities = entities;
204
+ this.features = features;
173
205
  }
174
206
  get id() {
175
207
  return MapClickEvent.ID;
@@ -244,6 +276,18 @@ class RemoveTileCommand extends GenericMessage {
244
276
  }
245
277
  RemoveTileCommand.ID = 'c36ccc0b-5638-4819-b148-2de57a59a5b7';
246
278
 
279
+ class FitToFeaturesCommand extends GenericMessage {
280
+ constructor(features, zoomAfter = 0) {
281
+ super();
282
+ this.features = features;
283
+ this.zoomAfter = zoomAfter;
284
+ }
285
+ get id() {
286
+ return FitToFeaturesCommand.ID;
287
+ }
288
+ }
289
+ FitToFeaturesCommand.ID = '76cdc091-3793-4b6c-82f7-1e0334cf08a8';
290
+
247
291
  class MapPostboyService extends PostboyService {
248
292
  constructor() {
249
293
  super(...arguments);
@@ -300,8 +344,11 @@ class MapManagementService {
300
344
  this.postboy.subscribe(PlaceLayerFeaturesCommand.ID).subscribe((c) => {
301
345
  if (!this.layers[c.layer])
302
346
  return;
303
- this.layers[c.layer]?.getSource()?.clear();
304
- this.layers[c.layer].getSource()?.addFeatures(c.features);
347
+ let source = this.layers[c.layer]?.getSource();
348
+ if (!!source['getSource'])
349
+ source = source?.getSource();
350
+ source?.clear();
351
+ source?.addFeatures(c.features);
305
352
  });
306
353
  }
307
354
  observeRemoveLayer() {
@@ -333,6 +380,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
333
380
  type: Injectable
334
381
  }], ctorParameters: function () { return [{ type: MapPostboyService }]; } });
335
382
 
383
+ class MapFeatureService {
384
+ constructor(postboy) {
385
+ this.postboy = postboy;
386
+ }
387
+ up() {
388
+ this.observeMapRender();
389
+ this.observeFitToFeatures();
390
+ }
391
+ observeMapRender() {
392
+ this.postboy.subscribe(MapRenderedEvent.ID).subscribe((m) => {
393
+ this.map = m.map;
394
+ });
395
+ }
396
+ observeFitToFeatures() {
397
+ this.postboy.subscribe(FitToFeaturesCommand.ID).subscribe((m) => {
398
+ this.fitToGeometries(m.features.map((f) => f.getGeometry()), m.zoomAfter);
399
+ });
400
+ }
401
+ fitToGeometries(geometries, zoomAfter) {
402
+ if (!geometries?.length || !this.map)
403
+ return;
404
+ const extent = createEmpty();
405
+ geometries.forEach((g) => extend(extent, g.getExtent()));
406
+ this.map.getView().fit(extent);
407
+ this.map.getView().setZoom(this.map.getView().getZoom() + zoomAfter);
408
+ }
409
+ }
410
+ MapFeatureService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MapFeatureService, deps: [{ token: MapPostboyService }], target: i0.ɵɵFactoryTarget.Injectable });
411
+ MapFeatureService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MapFeatureService });
412
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MapFeatureService, decorators: [{
413
+ type: Injectable
414
+ }], ctorParameters: function () { return [{ type: MapPostboyService }]; } });
415
+
336
416
  class MapClickService {
337
417
  constructor(postboy) {
338
418
  this.postboy = postboy;
@@ -349,7 +429,7 @@ class MapClickService {
349
429
  });
350
430
  }
351
431
  onClick(ev) {
352
- const model = new MapClickEvent(ev.coordinate, {});
432
+ const model = new MapClickEvent(ev.coordinate, {}, {});
353
433
  this.map?.forEachFeatureAtPixel(ev.pixel, (f, l) => {
354
434
  this.getFeatureCollectionWithInner([f])
355
435
  .filter((f) => f.getId() != null)
@@ -357,7 +437,10 @@ class MapClickService {
357
437
  let layerName = l.get('name');
358
438
  if (!model.entities[layerName])
359
439
  model.entities[layerName] = [];
360
- model.entities[layerName].push(f.getId());
440
+ if (!model.features[layerName])
441
+ model.features[layerName] = [];
442
+ model.entities[layerName].push({ id: fs.getId(), ...fs.get(MapConstants.FeatureInfo) });
443
+ model.features[layerName].push(fs);
361
444
  });
362
445
  });
363
446
  return model;
@@ -378,9 +461,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
378
461
  }], ctorParameters: function () { return [{ type: MapPostboyService }]; } });
379
462
 
380
463
  class MessageRegistratorService extends PostboyAbstractRegistrator {
381
- constructor(service, management, state, interaction) {
464
+ constructor(service, management, state, feature, interaction) {
382
465
  super(service);
383
- this.registerServices([management, state, interaction]);
466
+ this.registerServices([management, state, interaction, feature]);
384
467
  }
385
468
  _up() {
386
469
  this.registerReplay(MapRenderedEvent.ID);
@@ -391,13 +474,14 @@ class MessageRegistratorService extends PostboyAbstractRegistrator {
391
474
  this.registerSubject(RemoveTileCommand.ID);
392
475
  this.registerSubject(MapClickEvent.ID);
393
476
  this.registerSubject(CloseTooltipCommand.ID);
477
+ this.registerSubject(FitToFeaturesCommand.ID);
394
478
  }
395
479
  }
396
- MessageRegistratorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MessageRegistratorService, deps: [{ token: MapPostboyService }, { token: MapManagementService }, { token: MapStateService }, { token: MapClickService }], target: i0.ɵɵFactoryTarget.Injectable });
480
+ MessageRegistratorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MessageRegistratorService, deps: [{ token: MapPostboyService }, { token: MapManagementService }, { token: MapStateService }, { token: MapFeatureService }, { token: MapClickService }], target: i0.ɵɵFactoryTarget.Injectable });
397
481
  MessageRegistratorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MessageRegistratorService });
398
482
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MessageRegistratorService, decorators: [{
399
483
  type: Injectable
400
- }], ctorParameters: function () { return [{ type: MapPostboyService }, { type: MapManagementService }, { type: MapStateService }, { type: MapClickService }]; } });
484
+ }], ctorParameters: function () { return [{ type: MapPostboyService }, { type: MapManagementService }, { type: MapStateService }, { type: MapFeatureService }, { type: MapClickService }]; } });
401
485
 
402
486
  class MapPlateFactory {
403
487
  build(settings) {
@@ -513,10 +597,10 @@ class MapPlateComponent extends DestructibleComponent {
513
597
  }
514
598
  }
515
599
  MapPlateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MapPlateComponent, deps: [{ token: i0.ElementRef }, { token: MapPostboyService }, { token: MapPlateFactory }, { token: MessageRegistratorService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
516
- MapPlateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MapPlateComponent, selector: "lib-map-plate", inputs: { settings: "settings" }, providers: [MessageRegistratorService, MapStateService, MapManagementService, MapClickService], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n<lib-osm-tile-layer *ngIf=\"osmUrl && map\" [map]=\"map\" [url]=\"osmUrl\"></lib-osm-tile-layer>\n", styles: ["lib-map-plate{position:relative;display:flex;flex-direction:column;height:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OsmTileLayerComponent, selector: "lib-osm-tile-layer", inputs: ["url", "map"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
600
+ MapPlateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MapPlateComponent, selector: "lib-map-plate", inputs: { settings: "settings" }, providers: [MessageRegistratorService, MapStateService, MapManagementService, MapClickService, MapFeatureService], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n<lib-osm-tile-layer *ngIf=\"osmUrl && map\" [map]=\"map\" [url]=\"osmUrl\"></lib-osm-tile-layer>\n", styles: ["lib-map-plate{position:relative;display:flex;flex-direction:column;height:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OsmTileLayerComponent, selector: "lib-osm-tile-layer", inputs: ["url", "map"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
517
601
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MapPlateComponent, decorators: [{
518
602
  type: Component,
519
- args: [{ selector: 'lib-map-plate', changeDetection: ChangeDetectionStrategy.OnPush, providers: [MessageRegistratorService, MapStateService, MapManagementService, MapClickService], template: "<ng-content></ng-content>\n<lib-osm-tile-layer *ngIf=\"osmUrl && map\" [map]=\"map\" [url]=\"osmUrl\"></lib-osm-tile-layer>\n", styles: ["lib-map-plate{position:relative;display:flex;flex-direction:column;height:100%}\n"] }]
603
+ args: [{ selector: 'lib-map-plate', changeDetection: ChangeDetectionStrategy.OnPush, providers: [MessageRegistratorService, MapStateService, MapManagementService, MapClickService, MapFeatureService], template: "<ng-content></ng-content>\n<lib-osm-tile-layer *ngIf=\"osmUrl && map\" [map]=\"map\" [url]=\"osmUrl\"></lib-osm-tile-layer>\n", styles: ["lib-map-plate{position:relative;display:flex;flex-direction:column;height:100%}\n"] }]
520
604
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: MapPostboyService }, { type: MapPlateFactory }, { type: MessageRegistratorService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { settings: [{
521
605
  type: Input
522
606
  }] } });
@@ -892,6 +976,206 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
892
976
  type: Input
893
977
  }] } });
894
978
 
979
+ class PolygonsComponent extends DestructibleComponent {
980
+ constructor(postboy) {
981
+ super();
982
+ this.postboy = postboy;
983
+ this.layerName = '';
984
+ this._polygons = [];
985
+ }
986
+ set polygons(value) {
987
+ this._polygons = value;
988
+ this.putPolygons();
989
+ }
990
+ ngOnInit() {
991
+ this.postboy
992
+ .subscribe(MapRenderedEvent.ID)
993
+ .pipe(filter((m) => !!m), first())
994
+ .subscribe(() => this.putPolygons());
995
+ }
996
+ putPolygons() {
997
+ if (!this._polygons?.length)
998
+ return;
999
+ this.postboy.fire(new PlaceLayerFeaturesCommand(this.layerName, this._polygons.map((m) => m.feature)));
1000
+ }
1001
+ }
1002
+ PolygonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PolygonsComponent, deps: [{ token: MapPostboyService }], target: i0.ɵɵFactoryTarget.Component });
1003
+ PolygonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: PolygonsComponent, selector: "lib-polygons", inputs: { layerName: "layerName", polygons: "polygons" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1004
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PolygonsComponent, decorators: [{
1005
+ type: Component,
1006
+ args: [{ selector: 'lib-polygons', template: '', changeDetection: ChangeDetectionStrategy.OnPush }]
1007
+ }], ctorParameters: function () { return [{ type: MapPostboyService }]; }, propDecorators: { layerName: [{
1008
+ type: Input
1009
+ }], polygons: [{
1010
+ type: Input
1011
+ }] } });
1012
+
1013
+ class ClusterLayerSettings {
1014
+ constructor() {
1015
+ this.name = IdGenerator.get();
1016
+ this.zIndex = 1;
1017
+ this.maxZoom = 19;
1018
+ this.minZoom = 0;
1019
+ this.distance = 20;
1020
+ this.bbox = false;
1021
+ }
1022
+ static copy(model) {
1023
+ const result = new ClusterLayerSettings();
1024
+ result.name = model.name;
1025
+ result.maxZoom = model.maxZoom;
1026
+ result.minZoom = model.minZoom;
1027
+ result.zIndex = model.zIndex;
1028
+ result.bbox = model.bbox;
1029
+ result.distance = model.distance;
1030
+ result.style = model.style;
1031
+ return result;
1032
+ }
1033
+ setZIndex(zIndex) {
1034
+ return ClusterLayerSettings.copy({ ...this, zIndex });
1035
+ }
1036
+ setDistance(distance) {
1037
+ return ClusterLayerSettings.copy({ ...this, distance });
1038
+ }
1039
+ setName(name) {
1040
+ return ClusterLayerSettings.copy({ ...this, name });
1041
+ }
1042
+ setMaxZoom(maxZoom) {
1043
+ return ClusterLayerSettings.copy({ ...this, maxZoom });
1044
+ }
1045
+ setMinZoom(minZoom) {
1046
+ return ClusterLayerSettings.copy({ ...this, minZoom });
1047
+ }
1048
+ setBbox(bbox) {
1049
+ return ClusterLayerSettings.copy({ ...this, bbox });
1050
+ }
1051
+ setStyle(style) {
1052
+ return ClusterLayerSettings.copy({ ...this, style });
1053
+ }
1054
+ isSame(model) {
1055
+ if (this.maxZoom !== model.maxZoom)
1056
+ return false;
1057
+ if (this.minZoom !== model.minZoom)
1058
+ return false;
1059
+ if (this.zIndex !== model.zIndex)
1060
+ return false;
1061
+ if (this.name !== model.name)
1062
+ return false;
1063
+ if (this.distance !== model.distance)
1064
+ return false;
1065
+ if (this.bbox !== model.bbox)
1066
+ return false;
1067
+ if (this.style !== model.style)
1068
+ return false;
1069
+ return true;
1070
+ }
1071
+ }
1072
+
1073
+ class ClusterLayerManager {
1074
+ constructor(settings, layer, postboy) {
1075
+ this.settings = settings;
1076
+ this.layer = layer;
1077
+ this.postboy = postboy;
1078
+ this.observeClick();
1079
+ }
1080
+ observeClick() {
1081
+ this.postboy.subscribe(MapClickEvent.ID).subscribe((m) => {
1082
+ if ((m.features[this.settings.name]?.length ?? 0) > 1) {
1083
+ this.postboy.fire(new FitToFeaturesCommand(m.features[this.settings.name], -1));
1084
+ }
1085
+ });
1086
+ }
1087
+ }
1088
+
1089
+ class ClusterLayerFactory {
1090
+ build(settings, postboy) {
1091
+ const source = new Vector({
1092
+ strategy: settings.bbox ? bbox : undefined,
1093
+ });
1094
+ const cluster = new Cluster({
1095
+ distance: settings.distance,
1096
+ source: source,
1097
+ geometryFunction: (feature) => {
1098
+ const geom = feature.getGeometry();
1099
+ if (geom?.getType() == 'Point') {
1100
+ return geom;
1101
+ }
1102
+ else if (geom?.getType() == 'Polygon') {
1103
+ return geom?.getInteriorPoint();
1104
+ }
1105
+ else if (geom?.getType() == 'MultiPolygon') {
1106
+ return fromExtent(geom.getExtent())?.getInteriorPoint();
1107
+ }
1108
+ return undefined;
1109
+ },
1110
+ });
1111
+ const layer = new Vector$1({
1112
+ source: cluster,
1113
+ maxZoom: settings.maxZoom || undefined,
1114
+ minZoom: settings.minZoom || undefined,
1115
+ zIndex: settings.zIndex || 0,
1116
+ });
1117
+ layer.setStyle(this.styleFunc(settings));
1118
+ layer.set('name', settings.name);
1119
+ return new ClusterLayerManager(settings, layer, postboy);
1120
+ }
1121
+ styleFunc(settings) {
1122
+ return (feature) => {
1123
+ const features = feature.get('features');
1124
+ if (!settings.style)
1125
+ return undefined;
1126
+ return settings.style(features.map((f) => ({ id: f.getId(), ...f.get(MapConstants.FeatureInfo) })));
1127
+ };
1128
+ }
1129
+ }
1130
+ ClusterLayerFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ClusterLayerFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1131
+ ClusterLayerFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ClusterLayerFactory, providedIn: 'root' });
1132
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ClusterLayerFactory, decorators: [{
1133
+ type: Injectable,
1134
+ args: [{
1135
+ providedIn: 'root',
1136
+ }]
1137
+ }] });
1138
+
1139
+ class ClusterLayerComponent extends DestructibleComponent {
1140
+ constructor(postboy, factory) {
1141
+ super();
1142
+ this.postboy = postboy;
1143
+ this.factory = factory;
1144
+ this.manager = null;
1145
+ this._settings = new ClusterLayerSettings();
1146
+ this.onDestroy = () => this.removeLayer();
1147
+ }
1148
+ ngOnInit() {
1149
+ this.postboy
1150
+ .subscribe(MapRenderedEvent.ID)
1151
+ .pipe(filter((m) => !!m), first())
1152
+ .subscribe((m) => this.initLayer());
1153
+ }
1154
+ set settings(value) {
1155
+ if (!value || this._settings.isSame(value))
1156
+ return;
1157
+ this._settings = value;
1158
+ this.initLayer();
1159
+ }
1160
+ initLayer() {
1161
+ this.removeLayer();
1162
+ this.manager = this.factory.build(this._settings, this.postboy);
1163
+ this.postboy.fire(new AddLayerCommand(this.manager.layer));
1164
+ }
1165
+ removeLayer() {
1166
+ if (this.manager?.layer)
1167
+ this.postboy.fire(new RemoveLayerCommand(this.manager.layer));
1168
+ }
1169
+ }
1170
+ ClusterLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ClusterLayerComponent, deps: [{ token: MapPostboyService }, { token: ClusterLayerFactory }], target: i0.ɵɵFactoryTarget.Component });
1171
+ ClusterLayerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ClusterLayerComponent, selector: "lib-cluster-layer", inputs: { settings: "settings" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1172
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ClusterLayerComponent, decorators: [{
1173
+ type: Component,
1174
+ args: [{ selector: 'lib-cluster-layer', template: '', changeDetection: ChangeDetectionStrategy.OnPush }]
1175
+ }], ctorParameters: function () { return [{ type: MapPostboyService }, { type: ClusterLayerFactory }]; }, propDecorators: { settings: [{
1176
+ type: Input
1177
+ }] } });
1178
+
895
1179
  class MapModule {
896
1180
  }
897
1181
  MapModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -901,7 +1185,15 @@ MapModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.
901
1185
  OsmTileLayerComponent,
902
1186
  FeatureLayerComponent,
903
1187
  MarkersComponent,
904
- TooltipComponent], imports: [CommonModule], exports: [MapPlateComponent, FeatureLayerComponent, MarkersComponent, TileLayerComponent, TooltipComponent] });
1188
+ TooltipComponent,
1189
+ PolygonsComponent,
1190
+ ClusterLayerComponent], imports: [CommonModule], exports: [MapPlateComponent,
1191
+ FeatureLayerComponent,
1192
+ MarkersComponent,
1193
+ TileLayerComponent,
1194
+ TooltipComponent,
1195
+ PolygonsComponent,
1196
+ ClusterLayerComponent] });
905
1197
  MapModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MapModule, imports: [CommonModule] });
906
1198
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MapModule, decorators: [{
907
1199
  type: NgModule,
@@ -915,8 +1207,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
915
1207
  FeatureLayerComponent,
916
1208
  MarkersComponent,
917
1209
  TooltipComponent,
1210
+ PolygonsComponent,
1211
+ ClusterLayerComponent,
1212
+ ],
1213
+ exports: [
1214
+ MapPlateComponent,
1215
+ FeatureLayerComponent,
1216
+ MarkersComponent,
1217
+ TileLayerComponent,
1218
+ TooltipComponent,
1219
+ PolygonsComponent,
1220
+ ClusterLayerComponent,
918
1221
  ],
919
- exports: [MapPlateComponent, FeatureLayerComponent, MarkersComponent, TileLayerComponent, TooltipComponent],
920
1222
  }]
921
1223
  }] });
922
1224
 
@@ -941,6 +1243,37 @@ class MarkerStyleHelper {
941
1243
  }),
942
1244
  });
943
1245
  }
1246
+ static withText(style, text) {
1247
+ style.setText(text);
1248
+ return style;
1249
+ }
1250
+ }
1251
+
1252
+ class PolygonStyleHelper {
1253
+ static simple(fill, stroke, strokeWidth = 1) {
1254
+ return new Style({
1255
+ fill: new Fill({
1256
+ color: fill,
1257
+ }),
1258
+ stroke: new Stroke({
1259
+ color: stroke,
1260
+ width: strokeWidth,
1261
+ }),
1262
+ });
1263
+ }
1264
+ }
1265
+
1266
+ class TextStyleHelper {
1267
+ static get(text, font, color) {
1268
+ return new Text({
1269
+ text: text,
1270
+ font: font,
1271
+ textAlign: 'center',
1272
+ fill: new Fill({
1273
+ color: color,
1274
+ }),
1275
+ });
1276
+ }
944
1277
  }
945
1278
 
946
1279
  /*
@@ -955,5 +1288,5 @@ class MarkerStyleHelper {
955
1288
  * Generated bundle index. Do not edit.
956
1289
  */
957
1290
 
958
- export { CallbackMessage, CloseTooltipCommand, FeatureLayerComponent, FeatureLayerSettings, GenericMessage, MapClickEvent, MapLyrs, MapLyrsLabel, MapModule, MapPlateComponent, MapPostboyService, MapRenderedEvent, MapSettings, MarkerModel, MarkerStyleHelper, MarkersComponent, MessageRegistratorService, OsmTileLayerComponent, TileLayerComponent, TileLayerSettings, TooltipComponent, TooltipSettings };
1291
+ export { CallbackMessage, CloseTooltipCommand, ClusterLayerComponent, ClusterLayerSettings, FeatureLayerComponent, FeatureLayerSettings, GenericMessage, MapClickEvent, MapLyrs, MapLyrsLabel, MapModule, MapPlateComponent, MapPostboyService, MapRenderedEvent, MapSettings, MarkerModel, MarkerStyleHelper, MarkersComponent, MessageRegistratorService, OsmTileLayerComponent, PolygonModel, PolygonStyleHelper, PolygonsComponent, TextStyleHelper, TileLayerComponent, TileLayerSettings, TooltipComponent, TooltipSettings };
959
1292
  //# sourceMappingURL=maps-components.mjs.map