@artstesh/maps 4.0.9 → 4.0.10

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 (51) hide show
  1. package/dist/esm2020/map/map-plate/map-plate.component.mjs +4 -1
  2. package/dist/esm2020/map/messages/commands/draw-selection-area.command.mjs +14 -0
  3. package/dist/esm2020/map/messages/index.mjs +2 -1
  4. package/dist/esm2020/map/messages/queries/filter-features-in-area.query.mjs +13 -0
  5. package/dist/esm2020/map/messages/queries/get-features-in-area.query.mjs +13 -0
  6. package/dist/esm2020/map/models/dictionary.mjs +56 -0
  7. package/dist/esm2020/map/models/index.mjs +2 -1
  8. package/dist/esm2020/map/services/drawing/drawing.service.mjs +25 -3
  9. package/dist/esm2020/map/services/feature.service.mjs +29 -0
  10. package/dist/esm2020/map/services/map-management.service.mjs +36 -7
  11. package/dist/esm2020/map/services/message-registrator.service.mjs +12 -5
  12. package/dist/esm2020/src/map/map-plate/map-plate.component.mjs +4 -1
  13. package/dist/esm2020/src/map/messages/commands/draw-selection-area.command.mjs +14 -0
  14. package/dist/esm2020/src/map/messages/index.mjs +2 -1
  15. package/dist/esm2020/src/map/messages/queries/filter-features-in-area.query.mjs +13 -0
  16. package/dist/esm2020/src/map/messages/queries/get-features-in-area.query.mjs +13 -0
  17. package/dist/esm2020/src/map/models/dictionary.mjs +56 -0
  18. package/dist/esm2020/src/map/models/index.mjs +2 -1
  19. package/dist/esm2020/src/map/services/drawing/drawing.service.mjs +25 -3
  20. package/dist/esm2020/src/map/services/feature.service.mjs +29 -0
  21. package/dist/esm2020/src/map/services/map-management.service.mjs +36 -7
  22. package/dist/esm2020/src/map/services/message-registrator.service.mjs +12 -5
  23. package/dist/fesm2015/maps-components-src-map.mjs +181 -15
  24. package/dist/fesm2015/maps-components-src-map.mjs.map +1 -1
  25. package/dist/fesm2015/maps-components.mjs +181 -15
  26. package/dist/fesm2015/maps-components.mjs.map +1 -1
  27. package/dist/fesm2020/maps-components-src-map.mjs +180 -14
  28. package/dist/fesm2020/maps-components-src-map.mjs.map +1 -1
  29. package/dist/fesm2020/maps-components.mjs +180 -14
  30. package/dist/fesm2020/maps-components.mjs.map +1 -1
  31. package/dist/map/messages/commands/draw-selection-area.command.d.ts +12 -0
  32. package/dist/map/messages/index.d.ts +1 -0
  33. package/dist/map/messages/queries/filter-features-in-area.query.d.ts +10 -0
  34. package/dist/map/messages/queries/get-features-in-area.query.d.ts +11 -0
  35. package/dist/map/models/dictionary.d.ts +17 -0
  36. package/dist/map/models/index.d.ts +1 -0
  37. package/dist/map/services/drawing/drawing.service.d.ts +2 -0
  38. package/dist/map/services/feature.service.d.ts +11 -0
  39. package/dist/map/services/map-management.service.d.ts +1 -0
  40. package/dist/map/services/message-registrator.service.d.ts +2 -1
  41. package/dist/src/map/messages/commands/draw-selection-area.command.d.ts +12 -0
  42. package/dist/src/map/messages/index.d.ts +1 -0
  43. package/dist/src/map/messages/queries/filter-features-in-area.query.d.ts +10 -0
  44. package/dist/src/map/messages/queries/get-features-in-area.query.d.ts +11 -0
  45. package/dist/src/map/models/dictionary.d.ts +17 -0
  46. package/dist/src/map/models/index.d.ts +1 -0
  47. package/dist/src/map/services/drawing/drawing.service.d.ts +2 -0
  48. package/dist/src/map/services/feature.service.d.ts +11 -0
  49. package/dist/src/map/services/map-management.service.d.ts +1 -0
  50. package/dist/src/map/services/message-registrator.service.d.ts +2 -1
  51. package/package.json +2 -2
@@ -8,7 +8,8 @@ import { GeoJSON, WKT } from 'ol/format';
8
8
  import { getCenter, createEmpty, extend } from 'ol/extent';
9
9
  import { get, useGeographic, transform } from 'ol/proj';
