@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.
- package/dist/esm2020/map/helpers/index.mjs +3 -1
- package/dist/esm2020/map/helpers/marker-style.helper.mjs +5 -1
- package/dist/esm2020/map/helpers/polygon-style.helper.mjs +16 -0
- package/dist/esm2020/map/helpers/text-style.helper.mjs +14 -0
- package/dist/esm2020/map/map-plate/features/index.mjs +2 -1
- package/dist/esm2020/map/map-plate/features/polygons/polygons.component.mjs +41 -0
- package/dist/esm2020/map/map-plate/layers/cluster-layer/cluster-layer-factory.service.mjs +59 -0
- package/dist/esm2020/map/map-plate/layers/cluster-layer/cluster-layer.component.mjs +50 -0
- package/dist/esm2020/map/map-plate/layers/cluster-layer/cluster-layer.manager.mjs +18 -0
- package/dist/esm2020/map/map-plate/layers/cluster-layer/cluster-layer.settings.mjs +61 -0
- package/dist/esm2020/map/map-plate/layers/index.mjs +3 -1
- package/dist/esm2020/map/map-plate/map-plate.component.mjs +4 -3
- package/dist/esm2020/map/map.module.mjs +23 -3
- package/dist/esm2020/map/messages/commands/add-layer.command.mjs +1 -1
- package/dist/esm2020/map/messages/commands/fit-to-features.command.mjs +13 -0
- package/dist/esm2020/map/messages/events/map-click.event.mjs +3 -2
- package/dist/esm2020/map/models/i-identified.mjs +2 -0
- package/dist/esm2020/map/models/index.mjs +2 -1
- package/dist/esm2020/map/models/map.constants.mjs +4 -0
- package/dist/esm2020/map/models/marker-model.mjs +3 -2
- package/dist/esm2020/map/models/polygon.model.mjs +25 -0
- package/dist/esm2020/map/services/map-click.service.mjs +7 -3
- package/dist/esm2020/map/services/map-feature.service.mjs +39 -0
- package/dist/esm2020/map/services/map-management.service.mjs +6 -3
- package/dist/esm2020/map/services/message-registrator.service.mjs +9 -6
- package/dist/esm2020/src/map/helpers/index.mjs +3 -1
- package/dist/esm2020/src/map/helpers/marker-style.helper.mjs +5 -1
- package/dist/esm2020/src/map/helpers/polygon-style.helper.mjs +16 -0
- package/dist/esm2020/src/map/helpers/text-style.helper.mjs +14 -0
- package/dist/esm2020/src/map/map-plate/features/index.mjs +2 -1
- package/dist/esm2020/src/map/map-plate/features/polygons/polygons.component.mjs +41 -0
- package/dist/esm2020/src/map/map-plate/layers/cluster-layer/cluster-layer-factory.service.mjs +59 -0
- package/dist/esm2020/src/map/map-plate/layers/cluster-layer/cluster-layer.component.mjs +50 -0
- package/dist/esm2020/src/map/map-plate/layers/cluster-layer/cluster-layer.manager.mjs +18 -0
- package/dist/esm2020/src/map/map-plate/layers/cluster-layer/cluster-layer.settings.mjs +61 -0
- package/dist/esm2020/src/map/map-plate/layers/index.mjs +3 -1
- package/dist/esm2020/src/map/map-plate/map-plate.component.mjs +4 -3
- package/dist/esm2020/src/map/map.module.mjs +23 -3
- package/dist/esm2020/src/map/messages/commands/add-layer.command.mjs +1 -1
- package/dist/esm2020/src/map/messages/commands/fit-to-features.command.mjs +13 -0
- package/dist/esm2020/src/map/messages/events/map-click.event.mjs +3 -2
- package/dist/esm2020/src/map/models/i-identified.mjs +2 -0
- package/dist/esm2020/src/map/models/index.mjs +2 -1
- package/dist/esm2020/src/map/models/map.constants.mjs +4 -0
- package/dist/esm2020/src/map/models/marker-model.mjs +3 -2
- package/dist/esm2020/src/map/models/polygon.model.mjs +25 -0
- package/dist/esm2020/src/map/services/map-click.service.mjs +7 -3
- package/dist/esm2020/src/map/services/map-feature.service.mjs +39 -0
- package/dist/esm2020/src/map/services/map-management.service.mjs +6 -3
- package/dist/esm2020/src/map/services/message-registrator.service.mjs +9 -6
- package/dist/fesm2015/maps-components-src-map.mjs +355 -17
- package/dist/fesm2015/maps-components-src-map.mjs.map +1 -1
- package/dist/fesm2015/maps-components.mjs +355 -17
- package/dist/fesm2015/maps-components.mjs.map +1 -1
- package/dist/fesm2020/maps-components-src-map.mjs +349 -16
- package/dist/fesm2020/maps-components-src-map.mjs.map +1 -1
- package/dist/fesm2020/maps-components.mjs +349 -16
- package/dist/fesm2020/maps-components.mjs.map +1 -1
- package/dist/map/helpers/index.d.ts +2 -0
- package/dist/map/helpers/marker-style.helper.d.ts +2 -0
- package/dist/map/helpers/polygon-style.helper.d.ts +4 -0
- package/dist/map/helpers/text-style.helper.d.ts +4 -0
- package/dist/map/map-plate/features/index.d.ts +1 -0
- package/dist/map/map-plate/features/polygons/polygons.component.d.ts +16 -0
- package/dist/map/map-plate/layers/cluster-layer/cluster-layer-factory.service.d.ts +11 -0
- package/dist/map/map-plate/layers/cluster-layer/cluster-layer.component.d.ts +21 -0
- package/dist/map/map-plate/layers/cluster-layer/cluster-layer.manager.d.ts +11 -0
- package/dist/map/map-plate/layers/cluster-layer/cluster-layer.settings.d.ts +20 -0
- package/dist/map/map-plate/layers/index.d.ts +2 -0
- package/dist/map/map.module.d.ts +4 -2
- package/dist/map/messages/commands/add-layer.command.d.ts +3 -2
- package/dist/map/messages/commands/fit-to-features.command.d.ts +10 -0
- package/dist/map/messages/events/map-click.event.d.ts +10 -2
- package/dist/map/models/i-identified.d.ts +3 -0
- package/dist/map/models/index.d.ts +1 -0
- package/dist/map/models/map.constants.d.ts +3 -0
- package/dist/map/models/polygon.model.d.ts +19 -0
- package/dist/map/services/map-feature.service.d.ts +14 -0
- package/dist/map/services/message-registrator.service.d.ts +2 -1
- package/dist/src/map/helpers/index.d.ts +2 -0
- package/dist/src/map/helpers/marker-style.helper.d.ts +2 -0
- package/dist/src/map/helpers/polygon-style.helper.d.ts +4 -0
- package/dist/src/map/helpers/text-style.helper.d.ts +4 -0
- package/dist/src/map/map-plate/features/index.d.ts +1 -0
- package/dist/src/map/map-plate/features/polygons/polygons.component.d.ts +16 -0
- package/dist/src/map/map-plate/layers/cluster-layer/cluster-layer-factory.service.d.ts +11 -0
- package/dist/src/map/map-plate/layers/cluster-layer/cluster-layer.component.d.ts +21 -0
- package/dist/src/map/map-plate/layers/cluster-layer/cluster-layer.manager.d.ts +11 -0
- package/dist/src/map/map-plate/layers/cluster-layer/cluster-layer.settings.d.ts +20 -0
- package/dist/src/map/map-plate/layers/index.d.ts +2 -0
- package/dist/src/map/map.module.d.ts +4 -2
- package/dist/src/map/messages/commands/add-layer.command.d.ts +3 -2
- package/dist/src/map/messages/commands/fit-to-features.command.d.ts +10 -0
- package/dist/src/map/messages/events/map-click.event.d.ts +10 -2
- package/dist/src/map/models/i-identified.d.ts +3 -0
- package/dist/src/map/models/index.d.ts +1 -0
- package/dist/src/map/models/map.constants.d.ts +3 -0
- package/dist/src/map/models/polygon.model.d.ts +19 -0
- package/dist/src/map/services/map-feature.service.d.ts +14 -0
- package/dist/src/map/services/message-registrator.service.d.ts +2 -1
- 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(
|
|
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()
|
|
304
|
-
|
|
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.
|
|
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
|
|
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
|
/*
|
|
@@ -951,5 +1284,5 @@ class MarkerStyleHelper {
|
|
|
951
1284
|
* Generated bundle index. Do not edit.
|
|
952
1285
|
*/
|
|
953
1286
|
|
|
954
|
-
export { CallbackMessage, CloseTooltipCommand, FeatureLayerComponent, FeatureLayerSettings, GenericMessage, MapClickEvent, MapLyrs, MapLyrsLabel, MapModule, MapPlateComponent, MapPostboyService, MapRenderedEvent, MapSettings, MarkerModel, MarkerStyleHelper, MarkersComponent, MessageRegistratorService, OsmTileLayerComponent, TileLayerComponent, TileLayerSettings, TooltipComponent, TooltipSettings };
|
|
1287
|
+
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 };
|
|
955
1288
|
//# sourceMappingURL=maps-components-src-map.mjs.map
|