@igo2/integration 1.15.5 → 1.15.6
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/esm2020/igo2-integration.mjs +4 -4
- package/esm2020/lib/about/about-tool/about-tool.component.mjs +184 -184
- package/esm2020/lib/about/about-tool/index.mjs +1 -1
- package/esm2020/lib/about/about.module.mjs +54 -54
- package/esm2020/lib/about/index.mjs +1 -1
- package/esm2020/lib/analytics/analytics-listener.service.mjs +126 -126
- package/esm2020/lib/analytics/analytics.module.mjs +15 -15
- package/esm2020/lib/analytics/index.mjs +1 -1
- package/esm2020/lib/catalog/catalog-browser-tool/catalog-browser-tool.component.mjs +112 -112
- package/esm2020/lib/catalog/catalog-browser-tool/catalog-browser-tool.module.mjs +28 -28
- package/esm2020/lib/catalog/catalog-library-tool/catalog-library-tool.component.mjs +88 -88
- package/esm2020/lib/catalog/catalog-library-tool/catalog-library-tool.module.mjs +28 -28
- package/esm2020/lib/catalog/catalog.module.mjs +23 -23
- package/esm2020/lib/catalog/catalog.state.mjs +53 -53
- package/esm2020/lib/catalog/index.mjs +5 -5
- package/esm2020/lib/context/context-editor-tool/context-editor-tool.component.mjs +33 -33
- package/esm2020/lib/context/context-manager-tool/context-manager-tool.component.mjs +43 -43
- package/esm2020/lib/context/context-permission-manager-tool/context-permission-manager-tool.component.mjs +24 -24
- package/esm2020/lib/context/context-share-tool/context-share-tool.component.mjs +33 -33
- package/esm2020/lib/context/context.module.mjs +38 -38
- package/esm2020/lib/context/context.state.mjs +87 -87
- package/esm2020/lib/context/index.mjs +5 -5
- package/esm2020/lib/directions/directions-tool/directions-tool.component.mjs +83 -83
- package/esm2020/lib/directions/directions-tool/index.mjs +1 -1
- package/esm2020/lib/directions/directions.module.mjs +25 -25
- package/esm2020/lib/directions/directions.state.mjs +63 -63
- package/esm2020/lib/directions/index.mjs +2 -2
- package/esm2020/lib/draw/draw.module.mjs +20 -20
- package/esm2020/lib/draw/draw.state.mjs +38 -38
- package/esm2020/lib/draw/drawing-tool/drawing-tool.component.mjs +71 -71
- package/esm2020/lib/draw/index.mjs +2 -2
- package/esm2020/lib/filter/active-ogc-filter-tool/active-ogc-filter-tool.animation.mjs +9 -9
- package/esm2020/lib/filter/active-ogc-filter-tool/active-ogc-filter-tool.component.mjs +43 -43
- package/esm2020/lib/filter/active-ogc-filter-tool/index.mjs +1 -1
- package/esm2020/lib/filter/active-time-filter-tool/active-time-filter-tool.animation.mjs +9 -9
- package/esm2020/lib/filter/active-time-filter-tool/active-time-filter-tool.component.mjs +43 -43
- package/esm2020/lib/filter/active-time-filter-tool/index.mjs +1 -1
- package/esm2020/lib/filter/filter.module.mjs +50 -50
- package/esm2020/lib/filter/index.mjs +5 -5
- package/esm2020/lib/filter/ogc-filter-tool/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-tool/ogc-filter-tool.component.mjs +24 -24
- package/esm2020/lib/filter/spatial-filter-tool/index.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter-tool/spatial-filter-tool.component.mjs +534 -534
- package/esm2020/lib/filter/time-filter-tool/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-tool/time-filter-tool.component.mjs +24 -24
- package/esm2020/lib/import-export/import-export-tool/import-export-tool.component.mjs +140 -140
- package/esm2020/lib/import-export/import-export-tool/index.mjs +1 -1
- package/esm2020/lib/import-export/import-export.module.mjs +50 -50
- package/esm2020/lib/import-export/import-export.state.mjs +40 -40
- package/esm2020/lib/import-export/index.mjs +2 -2
- package/esm2020/lib/integration.module.mjs +71 -71
- package/esm2020/lib/map/advanced-map-tool/advanced-coordinates/advanced-coordinates.component.mjs +471 -471
- package/esm2020/lib/map/advanced-map-tool/advanced-map-tool.component.mjs +88 -88
- package/esm2020/lib/map/advanced-map-tool/advanced-swipe/advanced-swipe.component.mjs +217 -217
- package/esm2020/lib/map/advanced-map-tool/index.mjs +1 -1
- package/esm2020/lib/map/index.mjs +8 -8
- package/esm2020/lib/map/layer-list-tool.state.mjs +41 -41
- package/esm2020/lib/map/map-details-tool/index.mjs +1 -1
- package/esm2020/lib/map/map-details-tool/map-details-tool.component.mjs +255 -255
- package/esm2020/lib/map/map-legend/index.mjs +1 -1
- package/esm2020/lib/map/map-legend/map-legend-tool.component.mjs +274 -274
- package/esm2020/lib/map/map-proximity-tool/index.mjs +1 -1
- package/esm2020/lib/map/map-proximity-tool/map-proximity-tool.component.mjs +202 -202
- package/esm2020/lib/map/map-proximity.state.mjs +166 -166
- package/esm2020/lib/map/map-tool/index.mjs +1 -1
- package/esm2020/lib/map/map-tool/map-tool.component.mjs +129 -129
- package/esm2020/lib/map/map-tools/index.mjs +1 -1
- package/esm2020/lib/map/map-tools/map-tools.component.mjs +494 -494
- package/esm2020/lib/map/map.module.mjs +143 -143
- package/esm2020/lib/map/map.state.mjs +46 -46
- package/esm2020/lib/measure/index.mjs +3 -3
- package/esm2020/lib/measure/measure.module.mjs +19 -19
- package/esm2020/lib/measure/measure.state.mjs +34 -34
- package/esm2020/lib/measure/measurer-tool/measurer-tool.component.mjs +44 -44
- package/esm2020/lib/measure/measurer-tool/measurer-tool.module.mjs +24 -24
- package/esm2020/lib/print/index.mjs +1 -1
- package/esm2020/lib/print/print-tool/index.mjs +1 -1
- package/esm2020/lib/print/print-tool/print-tool.component.mjs +32 -32
- package/esm2020/lib/print/print.module.mjs +25 -25
- package/esm2020/lib/search/index.mjs +6 -6
- package/esm2020/lib/search/query.state.mjs +34 -42
- package/esm2020/lib/search/search-bar/search-bar-binding.directive.mjs +60 -60
- package/esm2020/lib/search/search-bar/search-bar.module.mjs +21 -21
- package/esm2020/lib/search/search-results-tool/search-results-tool.component.mjs +592 -592
- package/esm2020/lib/search/search-results-tool/search-results-tool.module.mjs +64 -64
- package/esm2020/lib/search/search.module.mjs +23 -23
- package/esm2020/lib/search/search.state.mjs +131 -131
- package/esm2020/lib/storage/index.mjs +1 -1
- package/esm2020/lib/storage/storage.module.mjs +15 -15
- package/esm2020/lib/storage/storage.state.mjs +22 -22
- package/esm2020/lib/tool/index.mjs +1 -1
- package/esm2020/lib/tool/tool.module.mjs +15 -15
- package/esm2020/lib/tool/tool.state.mjs +51 -51
- package/esm2020/lib/workspace/index.mjs +3 -3
- package/esm2020/lib/workspace/shared/edition-actions.service.mjs +155 -155
- package/esm2020/lib/workspace/shared/feature-actions.service.mjs +143 -143
- package/esm2020/lib/workspace/shared/index.mjs +2 -2
- package/esm2020/lib/workspace/shared/wfs-actions.service.mjs +157 -157
- package/esm2020/lib/workspace/shared/workspace.utils.mjs +6 -6
- package/esm2020/lib/workspace/workspace-button/index.mjs +1 -1
- package/esm2020/lib/workspace/workspace-button/workspace-button.component.mjs +68 -68
- package/esm2020/lib/workspace/workspace.module.mjs +36 -36
- package/esm2020/lib/workspace/workspace.state.mjs +187 -187
- package/esm2020/public_api.mjs +34 -34
- package/fesm2015/igo2-integration.mjs +6553 -6558
- package/fesm2015/igo2-integration.mjs.map +1 -1
- package/fesm2020/igo2-integration.mjs +6109 -6114
- package/fesm2020/igo2-integration.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/about/about-tool/about-tool.component.d.ts +34 -34
- package/lib/about/about-tool/index.d.ts +1 -1
- package/lib/about/about.module.d.ts +16 -16
- package/lib/about/index.d.ts +1 -1
- package/lib/analytics/analytics-listener.service.d.ts +33 -33
- package/lib/analytics/analytics.module.d.ts +6 -6
- package/lib/analytics/index.d.ts +1 -1
- package/lib/catalog/catalog-browser-tool/catalog-browser-tool.component.d.ts +57 -57
- package/lib/catalog/catalog-browser-tool/catalog-browser-tool.module.d.ts +12 -12
- package/lib/catalog/catalog-library-tool/catalog-library-tool.component.d.ts +50 -50
- package/lib/catalog/catalog-library-tool/catalog-library-tool.module.d.ts +12 -12
- package/lib/catalog/catalog.module.d.ts +8 -8
- package/lib/catalog/catalog.state.d.ts +37 -37
- package/lib/catalog/index.d.ts +5 -5
- package/lib/context/context-editor-tool/context-editor-tool.component.d.ts +9 -9
- package/lib/context/context-manager-tool/context-manager-tool.component.d.ts +15 -15
- package/lib/context/context-permission-manager-tool/context-permission-manager-tool.component.d.ts +5 -5
- package/lib/context/context-share-tool/context-share-tool.component.d.ts +13 -13
- package/lib/context/context.module.d.ts +11 -11
- package/lib/context/context.state.d.ts +37 -37
- package/lib/context/index.d.ts +5 -5
- package/lib/directions/directions-tool/directions-tool.component.d.ts +54 -54
- package/lib/directions/directions-tool/index.d.ts +1 -1
- package/lib/directions/directions.module.d.ts +10 -10
- package/lib/directions/directions.state.d.ts +28 -28
- package/lib/directions/index.d.ts +2 -2
- package/lib/draw/draw.module.d.ts +8 -8
- package/lib/draw/draw.state.d.ts +16 -16
- package/lib/draw/drawing-tool/drawing-tool.component.d.ts +31 -31
- package/lib/draw/index.d.ts +2 -2
- package/lib/filter/active-ogc-filter-tool/active-ogc-filter-tool.animation.d.ts +2 -2
- package/lib/filter/active-ogc-filter-tool/active-ogc-filter-tool.component.d.ts +12 -12
- package/lib/filter/active-ogc-filter-tool/index.d.ts +1 -1
- package/lib/filter/active-time-filter-tool/active-time-filter-tool.animation.d.ts +2 -2
- package/lib/filter/active-time-filter-tool/active-time-filter-tool.component.d.ts +12 -12
- package/lib/filter/active-time-filter-tool/index.d.ts +1 -1
- package/lib/filter/filter.module.d.ts +15 -15
- package/lib/filter/index.d.ts +5 -5
- package/lib/filter/ogc-filter-tool/index.d.ts +1 -1
- package/lib/filter/ogc-filter-tool/ogc-filter-tool.component.d.ts +6 -6
- package/lib/filter/spatial-filter-tool/index.d.ts +1 -1
- package/lib/filter/spatial-filter-tool/spatial-filter-tool.component.d.ts +82 -82
- package/lib/filter/time-filter-tool/index.d.ts +1 -1
- package/lib/filter/time-filter-tool/time-filter-tool.component.d.ts +6 -6
- package/lib/import-export/import-export-tool/import-export-tool.component.d.ts +33 -33
- package/lib/import-export/import-export-tool/index.d.ts +1 -1
- package/lib/import-export/import-export.module.d.ts +15 -15
- package/lib/import-export/import-export.state.d.ts +24 -24
- package/lib/import-export/index.d.ts +2 -2
- package/lib/integration.module.d.ts +20 -20
- package/lib/map/advanced-map-tool/advanced-coordinates/advanced-coordinates.component.d.ts +97 -97
- package/lib/map/advanced-map-tool/advanced-map-tool.component.d.ts +12 -12
- package/lib/map/advanced-map-tool/advanced-swipe/advanced-swipe.component.d.ts +65 -65
- package/lib/map/advanced-map-tool/index.d.ts +1 -1
- package/lib/map/index.d.ts +8 -8
- package/lib/map/layer-list-tool.state.d.ts +19 -19
- package/lib/map/map-details-tool/index.d.ts +1 -1
- package/lib/map/map-details-tool/map-details-tool.component.d.ts +38 -38
- package/lib/map/map-legend/index.d.ts +1 -1
- package/lib/map/map-legend/map-legend-tool.component.d.ts +40 -40
- package/lib/map/map-proximity-tool/index.d.ts +1 -1
- package/lib/map/map-proximity-tool/map-proximity-tool.component.d.ts +36 -36
- package/lib/map/map-proximity.state.d.ts +31 -31
- package/lib/map/map-tool/index.d.ts +1 -1
- package/lib/map/map-tool/map-tool.component.d.ts +27 -27
- package/lib/map/map-tools/index.d.ts +1 -1
- package/lib/map/map-tools/map-tools.component.d.ts +66 -66
- package/lib/map/map.module.d.ts +38 -38
- package/lib/map/map.state.d.ts +24 -24
- package/lib/measure/index.d.ts +3 -3
- package/lib/measure/measure.module.d.ts +7 -7
- package/lib/measure/measure.state.d.ts +16 -16
- package/lib/measure/measurer-tool/measurer-tool.component.d.ts +24 -24
- package/lib/measure/measurer-tool/measurer-tool.module.d.ts +11 -11
- package/lib/print/index.d.ts +1 -1
- package/lib/print/print-tool/index.d.ts +1 -1
- package/lib/print/print-tool/print-tool.component.d.ts +10 -10
- package/lib/print/print.module.d.ts +10 -10
- package/lib/search/index.d.ts +6 -6
- package/lib/search/query.state.d.ts +20 -24
- package/lib/search/search-bar/search-bar-binding.directive.d.ts +20 -20
- package/lib/search/search-bar/search-bar.module.d.ts +11 -11
- package/lib/search/search-results-tool/search-results-tool.component.d.ts +100 -100
- package/lib/search/search-results-tool/search-results-tool.module.d.ts +18 -18
- package/lib/search/search.module.d.ts +8 -8
- package/lib/search/search.state.d.ts +60 -60
- package/lib/storage/index.d.ts +1 -1
- package/lib/storage/storage.module.d.ts +6 -6
- package/lib/storage/storage.state.d.ts +12 -12
- package/lib/tool/index.d.ts +1 -1
- package/lib/tool/tool.module.d.ts +6 -6
- package/lib/tool/tool.state.d.ts +22 -22
- package/lib/workspace/index.d.ts +3 -3
- package/lib/workspace/shared/edition-actions.service.d.ts +26 -26
- package/lib/workspace/shared/feature-actions.service.d.ts +25 -25
- package/lib/workspace/shared/index.d.ts +2 -2
- package/lib/workspace/shared/wfs-actions.service.d.ts +27 -27
- package/lib/workspace/shared/workspace.utils.d.ts +2 -2
- package/lib/workspace/workspace-button/index.d.ts +1 -1
- package/lib/workspace/workspace-button/workspace-button.component.d.ts +21 -21
- package/lib/workspace/workspace.module.d.ts +12 -12
- package/lib/workspace/workspace.state.d.ts +63 -63
- package/package.json +3 -3
- package/public_api.d.ts +31 -31
|
@@ -1,167 +1,167 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { FeatureStore, featureFromOl, measureOlGeometryLength, FEATURE, roundCoordTo } from '@igo2/geo';
|
|
3
|
-
import { BehaviorSubject, combineLatest, interval } from 'rxjs';
|
|
4
|
-
import { debounceTime } from 'rxjs/operators';
|
|
5
|
-
import GeoJSON from 'ol/format/GeoJSON';
|
|
6
|
-
import { uuid } from '@igo2/utils';
|
|
7
|
-
import olLayerVector from 'ol/layer/Vector';
|
|
8
|
-
import olLineString from 'ol/geom/LineString';
|
|
9
|
-
import * as olProj from 'ol/proj';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "../map/map.state";
|
|
12
|
-
import * as i2 from "@igo2/core";
|
|
13
|
-
/**
|
|
14
|
-
* Service that holds the state of the direction module
|
|
15
|
-
*/
|
|
16
|
-
export class MapProximityState {
|
|
17
|
-
constructor(mapState, storageService) {
|
|
18
|
-
this.mapState = mapState;
|
|
19
|
-
this.storageService = storageService;
|
|
20
|
-
this.defaultProximityRadiusValue = 30;
|
|
21
|
-
this.enabled$ = new BehaviorSubject(false);
|
|
22
|
-
this.proximityRadiusValue$ = new BehaviorSubject(this.storageService.get('mapProximityRadius') || this.defaultProximityRadiusValue);
|
|
23
|
-
this.proximitylocationType$ = new BehaviorSubject('geolocation');
|
|
24
|
-
this.proximityFeatureStore = new FeatureStore([], { map: this.mapState.map });
|
|
25
|
-
this.subs$$ = [];
|
|
26
|
-
this.currentPositionCoordinate$ = new BehaviorSubject(undefined);
|
|
27
|
-
this.mapState.map.ol.once('rendercomplete', () => {
|
|
28
|
-
this.subscribeProximityMonitor();
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
get map() {
|
|
32
|
-
return this.mapState.map;
|
|
33
|
-
}
|
|
34
|
-
subscribeProximityMonitor() {
|
|
35
|
-
this.subs$$.push(combineLatest([
|
|
36
|
-
this.enabled$,
|
|
37
|
-
this.proximitylocationType$,
|
|
38
|
-
this.proximityRadiusValue$,
|
|
39
|
-
interval(5000),
|
|
40
|
-
this.map.geolocationController.position$
|
|
41
|
-
])
|
|
42
|
-
.pipe(debounceTime(750))
|
|
43
|
-
.subscribe((bunch) => {
|
|
44
|
-
this.proximityFeatureStore.clear();
|
|
45
|
-
const enabled = bunch[0];
|
|
46
|
-
const layers = this.map.layers;
|
|
47
|
-
const currentPos = this.map.geolocationController.position$.value;
|
|
48
|
-
const locationType = bunch[1];
|
|
49
|
-
const proximityRadiusValue = bunch[2];
|
|
50
|
-
this.storageService.set('mapProximityRadius', proximityRadiusValue || this.defaultProximityRadiusValue);
|
|
51
|
-
if (!enabled) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
let coord;
|
|
55
|
-
if (locationType === 'geolocation') {
|
|
56
|
-
if (!currentPos || !currentPos.position) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
coord = olProj.transform(currentPos.position, currentPos.projection, this.map.projection);
|
|
60
|
-
this.map.mapCenter$.next(false);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
coord = this.map.viewController.getCenter();
|
|
64
|
-
;
|
|
65
|
-
this.map.mapCenter$.next(true);
|
|
66
|
-
}
|
|
67
|
-
const coordLonLat = olProj.transform(coord, this.map.projection, 'EPSG:4269');
|
|
68
|
-
const roundedCoordLonLat = roundCoordTo(coordLonLat, 6);
|
|
69
|
-
this.currentPositionCoordinate$.next(roundedCoordLonLat);
|
|
70
|
-
const layersToMonitor = layers
|
|
71
|
-
.filter(layer => layer.ol instanceof olLayerVector &&
|
|
72
|
-
layer.dataSource.options.queryable &&
|
|
73
|
-
layer.visible &&
|
|
74
|
-
layer.isInResolutionsRange);
|
|
75
|
-
layersToMonitor.map(layerToMonitor => {
|
|
76
|
-
const layerSource = layerToMonitor.ol.getSource();
|
|
77
|
-
// Mostly for polygon features.
|
|
78
|
-
const olFeaturesAtCoordinate = layerSource.getFeaturesAtCoordinate(coord);
|
|
79
|
-
if (olFeaturesAtCoordinate && olFeaturesAtCoordinate.length) {
|
|
80
|
-
olFeaturesAtCoordinate.map(olFeatureAtCoordinate => {
|
|
81
|
-
const featureAtThisPosition = featureFromOl(olFeatureAtCoordinate, this.map.projection);
|
|
82
|
-
let title = this.getQueryTitle(featureAtThisPosition, layerToMonitor);
|
|
83
|
-
// todo handle imported layers without querytitle? prompt title or detect first column?
|
|
84
|
-
this.addFeatureToStore(layerToMonitor, coord, featureAtThisPosition, title, 0);
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
// compute proximity for remaining sources
|
|
89
|
-
const closestOlFeature = layerSource.getClosestFeatureToCoordinate(coord);
|
|
90
|
-
if (closestOlFeature) {
|
|
91
|
-
const closestOlGeom = closestOlFeature.getGeometry();
|
|
92
|
-
const closestFeature = featureFromOl(closestOlFeature, this.map.projection);
|
|
93
|
-
const geometryClosestPoint = closestOlGeom.getClosestPoint(coord);
|
|
94
|
-
const linebetween = new olLineString([coord, geometryClosestPoint]);
|
|
95
|
-
const lineLength = measureOlGeometryLength(linebetween, 'EPSG:3857');
|
|
96
|
-
if (lineLength <= proximityRadiusValue) {
|
|
97
|
-
let title = this.getQueryTitle(closestFeature, layerToMonitor);
|
|
98
|
-
// todo handle imported layers without querytitle? prompt title or detect first column?
|
|
99
|
-
this.addFeatureToStore(layerToMonitor, coord, closestFeature, title, lineLength);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}));
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Add a feature with proximity properties to the store
|
|
108
|
-
* @internal
|
|
109
|
-
*/
|
|
110
|
-
addFeatureToStore(layer, coordFromCalculatedDistance, feature, title, distance) {
|
|
111
|
-
const featureId = uuid();
|
|
112
|
-
const projection = this.map.ol.getView().getProjection();
|
|
113
|
-
const olGeometry = feature.ol.getGeometry();
|
|
114
|
-
const geometry = new GeoJSON().writeGeometryObject(olGeometry, {
|
|
115
|
-
featureProjection: projection,
|
|
116
|
-
dataProjection: projection
|
|
117
|
-
});
|
|
118
|
-
this.proximityFeatureStore.update({
|
|
119
|
-
type: FEATURE,
|
|
120
|
-
geometry,
|
|
121
|
-
projection: projection.getCode(),
|
|
122
|
-
properties: { ...feature.properties, ...{
|
|
123
|
-
id: featureId,
|
|
124
|
-
element: title,
|
|
125
|
-
distance,
|
|
126
|
-
coordFromCalculatedDistance,
|
|
127
|
-
layerSrcId: layer.id,
|
|
128
|
-
layerSrcTitle: layer.title
|
|
129
|
-
} },
|
|
130
|
-
meta: {
|
|
131
|
-
id: featureId
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
getQueryTitle(feature, layer) {
|
|
136
|
-
let title;
|
|
137
|
-
if (layer.options?.source?.options) {
|
|
138
|
-
const dataSourceOptions = layer.options.source
|
|
139
|
-
.options;
|
|
140
|
-
if (dataSourceOptions.queryTitle) {
|
|
141
|
-
title = this.getLabelMatch(feature, dataSourceOptions.queryTitle);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return title;
|
|
145
|
-
}
|
|
146
|
-
getLabelMatch(feature, labelMatch) {
|
|
147
|
-
let label = labelMatch;
|
|
148
|
-
const labelToGet = Array.from(labelMatch.matchAll(/\$\{([^\{\}]+)\}/g));
|
|
149
|
-
labelToGet.forEach(v => {
|
|
150
|
-
label = label.replace(v[0], feature.properties[v[1]]);
|
|
151
|
-
});
|
|
152
|
-
// Nothing done? check feature's attribute
|
|
153
|
-
if (labelToGet.length === 0 && label === labelMatch) {
|
|
154
|
-
label = feature.properties[labelMatch] || labelMatch;
|
|
155
|
-
}
|
|
156
|
-
return label;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
MapProximityState.ɵfac = function MapProximityState_Factory(t) { return new (t || MapProximityState)(i0.ɵɵinject(i1.MapState), i0.ɵɵinject(i2.StorageService)); };
|
|
160
|
-
MapProximityState.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: MapProximityState, factory: MapProximityState.ɵfac, providedIn: 'root' });
|
|
161
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MapProximityState, [{
|
|
162
|
-
type: Injectable,
|
|
163
|
-
args: [{
|
|
164
|
-
providedIn: 'root'
|
|
165
|
-
}]
|
|
166
|
-
}], function () { return [{ type: i1.MapState }, { type: i2.StorageService }]; }, null); })();
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { FeatureStore, featureFromOl, measureOlGeometryLength, FEATURE, roundCoordTo } from '@igo2/geo';
|
|
3
|
+
import { BehaviorSubject, combineLatest, interval } from 'rxjs';
|
|
4
|
+
import { debounceTime } from 'rxjs/operators';
|
|
5
|
+
import GeoJSON from 'ol/format/GeoJSON';
|
|
6
|
+
import { uuid } from '@igo2/utils';
|
|
7
|
+
import olLayerVector from 'ol/layer/Vector';
|
|
8
|
+
import olLineString from 'ol/geom/LineString';
|
|
9
|
+
import * as olProj from 'ol/proj';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "../map/map.state";
|
|
12
|
+
import * as i2 from "@igo2/core";
|
|
13
|
+
/**
|
|
14
|
+
* Service that holds the state of the direction module
|
|
15
|
+
*/
|
|
16
|
+
export class MapProximityState {
|
|
17
|
+
constructor(mapState, storageService) {
|
|
18
|
+
this.mapState = mapState;
|
|
19
|
+
this.storageService = storageService;
|
|
20
|
+
this.defaultProximityRadiusValue = 30;
|
|
21
|
+
this.enabled$ = new BehaviorSubject(false);
|
|
22
|
+
this.proximityRadiusValue$ = new BehaviorSubject(this.storageService.get('mapProximityRadius') || this.defaultProximityRadiusValue);
|
|
23
|
+
this.proximitylocationType$ = new BehaviorSubject('geolocation');
|
|
24
|
+
this.proximityFeatureStore = new FeatureStore([], { map: this.mapState.map });
|
|
25
|
+
this.subs$$ = [];
|
|
26
|
+
this.currentPositionCoordinate$ = new BehaviorSubject(undefined);
|
|
27
|
+
this.mapState.map.ol.once('rendercomplete', () => {
|
|
28
|
+
this.subscribeProximityMonitor();
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
get map() {
|
|
32
|
+
return this.mapState.map;
|
|
33
|
+
}
|
|
34
|
+
subscribeProximityMonitor() {
|
|
35
|
+
this.subs$$.push(combineLatest([
|
|
36
|
+
this.enabled$,
|
|
37
|
+
this.proximitylocationType$,
|
|
38
|
+
this.proximityRadiusValue$,
|
|
39
|
+
interval(5000),
|
|
40
|
+
this.map.geolocationController.position$
|
|
41
|
+
])
|
|
42
|
+
.pipe(debounceTime(750))
|
|
43
|
+
.subscribe((bunch) => {
|
|
44
|
+
this.proximityFeatureStore.clear();
|
|
45
|
+
const enabled = bunch[0];
|
|
46
|
+
const layers = this.map.layers;
|
|
47
|
+
const currentPos = this.map.geolocationController.position$.value;
|
|
48
|
+
const locationType = bunch[1];
|
|
49
|
+
const proximityRadiusValue = bunch[2];
|
|
50
|
+
this.storageService.set('mapProximityRadius', proximityRadiusValue || this.defaultProximityRadiusValue);
|
|
51
|
+
if (!enabled) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
let coord;
|
|
55
|
+
if (locationType === 'geolocation') {
|
|
56
|
+
if (!currentPos || !currentPos.position) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
coord = olProj.transform(currentPos.position, currentPos.projection, this.map.projection);
|
|
60
|
+
this.map.mapCenter$.next(false);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
coord = this.map.viewController.getCenter();
|
|
64
|
+
;
|
|
65
|
+
this.map.mapCenter$.next(true);
|
|
66
|
+
}
|
|
67
|
+
const coordLonLat = olProj.transform(coord, this.map.projection, 'EPSG:4269');
|
|
68
|
+
const roundedCoordLonLat = roundCoordTo(coordLonLat, 6);
|
|
69
|
+
this.currentPositionCoordinate$.next(roundedCoordLonLat);
|
|
70
|
+
const layersToMonitor = layers
|
|
71
|
+
.filter(layer => layer.ol instanceof olLayerVector &&
|
|
72
|
+
layer.dataSource.options.queryable &&
|
|
73
|
+
layer.visible &&
|
|
74
|
+
layer.isInResolutionsRange);
|
|
75
|
+
layersToMonitor.map(layerToMonitor => {
|
|
76
|
+
const layerSource = layerToMonitor.ol.getSource();
|
|
77
|
+
// Mostly for polygon features.
|
|
78
|
+
const olFeaturesAtCoordinate = layerSource.getFeaturesAtCoordinate(coord);
|
|
79
|
+
if (olFeaturesAtCoordinate && olFeaturesAtCoordinate.length) {
|
|
80
|
+
olFeaturesAtCoordinate.map(olFeatureAtCoordinate => {
|
|
81
|
+
const featureAtThisPosition = featureFromOl(olFeatureAtCoordinate, this.map.projection);
|
|
82
|
+
let title = this.getQueryTitle(featureAtThisPosition, layerToMonitor);
|
|
83
|
+
// todo handle imported layers without querytitle? prompt title or detect first column?
|
|
84
|
+
this.addFeatureToStore(layerToMonitor, coord, featureAtThisPosition, title, 0);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// compute proximity for remaining sources
|
|
89
|
+
const closestOlFeature = layerSource.getClosestFeatureToCoordinate(coord);
|
|
90
|
+
if (closestOlFeature) {
|
|
91
|
+
const closestOlGeom = closestOlFeature.getGeometry();
|
|
92
|
+
const closestFeature = featureFromOl(closestOlFeature, this.map.projection);
|
|
93
|
+
const geometryClosestPoint = closestOlGeom.getClosestPoint(coord);
|
|
94
|
+
const linebetween = new olLineString([coord, geometryClosestPoint]);
|
|
95
|
+
const lineLength = measureOlGeometryLength(linebetween, 'EPSG:3857');
|
|
96
|
+
if (lineLength <= proximityRadiusValue) {
|
|
97
|
+
let title = this.getQueryTitle(closestFeature, layerToMonitor);
|
|
98
|
+
// todo handle imported layers without querytitle? prompt title or detect first column?
|
|
99
|
+
this.addFeatureToStore(layerToMonitor, coord, closestFeature, title, lineLength);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Add a feature with proximity properties to the store
|
|
108
|
+
* @internal
|
|
109
|
+
*/
|
|
110
|
+
addFeatureToStore(layer, coordFromCalculatedDistance, feature, title, distance) {
|
|
111
|
+
const featureId = uuid();
|
|
112
|
+
const projection = this.map.ol.getView().getProjection();
|
|
113
|
+
const olGeometry = feature.ol.getGeometry();
|
|
114
|
+
const geometry = new GeoJSON().writeGeometryObject(olGeometry, {
|
|
115
|
+
featureProjection: projection,
|
|
116
|
+
dataProjection: projection
|
|
117
|
+
});
|
|
118
|
+
this.proximityFeatureStore.update({
|
|
119
|
+
type: FEATURE,
|
|
120
|
+
geometry,
|
|
121
|
+
projection: projection.getCode(),
|
|
122
|
+
properties: { ...feature.properties, ...{
|
|
123
|
+
id: featureId,
|
|
124
|
+
element: title,
|
|
125
|
+
distance,
|
|
126
|
+
coordFromCalculatedDistance,
|
|
127
|
+
layerSrcId: layer.id,
|
|
128
|
+
layerSrcTitle: layer.title
|
|
129
|
+
} },
|
|
130
|
+
meta: {
|
|
131
|
+
id: featureId
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
getQueryTitle(feature, layer) {
|
|
136
|
+
let title;
|
|
137
|
+
if (layer.options?.source?.options) {
|
|
138
|
+
const dataSourceOptions = layer.options.source
|
|
139
|
+
.options;
|
|
140
|
+
if (dataSourceOptions.queryTitle) {
|
|
141
|
+
title = this.getLabelMatch(feature, dataSourceOptions.queryTitle);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return title;
|
|
145
|
+
}
|
|
146
|
+
getLabelMatch(feature, labelMatch) {
|
|
147
|
+
let label = labelMatch;
|
|
148
|
+
const labelToGet = Array.from(labelMatch.matchAll(/\$\{([^\{\}]+)\}/g));
|
|
149
|
+
labelToGet.forEach(v => {
|
|
150
|
+
label = label.replace(v[0], feature.properties[v[1]]);
|
|
151
|
+
});
|
|
152
|
+
// Nothing done? check feature's attribute
|
|
153
|
+
if (labelToGet.length === 0 && label === labelMatch) {
|
|
154
|
+
label = feature.properties[labelMatch] || labelMatch;
|
|
155
|
+
}
|
|
156
|
+
return label;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
MapProximityState.ɵfac = function MapProximityState_Factory(t) { return new (t || MapProximityState)(i0.ɵɵinject(i1.MapState), i0.ɵɵinject(i2.StorageService)); };
|
|
160
|
+
MapProximityState.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: MapProximityState, factory: MapProximityState.ɵfac, providedIn: 'root' });
|
|
161
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MapProximityState, [{
|
|
162
|
+
type: Injectable,
|
|
163
|
+
args: [{
|
|
164
|
+
providedIn: 'root'
|
|
165
|
+
}]
|
|
166
|
+
}], function () { return [{ type: i1.MapState }, { type: i2.StorageService }]; }, null); })();
|
|
167
167
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXByb3hpbWl0eS5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ludGVncmF0aW9uL3NyYy9saWIvbWFwL21hcC1wcm94aW1pdHkuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFBRSx1QkFBdUIsRUFBcUMsT0FBTyxFQUFFLFlBQVksRUFDakcsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUMsT0FBTyxPQUFPLE1BQU0sbUJBQW1CLENBQUM7QUFDeEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuQyxPQUFPLGFBQWEsTUFBTSxpQkFBaUIsQ0FBQztBQUc1QyxPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLFNBQVMsQ0FBQzs7OztBQUVsQzs7R0FFRztBQUlILE1BQU0sT0FBTyxpQkFBaUI7SUFnQjVCLFlBQ1UsUUFBa0IsRUFDbEIsY0FBOEI7UUFEOUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFoQmhDLGdDQUEyQixHQUFXLEVBQUUsQ0FBQztRQUUxQyxhQUFRLEdBQTZCLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLDBCQUFxQixHQUE0QixJQUFJLGVBQWUsQ0FDekUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQVcsSUFBSSxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUN4RiwyQkFBc0IsR0FBNEIs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Q0FBQyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILDBDQUEwQztRQUMxQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxVQUFVLEVBQUU7WUFDbkQsS0FBSyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDO1NBQ3REO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOztrRkFqS1UsaUJBQWlCO3VFQUFqQixpQkFBaUIsV0FBakIsaUJBQWlCLG1CQUZoQixNQUFNO3VGQUVQLGlCQUFpQjtjQUg3QixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIEZlYXR1cmVTdG9yZSwgRmVhdHVyZSwgSWdvTWFwLFxuICBmZWF0dXJlRnJvbU9sLCBtZWFzdXJlT2xHZW9tZXRyeUxlbmd0aCwgTGF5ZXIsIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zLCBGRUFUVVJFLCByb3VuZENvb3JkVG8sIFF1ZXJ5YWJsZURhdGFTb3VyY2UsIE1hcEdlb2xvY2F0aW9uU3RhdGVcbn0gZnJvbSAnQGlnbzIvZ2VvJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgaW50ZXJ2YWwsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWFwU3RhdGUgfSBmcm9tICcuLi9tYXAvbWFwLnN0YXRlJztcblxuaW1wb3J0IEdlb0pTT04gZnJvbSAnb2wvZm9ybWF0L0dlb0pTT04nO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IG9sTGF5ZXJWZWN0b3IgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yJztcbmltcG9ydCBvbFZlY3RvclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcbmltcG9ydCBHZW9tZXRyeSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcbmltcG9ydCBvbExpbmVTdHJpbmcgZnJvbSAnb2wvZ2VvbS9MaW5lU3RyaW5nJztcbmltcG9ydCAqIGFzIG9sUHJvaiBmcm9tICdvbC9wcm9qJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XG4vKipcbiAqIFNlcnZpY2UgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGRpcmVjdGlvbiBtb2R1bGVcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTWFwUHJveGltaXR5U3RhdGUge1xuXG4gIHByaXZhdGUgZGVmYXVsdFByb3hpbWl0eVJhZGl1c1ZhbHVlOiBudW1iZXIgPSAzMDtcblxuICBwdWJsaWMgZW5hYmxlZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcHJveGltaXR5UmFkaXVzVmFsdWUkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldCgnbWFwUHJveGltaXR5UmFkaXVzJykgYXMgbnVtYmVyIHx8IHRoaXMuZGVmYXVsdFByb3hpbWl0eVJhZGl1c1ZhbHVlKTtcbiAgcHVibGljIHByb3hpbWl0eWxvY2F0aW9uVHlwZSQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCdnZW9sb2NhdGlvbicpO1xuICBwdWJsaWMgcHJveGltaXR5RmVhdHVyZVN0b3JlOiBGZWF0dXJlU3RvcmU8RmVhdHVyZT4gPSBuZXcgRmVhdHVyZVN0b3JlPEZlYXR1cmU+KFtdLCB7IG1hcDogdGhpcy5tYXBTdGF0ZS5tYXAgfSk7XG4gIHByaXZhdGUgc3VicyQkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwdWJsaWMgY3VycmVudFBvc2l0aW9uQ29vcmRpbmF0ZSQ6IEJlaGF2aW9yU3ViamVjdDxbbnVtYmVyLCBudW1iZXJdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcblxuICBnZXQgbWFwKCk6IElnb01hcCB7XG4gICAgcmV0dXJuIHRoaXMubWFwU3RhdGUubWFwO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtYXBTdGF0ZTogTWFwU3RhdGUsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UpIHtcblxuICAgIHRoaXMubWFwU3RhdGUubWFwLm9sLm9uY2UoJ3JlbmRlcmNvbXBsZXRlJywgKCkgPT4ge1xuICAgICAgdGhpcy5zdWJzY3JpYmVQcm94aW1pdHlNb25pdG9yKCk7XG4gICAgfSk7XG4gIH1cblxuXG4gIHN1YnNjcmliZVByb3hpbWl0eU1vbml0b3IoKSB7XG4gICAgdGhpcy5zdWJzJCQucHVzaChjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZW5hYmxlZCQsXG4gICAgICB0aGlzLnByb3hpbWl0eWxvY2F0aW9uVHlwZSQsXG4gICAgICB0aGlzLnByb3hpbWl0eVJhZGl1c1ZhbHVlJCxcbiAgICAgIGludGVydmFsKDUwMDApLFxuICAgICAgdGhpcy5tYXAuZ2VvbG9jYXRpb25Db250cm9sbGVyLnBvc2l0aW9uJFxuICAgIF0pXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcbiAgICAgIC5zdWJzY3JpYmUoKGJ1bmNoOiBbYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIsIG51bWJlciwgTWFwR2VvbG9jYXRpb25TdGF0ZV0pID0+IHtcbiAgICAgICAgdGhpcy5wcm94aW1pdHlGZWF0dXJlU3RvcmUuY2xlYXIoKTtcbiAgICAgICAgY29uc3QgZW5hYmxlZCA9IGJ1bmNoWzBdO1xuICAgICAgICBjb25zdCBsYXllcnMgPSB0aGlzLm1hcC5sYXllcnM7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQb3MgPSB0aGlzLm1hcC5nZW9sb2NhdGlvbkNvbnRyb2xsZXIucG9zaXRpb24kLnZhbHVlO1xuICAgICAgICBjb25zdCBsb2NhdGlvblR5cGUgPSBidW5jaFsxXTtcbiAgICAgICAgY29uc3QgcHJveGltaXR5UmFkaXVzVmFsdWUgPSBidW5jaFsyXTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ21hcFByb3hpbWl0eVJhZGl1cycsIHByb3hpbWl0eVJhZGl1c1ZhbHVlIHx8IHRoaXMuZGVmYXVsdFByb3hpbWl0eVJhZGl1c1ZhbHVlKTtcblxuICAgICAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCBjb29yZDogbnVtYmVyW107XG4gICAgICAgIGlmIChsb2NhdGlvblR5cGUgPT09ICdnZW9sb2NhdGlvbicpIHtcbiAgICAgICAgICBpZiAoIWN1cnJlbnRQb3MgfHwgIWN1cnJlbnRQb3MucG9zaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb29yZCA9IG9sUHJvai50cmFuc2Zvcm0oY3VycmVudFBvcy5wb3NpdGlvbiwgY3VycmVudFBvcy5wcm9qZWN0aW9uLCB0aGlzLm1hcC5wcm9qZWN0aW9uKTtcbiAgICAgICAgICB0aGlzLm1hcC5tYXBDZW50ZXIkLm5leHQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvb3JkID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIuZ2V0Q2VudGVyKCk7O1xuICAgICAgICAgIHRoaXMubWFwLm1hcENlbnRlciQubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvb3JkTG9uTGF0ID0gb2xQcm9qLnRyYW5zZm9ybShjb29yZCwgdGhpcy5tYXAucHJvamVjdGlvbiwgJ0VQU0c6NDI2OScpO1xuICAgICAgICBjb25zdCByb3VuZGVkQ29vcmRMb25MYXQgPSByb3VuZENvb3JkVG8oY29vcmRMb25MYXQgYXMgW251bWJlciwgbnVtYmVyXSwgNik7XG4gICAgICAgIHRoaXMuY3VycmVudFBvc2l0aW9uQ29vcmRpbmF0ZSQubmV4dChyb3VuZGVkQ29vcmRMb25MYXQpO1xuXG4gICAgICAgIGNvbnN0IGxheWVyc1RvTW9uaXRvciA9IGxheWVyc1xuICAgICAgICAgIC5maWx0ZXIobGF5ZXIgPT5cbiAgICAgICAgICAgIGxheWVyLm9sIGluc3RhbmNlb2Ygb2xMYXllclZlY3RvciAmJlxuICAgICAgICAgICAgKGxheWVyLmRhdGFTb3VyY2UgYXMgUXVlcnlhYmxlRGF0YVNvdXJjZSkub3B0aW9ucy5xdWVyeWFibGUgJiZcbiAgICAgICAgICAgIGxheWVyLnZpc2libGUgJiZcbiAgICAgICAgICAgIGxheWVyLmlzSW5SZXNvbHV0aW9uc1JhbmdlKTtcblxuICAgICAgICBsYXllcnNUb01vbml0b3IubWFwKGxheWVyVG9Nb25pdG9yID0+IHtcbiAgICAgICAgICBjb25zdCBsYXllclNvdXJjZSA9IGxheWVyVG9Nb25pdG9yLm9sLmdldFNvdXJjZSgpIGFzIG9sVmVjdG9yU291cmNlPEdlb21ldHJ5PjtcblxuICAgICAgICAgIC8vIE1vc3RseSBmb3IgcG9seWdvbiBmZWF0dXJlcy5cbiAgICAgICAgICBjb25zdCBvbEZlYXR1cmVzQXRDb29yZGluYXRlID0gbGF5ZXJTb3VyY2UuZ2V0RmVhdHVyZXNBdENvb3JkaW5hdGUoY29vcmQpO1xuICAgICAgICAgIGlmIChvbEZlYXR1cmVzQXRDb29yZGluYXRlICYmIG9sRmVhdHVyZXNBdENvb3JkaW5hdGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBvbEZlYXR1cmVzQXRDb29yZGluYXRlLm1hcChvbEZlYXR1cmVBdENvb3JkaW5hdGUgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlQXRUaGlzUG9zaXRpb24gPSBmZWF0dXJlRnJvbU9sKG9sRmVhdHVyZUF0Q29vcmRpbmF0ZSwgdGhpcy5tYXAucHJvamVjdGlvbik7XG4gICAgICAgICAgICAgIGxldCB0aXRsZSA9IHRoaXMuZ2V0UXVlcnlUaXRsZShmZWF0dXJlQXRUaGlzUG9zaXRpb24sIGxheWVyVG9Nb25pdG9yKTtcbiAgICAgICAgICAgICAgLy8gdG9kbyBoYW5kbGUgaW1wb3J0ZWQgbGF5ZXJzIHdpdGhvdXQgcXVlcnl0aXRsZT8gcHJvbXB0IHRpdGxlIG9yIGRldGVjdCBmaXJzdCBjb2x1bW4/XG4gICAgICAgICAgICAgIHRoaXMuYWRkRmVhdHVyZVRvU3RvcmUobGF5ZXJUb01vbml0b3IsIGNvb3JkLCBmZWF0dXJlQXRUaGlzUG9zaXRpb24sIHRpdGxlLCAwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjb21wdXRlIHByb3hpbWl0eSBmb3IgcmVtYWluaW5nIHNvdXJjZXNcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RPbEZlYXR1cmUgPSBsYXllclNvdXJjZS5nZXRDbG9zZXN0RmVhdHVyZVRvQ29vcmRpbmF0ZShjb29yZCk7XG4gICAgICAgICAgICBpZiAoY2xvc2VzdE9sRmVhdHVyZSkge1xuICAgICAgICAgICAgICBjb25zdCBjbG9zZXN0T2xHZW9tID0gY2xvc2VzdE9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpO1xuICAgICAgICAgICAgICBjb25zdCBjbG9zZXN0RmVhdHVyZSA9IGZlYXR1cmVGcm9tT2woY2xvc2VzdE9sRmVhdHVyZSwgdGhpcy5tYXAucHJvamVjdGlvbik7XG4gICAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5Q2xvc2VzdFBvaW50ID0gY2xvc2VzdE9sR2VvbS5nZXRDbG9zZXN0UG9pbnQoY29vcmQpO1xuICAgICAgICAgICAgICBjb25zdCBsaW5lYmV0d2VlbiA9IG5ldyBvbExpbmVTdHJpbmcoW2Nvb3JkLCBnZW9tZXRyeUNsb3Nlc3RQb2ludF0pO1xuICAgICAgICAgICAgICBjb25zdCBsaW5lTGVuZ3RoID0gbWVhc3VyZU9sR2VvbWV0cnlMZW5ndGgobGluZWJldHdlZW4sICdFUFNHOjM4NTcnKTtcbiAgICAgICAgICAgICAgaWYgKGxpbmVMZW5ndGggPD0gcHJveGltaXR5UmFkaXVzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLmdldFF1ZXJ5VGl0bGUoY2xvc2VzdEZlYXR1cmUsIGxheWVyVG9Nb25pdG9yKTtcbiAgICAgICAgICAgICAgICAvLyB0b2RvIGhhbmRsZSBpbXBvcnRlZCBsYXllcnMgd2l0aG91dCBxdWVyeXRpdGxlPyBwcm9tcHQgdGl0bGUgb3IgZGV0ZWN0IGZpcnN0IGNvbHVtbj9cbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmVUb1N0b3JlKGxheWVyVG9Nb25pdG9yLCBjb29yZCwgY2xvc2VzdEZlYXR1cmUsIHRpdGxlLCBsaW5lTGVuZ3RoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIH0pKTtcbiAgfVxuXG4gICAgLyoqXG4gICAqIEFkZCBhIGZlYXR1cmUgd2l0aCBwcm94aW1pdHkgcHJvcGVydGllcyB0byB0aGUgc3RvcmVcbiAgICogQGludGVybmFsXG4gICAqL1xuICAgICBwcml2YXRlIGFkZEZlYXR1cmVUb1N0b3JlKGxheWVyOiBMYXllciwgY29vcmRGcm9tQ2FsY3VsYXRlZERpc3RhbmNlLCBmZWF0dXJlOiBGZWF0dXJlLCB0aXRsZSwgZGlzdGFuY2UpIHtcbiAgICAgIGNvbnN0IGZlYXR1cmVJZCA9IHV1aWQoKTtcbiAgICAgIGNvbnN0IHByb2plY3Rpb24gPSB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpO1xuICAgICAgY29uc3Qgb2xHZW9tZXRyeSA9IGZlYXR1cmUub2wuZ2V0R2VvbWV0cnkoKSBhcyBHZW9tZXRyeTtcbiAgICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEdlb0pTT04oKS53cml0ZUdlb21ldHJ5T2JqZWN0KG9sR2VvbWV0cnksIHtcbiAgICAgICAgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb24sXG4gICAgICAgIGRhdGFQcm9qZWN0aW9uOiBwcm9qZWN0aW9uXG4gICAgICB9KSBhcyBhbnk7XG4gICAgICB0aGlzLnByb3hpbWl0eUZlYXR1cmVTdG9yZS51cGRhdGUoe1xuICAgICAgICB0eXBlOiBGRUFUVVJFLFxuICAgICAgICBnZW9tZXRyeSxcbiAgICAgICAgcHJvamVjdGlvbjogcHJvamVjdGlvbi5nZXRDb2RlKCksXG4gICAgICAgIHByb3BlcnRpZXM6IHsuLi5mZWF0dXJlLnByb3BlcnRpZXMsLi4ue1xuICAgICAgICAgIGlkOiBmZWF0dXJlSWQsXG4gICAgICAgICAgZWxlbWVudDogdGl0bGUsXG4gICAgICAgICAgZGlzdGFuY2UsXG4gICAgICAgICAgY29vcmRGcm9tQ2FsY3VsYXRlZERpc3RhbmNlLFxuICAgICAgICAgIGxheWVyU3JjSWQ6IGxheWVyLmlkLFxuICAgICAgICAgIGxheWVyU3JjVGl0bGU6IGxheWVyLnRpdGxlXG4gICAgICAgIH19LFxuICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgaWQ6IGZlYXR1cmVJZFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgZ2V0UXVlcnlUaXRsZShmZWF0dXJlOiBGZWF0dXJlLCBsYXllcjogTGF5ZXIpOiBzdHJpbmcge1xuICAgIGxldCB0aXRsZTtcbiAgICBpZiAobGF5ZXIub3B0aW9ucz8uc291cmNlPy5vcHRpb25zKSB7XG4gICAgICBjb25zdCBkYXRhU291cmNlT3B0aW9ucyA9IGxheWVyLm9wdGlvbnMuc291cmNlXG4gICAgICAgIC5vcHRpb25zIGFzIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zO1xuICAgICAgaWYgKGRhdGFTb3VyY2VPcHRpb25zLnF1ZXJ5VGl0bGUpIHtcbiAgICAgICAgdGl0bGUgPSB0aGlzLmdldExhYmVsTWF0Y2goZmVhdHVyZSwgZGF0YVNvdXJjZU9wdGlvbnMucXVlcnlUaXRsZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aXRsZTtcbiAgfVxuXG4gIGdldExhYmVsTWF0Y2goZmVhdHVyZTogRmVhdHVyZSwgbGFiZWxNYXRjaCk6IHN0cmluZyB7XG4gICAgbGV0IGxhYmVsID0gbGFiZWxNYXRjaDtcbiAgICBjb25zdCBsYWJlbFRvR2V0ID0gQXJyYXkuZnJvbShsYWJlbE1hdGNoLm1hdGNoQWxsKC9cXCRcXHsoW15cXHtcXH1dKylcXH0vZykpO1xuXG4gICAgbGFiZWxUb0dldC5mb3JFYWNoKHYgPT4ge1xuICAgICAgbGFiZWwgPSBsYWJlbC5yZXBsYWNlKHZbMF0sIGZlYXR1cmUucHJvcGVydGllc1t2WzFdXSk7XG4gICAgfSk7XG5cbiAgICAvLyBOb3RoaW5nIGRvbmU/IGNoZWNrIGZlYXR1cmUncyBhdHRyaWJ1dGVcbiAgICBpZiAobGFiZWxUb0dldC5sZW5ndGggPT09IDAgJiYgbGFiZWwgPT09IGxhYmVsTWF0Y2gpIHtcbiAgICAgIGxhYmVsID0gZmVhdHVyZS5wcm9wZXJ0aWVzW2xhYmVsTWF0Y2hdIHx8IGxhYmVsTWF0Y2g7XG4gICAgfVxuICAgIHJldHVybiBsYWJlbDtcbiAgfVxufVxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './map-tool.component';
|
|
1
|
+
export * from './map-tool.component';
|
|
2
2
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9pbnRlZ3JhdGlvbi9zcmMvbGliL21hcC9tYXAtdG9vbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9tYXAtdG9vbC5jb21wb25lbnQnO1xuIl19
|