10
10
  import { PostboyGenericMessage, PostboyCallbackMessage, PostboyService, PostboyAbstractRegistrator } from '@artstesh/postboy';
11
- import { first, filter, auditTime } from 'rxjs/operators';
11
+ import { forkJoin, combineLatest } from 'rxjs';
12
+ import { tap, first, filter, auditTime } from 'rxjs/operators';
12
13
  import { Vector, XYZ } from 'ol/source';
13
14
  import { Draw } from 'ol/interaction';
14
15
  import { createRegularPolygon } from 'ol/interaction/Draw';
@@ -18,7 +19,6 @@ import { Vector as Vector$1 } from 'ol/layer';
18
19
  import { bbox } from 'ol/loadingstrategy';
19
20
  import Polygon, { fromExtent } from 'ol/geom/Polygon';
20
21
  import Cluster from 'ol/source/Cluster';
21
- import { combineLatest } from 'rxjs';
22
22
  import Map from 'ol/Map';
23
23
  import View from 'ol/View';
24
24
  import Overlay from 'ol/Overlay';
@@ -187,6 +187,62 @@ var FeatureOutputFormat;
187
187
  FeatureOutputFormat[FeatureOutputFormat["WKT"] = 2] = "WKT";
188
188
  })(FeatureOutputFormat || (FeatureOutputFormat = {}));
189
189
 
190
+ class Dictionary {
191
+ constructor() {
192
+ this.collection = {};
193
+ this._keys = new Set();
194
+ this.has = (key) => this._keys.has(key);
195
+ }
196
+ get keys() {
197
+ return Array.from(this._keys);
198
+ }
199
+ get size() {
200
+ return this._keys.size;
201
+ }
202
+ static clone(dic, action) {
203
+ return Dictionary.create(dic.collection, action);
204
+ }
205
+ static create(dic, action) {
206
+ let keyList = Object.keys(dic);
207
+ const result = new Dictionary();
208
+ for (let i = 0; i < keyList.length; i++) {
209
+ let key = keyList[i];
210
+ result._keys.add(key);
211
+ result.collection[key] = action ? action(dic[key], key) : dic[key];
212
+ }
213
+ return result;
214
+ }
215
+ find(predicate) {
216
+ let result = null;
217
+ this.forEach((e) => {
218
+ if (result === null && predicate(e))
219
+ result = e;
220
+ });
221
+ return result;
222
+ }
223
+ take(key) {
224
+ return this._keys.has(key) ? this.collection[key] : null;
225
+ }
226
+ put(key, value) {
227
+ if (value == null)
228
+ return;
229
+ this.collection[key] = value;
230
+ this._keys.add(key);
231
+ }
232
+ rmv(key) {
233
+ if (!this._keys.has(key))
234
+ return;
235
+ delete this.collection[key];
236
+ this._keys.delete(key);
237
+ }
238
+ forEach(callback) {
239
+ let keys = Object.keys(this.collection);
240
+ for (let i = 0; i < keys.length; i++) {
241
+ callback(this.collection[keys[i]], i);
242
+ }
243
+ }
244
+ }
245
+
190
246
  class MapRenderedEvent extends PostboyGenericMessage {
191
247
  constructor(map) {
192
248
  super();
@@ -254,6 +310,19 @@ class CancelDrawingCommand extends PostboyGenericMessage {
254
310
  }
255
311
  CancelDrawingCommand.ID = '7d38d983-feba-4176-a66b-18175e5ecd6b';
256
312
 
313
+ class DrawSelectionAreaCommand extends PostboyCallbackMessage {
314
+ constructor(type, style, ignore = new Set()) {
315
+ super();
316
+ this.type = type;
317
+ this.style = style;
318
+ this.ignore = ignore;
319
+ }
320
+ get id() {
321
+ return DrawSelectionAreaCommand.ID;
322
+ }
323
+ }
324
+ DrawSelectionAreaCommand.ID = '573d8a0d-f25b-42b7-9ad7-0ac6d86ac362';
325
+
257
326
  class AddLayerCommand extends PostboyGenericMessage {
258
327
  constructor(layer) {
259
328
  super();
@@ -356,6 +425,30 @@ class GenerateDrawQuery extends PostboyCallbackMessage {
356
425
  }
357
426
  GenerateDrawQuery.ID = 'f01c99ba-0953-4ab5-82f9-04e6fbb678c1';
358
427
 
428
+ class FilterFeaturesInAreaQuery extends PostboyCallbackMessage {
429
+ constructor(area, features) {
430
+ super();
431
+ this.area = area;
432
+ this.features = features;
433
+ }
434
+ get id() {
435
+ return FilterFeaturesInAreaQuery.ID;
436
+ }
437
+ }
438
+ FilterFeaturesInAreaQuery.ID = '36bb2d94-8028-4512-90dd-2386af3fc67c';
439
+
440
+ class GetFeaturesInAreaQuery extends PostboyCallbackMessage {
441
+ constructor(area, ignore = new Set()) {
442
+ super();
443
+ this.area = area;
444
+ this.ignore = ignore;
445
+ }
446
+ get id() {
447
+ return GetFeaturesInAreaQuery.ID;
448
+ }
449
+ }
450
+ GetFeaturesInAreaQuery.ID = 'efcf4271-a07a-40e0-9f02-d4dade40b8ac';
451
+
359
452
  class MapPostboyService extends PostboyService {
360
453
  constructor() {
361
454
  super();
@@ -371,7 +464,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
371
464
  class MapManagementService {
372
465
  constructor(postboy) {
373
466
  this.postboy = postboy;
374
- this.layers = {};
467
+ this.layers = new Dictionary();
375
468
  }
376
469
  up() {
377
470
  this.observeMapRender();
@@ -381,6 +474,7 @@ class MapManagementService {
381
474
  this.observeAddTile();
382
475
  this.observeRemoveTile();
383
476
  this.observeLayerQuery();
477
+ this.observeFeaturesInArea();
384
478
  }
385
479
  observeRemoveTile() {
386
480
  this.postboy.subscribe(RemoveTileCommand.ID).subscribe((c) => {
@@ -390,7 +484,7 @@ class MapManagementService {
390
484
  });
391
485
  }
392
486
  observeLayerQuery() {
393
- this.postboy.subscribe(GetLayerQuery.ID).subscribe((ev) => ev.finish(this.layers[ev.name] ?? null));
487
+ this.postboy.subscribe(GetLayerQuery.ID).subscribe((ev) => ev.finish(this.layers.take(ev.name)));
394
488
  }
395
489
  observeAddTile() {
396
490
  this.postboy.subscribe(AddTileCommand.ID).subscribe((c) => {
@@ -408,15 +502,15 @@ class MapManagementService {
408
502
  this.postboy.subscribe(AddLayerCommand.ID).subscribe((c) => {
409
503
  if (!this.map)
410
504
  return;
411
- this.layers[c.layer.get('name')] = c.layer;
505
+ this.layers.put(c.layer.get('name'), c.layer);
412
506
  this.map.addLayer(c.layer);
413
507
  });
414
508
  }
415
509
  observePlaceFeatures() {
416
510
  this.postboy.subscribe(PlaceLayerFeaturesCommand.ID).subscribe((c) => {
417
- if (!this.layers[c.layer])
511
+ if (!this.layers.has(c.layer))
418
512
  return;
419
- let source = this.layers[c.layer]?.getSource();
513
+ let source = this.layers.take(c.layer).getSource();
420
514
  if (!!source['getSource'])
421
515
  source = source?.getSource();
422
516
  source?.clear();
@@ -427,10 +521,32 @@ class MapManagementService {
427
521
  this.postboy.subscribe(RemoveLayerCommand.ID).subscribe((c) => {
428
522
  if (!this.map)
429
523
  return;
430
- delete this.layers[c.layer.get('name')];
524
+ this.layers.rmv(c.layer.get('name'));
431
525
  this.map.removeLayer(c.layer);
432
526
  });
433
527
  }
528
+ observeFeaturesInArea() {
529
+ this.postboy.subscribe(GetFeaturesInAreaQuery.ID).subscribe((qr) => {
530
+ let result = new Dictionary();
531
+ const queue = [];
532
+ const queries = [];
533
+ this.layers.forEach((l) => {
534
+ let layerName = l.get('name');
535
+ if (qr.ignore.has(layerName) || layerName === MapConstants.DrawingLayerId)
536
+ return;
537
+ let source = l.getSource();
538
+ if (!!source['getSource'])
539
+ source = source?.getSource();
540
+ const query = new FilterFeaturesInAreaQuery(qr.area, source?.getFeatures() ?? []);
541
+ queue.push(query.result.pipe(tap((r) => {
542
+ result.put(l.get('name'), r.map((e) => ({ id: e.getId(), ...e.get(MapConstants.FeatureInfo) })));
543
+ })));
544
+ queries.push(query);
545
+ });
546
+ forkJoin(queue).subscribe(() => qr.finish(result));
547
+ queries.forEach((q) => this.postboy.fire(q));
548
+ });
549
+ }
434
550
  }
435
551
  MapManagementService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MapManagementService, deps: [{ token: MapPostboyService }], target: i0.ɵɵFactoryTarget.Injectable });
436
552
  MapManagementService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MapManagementService });
@@ -544,6 +660,27 @@ class DrawingService {
544
660
  this.postboy = postboy;
545
661
  }
546
662
  up() {
663
+ this.observeDrawing();
664
+ this.observeSelectArea();
665
+ this.observeMapRender();
666
+ }
667
+ observeSelectArea() {
668
+ this.postboy.subscribe(DrawSelectionAreaCommand.ID).subscribe((ev) => {
669
+ const drawingCommand = new StartDrawingCommand(ev.type, ev.style);
670
+ drawingCommand.result.subscribe((r) => {
671
+ if (!r) {
672
+ ev.finish(new Dictionary());
673
+ return;
674
+ }
675
+ const area = PolygonModel.fromGeoJson(1, r).feature.getGeometry();
676
+ const getFeaturesCommand = new GetFeaturesInAreaQuery(area, ev.ignore);
677
+ getFeaturesCommand.result.subscribe((result) => ev.finish(result));
678
+ this.postboy.fire(getFeaturesCommand);
679
+ });
680
+ this.postboy.fire(drawingCommand);
681
+ });
682
+ }
683
+ observeDrawing() {
547
684
  this.postboy.subscribe(StartDrawingCommand.ID).subscribe((ev) => {
548
685
  this.draw((l) => {
549
686
  if (!l || !this.map) {
@@ -563,7 +700,6 @@ class DrawingService {
563
700
  this.postboy.fire(drawQuery);
564
701
  });
565
702
  });
566
- this.observeMapRender();
567
703
  }
568
704
  onEnd(evt, command, layer) {
569
705
  command.finish(command.format === FeatureOutputFormat.GeoJson
@@ -625,10 +761,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
625
761
  type: Injectable
626
762
  }], ctorParameters: function () { return [{ type: MapPostboyService }]; } });
627
763
 
764
+ class FeatureService {
765
+ constructor(postboy) {
766
+ this.postboy = postboy;
767
+ }
768
+ up() {
769
+ this.postboy.subscribe(FilterFeaturesInAreaQuery.ID).subscribe((qr) => {
770
+ qr.finish(qr.features.filter((f) => FeatureService.booleanIntersects(qr.area, f.getGeometry())));
771
+ });
772
+ }
773
+ static booleanIntersects(g1, g2) {
774
+ if (g2.getType() === 'Point')
775
+ return g1.intersectsCoordinate(g2.getCoordinates());
776
+ if (g2.getType() === 'Circle')
777
+ return g1.intersectsCoordinate(g2.getCenter());
778
+ if (g2.getType() === 'Polygon')
779
+ return g1.intersectsCoordinate(g2.getInteriorPoint().getCoordinates());
780
+ return false;
781
+ }
782
+ }
783
+ FeatureService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FeatureService, deps: [{ token: MapPostboyService }], target: i0.ɵɵFactoryTarget.Injectable });
784
+ FeatureService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FeatureService });
785
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FeatureService, decorators: [{
786
+ type: Injectable
787
+ }], ctorParameters: function () { return [{ type: MapPostboyService }]; } });
788
+
628
789
  class MessageRegistratorService extends PostboyAbstractRegistrator {
629
- constructor(service, management, state, feature, interaction, drawing, drawGenerator) {
790
+ constructor(service, management, state, mapFeature, interaction, drawing, drawGenerator, feature) {
630
791
  super(service);
631
- this.registerServices([management, state, interaction, feature, drawing, drawGenerator]);
792
+ this.registerServices([management, state, interaction, mapFeature, drawing, drawGenerator, feature]);
632
793
  }
633
794
  _up() {
634
795
  this.registerReplay(MapRenderedEvent.ID);
@@ -646,13 +807,16 @@ class MessageRegistratorService extends PostboyAbstractRegistrator {
646
807
  this.registerSubject(GetLayerQuery.ID);
647
808
  this.registerSubject(DrawingFinishedEvent.ID);
648
809
  this.registerSubject(GenerateDrawQuery.ID);
810
+ this.registerSubject(FilterFeaturesInAreaQuery.ID);
811
+ this.registerSubject(GetFeaturesInAreaQuery.ID);
812
+ this.registerSubject(DrawSelectionAreaCommand.ID);
649
813
  }
650
814
  }
651
- 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 }, { token: DrawingService }, { token: DrawingGenerationService }], target: i0.ɵɵFactoryTarget.Injectable });
815
+ 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 }, { token: DrawingService }, { token: DrawingGenerationService }, { token: FeatureService }], target: i0.ɵɵFactoryTarget.Injectable });
652
816
  MessageRegistratorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MessageRegistratorService });
653
817
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MessageRegistratorService, decorators: [{
654
818
  type: Injectable
655
- }], ctorParameters: function () { return [{ type: MapPostboyService }, { type: MapManagementService }, { type: MapStateService }, { type: MapFeatureService }, { type: MapClickService }, { type: DrawingService }, { type: DrawingGenerationService }]; } });
819
+ }], ctorParameters: function () { return [{ type: MapPostboyService }, { type: MapManagementService }, { type: MapStateService }, { type: MapFeatureService }, { type: MapClickService }, { type: DrawingService }, { type: DrawingGenerationService }, { type: FeatureService }]; } });
656
820
 
657
821
  class TileLayerSettings {
658
822
  constructor() {
@@ -1205,6 +1369,7 @@ MapPlateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
1205
1369
  MapFeatureService,
1206
1370
  DrawingService,
1207
1371
  DrawingGenerationService,
1372
+ FeatureService,
1208
1373
  ], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\r\n<lib-osm-tile-layer *ngIf=\"osmUrl && map\" [map]=\"map\" [url]=\"osmUrl\"></lib-osm-tile-layer>\r\n<lib-feature-layer *ngIf=\"map\" [settings]=\"drawingLayerSettings\"></lib-feature-layer>\r\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"] }, { kind: "component", type: FeatureLayerComponent, selector: "lib-feature-layer", inputs: ["settings"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1209
1374
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MapPlateComponent, decorators: [{
1210
1375
  type: Component,
@@ -1216,6 +1381,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1216
1381
  MapFeatureService,
1217
1382
  DrawingService,
1218
1383
  DrawingGenerationService,
1384
+ FeatureService,
1219
1385
  ], template: "<ng-content></ng-content>\r\n<lib-osm-tile-layer *ngIf=\"osmUrl && map\" [map]=\"map\" [url]=\"osmUrl\"></lib-osm-tile-layer>\r\n<lib-feature-layer *ngIf=\"map\" [settings]=\"drawingLayerSettings\"></lib-feature-layer>\r\n", styles: ["lib-map-plate{position:relative;display:flex;flex-direction:column;height:100%}\n"] }]
1220
1386
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: MapPostboyService }, { type: MapPlateFactory }, { type: MessageRegistratorService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { settings: [{
1221
1387
  type: Input
@@ -1544,5 +1710,5 @@ class StringifyFeatureHelper {
1544
1710
  * Generated bundle index. Do not edit.
1545
1711
  */
1546
1712
 
1547
- export { CancelDrawingCommand, CloseTooltipCommand, ClusterLayerComponent, ClusterLayerSettings, DrawingType, FeatureLayerComponent, FeatureLayerSettings, FeatureOutputFormat, MapClickEvent, MapLyrs, MapLyrsLabel, MapModule, MapMoveEndEvent, MapPlateComponent, MapPostboyService, MapRenderedEvent, MapSettings, MarkerModel, MarkerStyleHelper, MarkersComponent, MessageRegistratorService, OsmTileLayerComponent, PolygonModel, PolygonStyleHelper, PolygonsComponent, StartDrawingCommand, StringifyFeatureHelper, TextStyleHelper, TileLayerComponent, TileLayerSettings, TooltipComponent, TooltipSettings };
1713
+ export { CancelDrawingCommand, CloseTooltipCommand, ClusterLayerComponent, ClusterLayerSettings, Dictionary, DrawSelectionAreaCommand, DrawingType, FeatureLayerComponent, FeatureLayerSettings, FeatureOutputFormat, MapClickEvent, MapLyrs, MapLyrsLabel, MapModule, MapMoveEndEvent, MapPlateComponent, MapPostboyService, MapRenderedEvent, MapSettings, MarkerModel, MarkerStyleHelper, MarkersComponent, MessageRegistratorService, OsmTileLayerComponent, PolygonModel, PolygonStyleHelper, PolygonsComponent, StartDrawingCommand, StringifyFeatureHelper, TextStyleHelper, TileLayerComponent, TileLayerSettings, TooltipComponent, TooltipSettings };
1548
1714
  //# sourceMappingURL=maps-components-src-map.mjs.map