diff --git a/src/app/@ansyn/ansyn/modules/menu-items/tools/actions/tools.actions.ts b/src/app/@ansyn/ansyn/modules/menu-items/tools/actions/tools.actions.ts index 6c4e34301b..a78d047dcc 100644 --- a/src/app/@ansyn/ansyn/modules/menu-items/tools/actions/tools.actions.ts +++ b/src/app/@ansyn/ansyn/modules/menu-items/tools/actions/tools.actions.ts @@ -56,7 +56,7 @@ export class StartMouseShadow implements Action { export class SetAnnotationMode implements Action { type = ToolsActionsTypes.STORE.SET_ANNOTATION_MODE; - constructor(public payload?: AnnotationMode) { + constructor(public payload: AnnotationMode = null) { } } diff --git a/src/app/@ansyn/ansyn/modules/menu-items/tools/components/annotations-control/annotations-control.component.ts b/src/app/@ansyn/ansyn/modules/menu-items/tools/components/annotations-control/annotations-control.component.ts index b0f2b2dd45..3f6f15336a 100644 --- a/src/app/@ansyn/ansyn/modules/menu-items/tools/components/annotations-control/annotations-control.component.ts +++ b/src/app/@ansyn/ansyn/modules/menu-items/tools/components/annotations-control/annotations-control.component.ts @@ -99,7 +99,7 @@ export class AnnotationsControlComponent implements OnInit, OnDestroy { } setAnnotationMode(mode?: AnnotationMode) { - const dispatchValue = this.mode === mode ? undefined : mode; + const dispatchValue = this.mode === mode ? null : mode; if (dispatchValue) { this.store.dispatch(new ClearActiveInteractionsAction({ skipClearFor: [SetAnnotationMode] })); } diff --git a/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/layers/openlayers-geoJson-layers.visualizer.ts b/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/layers/openlayers-geoJson-layers.visualizer.ts index 102956cf58..a0fc00902d 100644 --- a/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/layers/openlayers-geoJson-layers.visualizer.ts +++ b/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/layers/openlayers-geoJson-layers.visualizer.ts @@ -69,7 +69,6 @@ export class OpenlayersGeoJsonLayersVisualizer extends EntitiesVisualizer { return collection.features.map((feature: Feature): IVisualizerEntity => ({ id: feature.properties.id || UUID.UUID(), featureJson: feature, - style: feature.properties.style })); } diff --git a/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/visualizers/tools/ansyn.annotations.visualizer.ts b/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/visualizers/tools/ansyn.annotations.visualizer.ts index 099d72372a..6021eb4894 100644 --- a/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/visualizers/tools/ansyn.annotations.visualizer.ts +++ b/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/visualizers/tools/ansyn.annotations.visualizer.ts @@ -1,9 +1,9 @@ import { fromCircle } from 'ol/geom/Polygon'; import { BaseImageryPlugin, ImageryPlugin, IVisualizerEntity, IVisualizerStyle } from '@ansyn/imagery'; -import { uniq } from 'lodash'; +import { groupBy as _groupBy, uniq, isEqual as _isEqual, get as _get } from 'lodash'; import { select, Store } from '@ngrx/store'; import { MapFacadeService, selectActiveMapId, selectMapsList } from '@ansyn/map-facade'; -import { combineLatest, Observable } from 'rxjs'; +import { combineLatest, Observable, EMPTY } from 'rxjs'; import { Inject } from '@angular/core'; import { distinctUntilChanged, filter, map, mergeMap, tap, withLatestFrom } from 'rxjs/operators'; import { AutoSubscription } from 'auto-subscriptions'; @@ -118,10 +118,7 @@ export class AnsynAnnotationsVisualizer extends BaseImageryPlugin { @AutoSubscription onChangeMode$ = () => this.annotationsVisualizer.events.onChangeMode.pipe( - tap((mode) => { - const newMode = !Boolean(mode) ? undefined : mode; // prevent infinite loop - this.store$.dispatch(new SetAnnotationMode(newMode)) - }) + tap((mode) => this.store$.dispatch(new SetAnnotationMode(mode))) ); @AutoSubscription @@ -174,18 +171,20 @@ export class AnsynAnnotationsVisualizer extends BaseImageryPlugin { const annotationsLayerEntities = this.annotationsVisualizer.annotationsLayerToEntities(annotationsLayer); this.annotationsVisualizer.getEntities() .filter(({ id }) => !annotationsLayerEntities.some((entity) => id === entity.id)) - .forEach(({ id }) => this.annotationsVisualizer.removeEntity(id, true)); + .forEach(({ id }) => this.annotationsVisualizer._removeEntity(id)); const entitiesToAdd = annotationsLayerEntities .filter((entity) => { - const oldEntity = this.annotationsVisualizer.idToEntity.get(entity.id); + const oldEntity = _get(this.annotationsVisualizer, `entities[${entity.id}].originalEntity`); if (oldEntity) { - const isShowMeasuresDiff = oldEntity.originalEntity.showMeasures !== entity.showMeasures; - const isLabelDiff = oldEntity.originalEntity.label !== entity.label; - const isFillDiff = oldEntity.originalEntity.style.initial.fill !== entity.style.initial.fill; - const isStrokeWidthDiff = oldEntity.originalEntity.style.initial['stroke-width'] !== entity.style.initial['stroke-width']; - const isStrokeDiff = oldEntity.originalEntity.style.initial['stroke'] !== entity.style.initial['stroke']; - const isOpacityDiff = ['fill-opacity', 'stroke-opacity'].filter((o) => oldEntity.originalEntity.style.initial[o] !== entity.style.initial[o]); + const { properties: oldProperties } = oldEntity.featureJson; + const { properties } = entity.featureJson; + const isShowMeasuresDiff = oldProperties.showMeasures !== properties.showMeasures; + const isLabelDiff = oldProperties.label !== properties.label; + const isFillDiff = oldProperties.style.initial.fill !== properties.style.initial.fill; + const isStrokeWidthDiff = oldProperties.style.initial['stroke-width'] !== properties.style.initial['stroke-width']; + const isStrokeDiff = oldProperties.style.initial['stroke'] !== properties.style.initial['stroke']; + const isOpacityDiff = ['fill-opacity', 'stroke-opacity'].filter((o) => oldProperties.style.initial[o] !== properties.style.initial[o]); return isShowMeasuresDiff || isLabelDiff || isFillDiff || isStrokeWidthDiff || isStrokeDiff || isOpacityDiff; } return true; diff --git a/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/visualizers/tools/measure-distance.visualizer.ts b/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/visualizers/tools/measure-distance.visualizer.ts index 1c00bcad7c..8fdf2f0c77 100644 --- a/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/visualizers/tools/measure-distance.visualizer.ts +++ b/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/visualizers/tools/measure-distance.visualizer.ts @@ -232,7 +232,7 @@ export class MeasureDistanceVisualizer extends EntitiesVisualizer { if (calculateCenterOfMass) { const featureId = feature.getId(); - const entityMap = this.idToEntity.get(featureId); + const entityMap = this.entities[featureId]; if (entityMap) { const featureGeoJson = this.geoJsonFormat.writeFeatureObject(entityMap.feature); const centroid = getPointByGeometry(featureGeoJson.geometry); diff --git a/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/visualizers/tools/mouse-shadow.visualizer.ts b/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/visualizers/tools/mouse-shadow.visualizer.ts index 6be4f7db80..25e2f3228a 100644 --- a/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/visualizers/tools/mouse-shadow.visualizer.ts +++ b/src/app/@ansyn/ansyn/modules/plugins/openlayers/plugins/visualizers/tools/mouse-shadow.visualizer.ts @@ -94,18 +94,18 @@ export class MouseShadowVisualizer extends EntitiesVisualizer { }; logicalEntitiesCopy.forEach((entity: IVisualizerEntity) => { - this.removeEntity(entity.id); + this._removeEntity(entity.id); const clonedFeatureJson: any = { ...entity.featureJson, id: entity.id }; featuresCollectionToAdd.features.push(clonedFeatureJson); - this.idToEntity.set(entity.id, { originalEntity: entity, feature: null }); + this.entities = { ...this.entities, [entity.id]: { originalEntity: entity, feature: null } }; }); return this.projectionService.projectCollectionApproximatelyToImage(featuresCollectionToAdd, this.iMap.mapObject).pipe( map((features: olFeature[]) => { features.forEach((feature: olFeature) => { const id: string = feature.getId(); - const existingEntity = this.idToEntity.get(id); - this.idToEntity.set(id, { ...existingEntity, feature: feature }); + const existingEntity = this.entities[id]; + this.entities = { ...this.entities, [id]: { ...existingEntity, feature: feature } }; }); this.source.addFeatures(features); return true; diff --git a/src/app/@ansyn/imagery/model/visualizers/visualizers-entity.ts b/src/app/@ansyn/imagery/model/visualizers/visualizers-entity.ts index 39514a0882..f586f85d37 100644 --- a/src/app/@ansyn/imagery/model/visualizers/visualizers-entity.ts +++ b/src/app/@ansyn/imagery/model/visualizers/visualizers-entity.ts @@ -1,11 +1,6 @@ -import { IVisualizerStateStyle } from './visualizer-state'; import { Feature } from 'geojson'; export interface IVisualizerEntity { id: string; - label?: string; featureJson: Feature; - type?: string; - style?: Partial; - showMeasures?: boolean; } diff --git a/src/app/@ansyn/ol/plugins/annotations/annotations-context-menu/components/annotation-context-menu/annotation-context-menu.component.html b/src/app/@ansyn/ol/plugins/annotations/annotations-context-menu/components/annotation-context-menu/annotation-context-menu.component.html index ea98c31892..6386a2d9ac 100644 --- a/src/app/@ansyn/ol/plugins/annotations/annotations-context-menu/components/annotation-context-menu/annotation-context-menu.component.html +++ b/src/app/@ansyn/ol/plugins/annotations/annotations-context-menu/components/annotation-context-menu/annotation-context-menu.component.html @@ -1,100 +1,107 @@ -
- -
-
    -
  • - -
  • -
  • - + -
    +
    - - - - - -
  • -
  • -

    - +

  • +
  • + - - -

    -
  • -
  • -

    -

  • +
  • +

    + + + +

    +
  • +
  • +

    + + +

    +
  • + +
  • + - -

    -
  • + +
+
-
  • - -
  • -
    - - +
    diff --git a/src/app/@ansyn/ol/plugins/annotations/annotations-context-menu/components/annotation-context-menu/annotation-context-menu.component.ts b/src/app/@ansyn/ol/plugins/annotations/annotations-context-menu/components/annotation-context-menu/annotation-context-menu.component.ts index 7e62415c8e..2fef71ef21 100644 --- a/src/app/@ansyn/ol/plugins/annotations/annotations-context-menu/components/annotation-context-menu/annotation-context-menu.component.ts +++ b/src/app/@ansyn/ol/plugins/annotations/annotations-context-menu/components/annotation-context-menu/annotation-context-menu.component.ts @@ -56,12 +56,12 @@ export class AnnotationContextMenuComponent implements OnInit, OnDestroy { } calcBoundingRect(id) { - const { feature } = this.annotations.idToEntity.get(id); + const { feature } = this.annotations.entities[id]; return this.annotations.getFeatureBoundingRect(feature); } getFeatureProps(id) { - const { originalEntity: { featureJson: { properties } } } = this.annotations.idToEntity.get(id); + const { originalEntity: { featureJson: { properties } } } = this.annotations.entities[id]; return properties; } @@ -84,12 +84,7 @@ export class AnnotationContextMenuComponent implements OnInit, OnDestroy { } removeFeature(featureId) { - this.annotations.removeFeature(featureId); - // this.annotations.events.onSelect.next({ - // mapId: this.mapState.id, - // multi: true, - // data: { [featureId]: { featureId } } - // }) + this.annotations.removeEntity(featureId); } selectTab(id: string, tab: AnnotationsContextmenuTabs) { @@ -98,7 +93,7 @@ export class AnnotationContextMenuComponent implements OnInit, OnDestroy { toggleMeasures(featureId) { const { showMeasures } = this.getFeatureProps(featureId); - this.annotations.updateFeature(featureId, { showMeasures: !showMeasures }); + this.annotations.updateEntity(featureId, { showMeasures: !showMeasures }); } selectLineWidth(w: number, featureId: string) { @@ -111,7 +106,7 @@ export class AnnotationContextMenuComponent implements OnInit, OnDestroy { } }; - this.annotations.updateFeature(featureId, { style: updateStyle }); + this.annotations.updateEntity(featureId, { style: updateStyle }); } activeChange($event: { label: 'stroke' | 'fill', event: string }, featureId: string) { @@ -124,7 +119,7 @@ export class AnnotationContextMenuComponent implements OnInit, OnDestroy { [`${$event.label}-opacity`]: $event.event ? opacity[$event.label] : 0 } }; - this.annotations.updateFeature(featureId, { style: updatedStyle }); + this.annotations.updateEntity(featureId, { style: updatedStyle }); } colorChange($event: { label: 'stroke' | 'fill', event: string }, featureId: string) { @@ -136,10 +131,10 @@ export class AnnotationContextMenuComponent implements OnInit, OnDestroy { [$event.label]: $event.event } }; - this.annotations.updateFeature(featureId, { style: updatedStyle }); + this.annotations.updateEntity(featureId, { style: updatedStyle }); } updateLabel(label, featureId: string) { - this.annotations.updateFeature(featureId, { label }); + this.annotations.updateEntity(featureId, { label }); } } diff --git a/src/app/@ansyn/ol/plugins/annotations/annotations.visualizer.ts b/src/app/@ansyn/ol/plugins/annotations/annotations.visualizer.ts index 695878b39e..d837af3973 100644 --- a/src/app/@ansyn/ol/plugins/annotations/annotations.visualizer.ts +++ b/src/app/@ansyn/ol/plugins/annotations/annotations.visualizer.ts @@ -64,7 +64,6 @@ export class AnnotationsVisualizer extends EntitiesVisualizer { }; events = { - onClick: new Subject(), onSelect: new Subject(), onHover: new Subject(), onChangeMode: new Subject(), @@ -76,6 +75,11 @@ export class AnnotationsVisualizer extends EntitiesVisualizer { @AutoSubscription selected$ = this.events.onSelect.pipe(tap((selected) => this.selected = selected)); + @AutoSubscription + onEntitiesChange$ = this.entities$.pipe(tap((entities) => { + this.events.onSelect.next(this.selected.filter(id => entities[id])) + })); + modeDictionary = { Arrow: { type: 'LineString', @@ -102,10 +106,7 @@ export class AnnotationsVisualizer extends EntitiesVisualizer { annotationsLayerToEntities(annotationsLayer: FeatureCollection): IVisualizerEntity[] { return annotationsLayer.features.map((feature: Feature): IVisualizerEntity => ({ featureJson: feature, - id: feature.properties.id, - style: feature.properties.style, - showMeasures: feature.properties.showMeasures, - label: feature.properties.label + id: feature.properties.id })); } @@ -131,9 +132,9 @@ export class AnnotationsVisualizer extends EntitiesVisualizer { return mode === 'Point' ? 30 : 0; }, text: (feature: olFeature) => { - const entity = this.idToEntity.get(feature.getId()); + const entity = this.entities[feature.getId()]; if (entity) { - const { label } = entity.originalEntity; + const { label } = entity.originalEntity.featureJson.properties; return label || ''; } return ''; @@ -277,7 +278,6 @@ export class AnnotationsVisualizer extends EntitiesVisualizer { onDrawEndEvent({ feature }) { const { mode } = this; - this.setMode(null); const geometry = feature.getGeometry(); let cloneGeometry = geometry.clone(); if (cloneGeometry instanceof olCircle) { @@ -297,6 +297,7 @@ export class AnnotationsVisualizer extends EntitiesVisualizer { .pipe( take(1), mergeMap((GeoJSON: FeatureCollection) => { + this.setMode(null); return this.addOrUpdateEntities(this.annotationsLayerToEntities(GeoJSON)).pipe( tap(() => this.events.onDrawEnd.next({ GeoJSON, feature })) ); @@ -355,7 +356,7 @@ export class AnnotationsVisualizer extends EntitiesVisualizer { featureStyle(feature: olFeature, state: string = VisualizerStates.INITIAL) { const style: olStyle = super.featureStyle(feature, state); const entity = this.getEntity(feature); - if (entity && entity.showMeasures) { + if (entity && entity.featureJson.properties.showMeasures) { return [style, ...this.getMeasuresAsStyles(feature)]; } else { return style; @@ -481,25 +482,17 @@ export class AnnotationsVisualizer extends EntitiesVisualizer { ]; } - removeFeature(featureId: string, internal = false) { - super.removeEntity(featureId, internal); - if (!internal) { - this.events.removeEntity.next(featureId); - } - this.events.onSelect.next(this.selected.filter((id) => id !== featureId)) + removeFeature(featureId: string) { + super.removeEntity(featureId); + this.events.removeEntity.next(featureId); } - updateFeature(featureId, props: Partial) { - const entity = this.idToEntity.get(featureId); - + updateFeature(featureId: string, props: Partial) { + const entity = super.updateEntity(featureId, props); if (entity) { - entity.originalEntity = merge({}, entity.originalEntity, props); this.events.updateEntity.next(entity.originalEntity); - this.source.refresh(); } - } - } diff --git a/src/app/@ansyn/ol/plugins/entities-visualizer.ts b/src/app/@ansyn/ol/plugins/entities-visualizer.ts index 6d63870ec8..cc4cf7d44d 100644 --- a/src/app/@ansyn/ol/plugins/entities-visualizer.ts +++ b/src/app/@ansyn/ol/plugins/entities-visualizer.ts @@ -17,7 +17,7 @@ import { MarkerSizeDic, VisualizerStates } from '@ansyn/imagery'; -import { Observable, of } from 'rxjs'; +import { Observable, of, Subject } from 'rxjs'; import { BaseImageryVisualizer, VisualizerInteractionTypes } from '@ansyn/imagery'; import * as ol_color from 'ol/color'; import { OpenLayersMap } from '../maps/open-layers-map/openlayers-map/openlayers-map'; @@ -28,13 +28,29 @@ export interface IFeatureIdentifier { feature: Feature, originalEntity: IVisualizerEntity } +export interface IEntities { + [key: string]: IFeatureIdentifier +} export abstract class EntitiesVisualizer extends BaseImageryVisualizer { isHidden = false; public source: SourceVector; protected featuresCollection: Feature[]; vector: ol_Layer; - public idToEntity: Map = new Map(); + entities$ = new Subject(); + protected _entities: IEntities = {}; + + public get entities(): IEntities { + return this._entities; + } + + public set entities(value: IEntities) { + if (value !== this._entities) { + this._entities = value; + this.entities$.next(this._entities) + } + } + protected disableCache = false; protected visualizerStyle: IVisualizerStateStyle = { @@ -54,7 +70,7 @@ export abstract class EntitiesVisualizer extends BaseImageryVisualizer { } getEntity(feature: Feature): IVisualizerEntity { - const entity = this.idToEntity.get(feature.getId()); + const entity = this.entities[feature.getId()]; return entity && entity.originalEntity; } @@ -198,14 +214,9 @@ export abstract class EntitiesVisualizer extends BaseImageryVisualizer { const entity = this.getEntity(feature); if (entity) { - if (entity.type && this.visualizerStyle.entities && this.visualizerStyle.entities[entity.type]) { - styles.push(this.visualizerStyle.entities[entity.type][VisualizerStates.INITIAL]); - styles.push(this.visualizerStyle.entities[entity.type][state]); - } - - if (entity.style) { - styles.push(entity.style[VisualizerStates.INITIAL]); - styles.push(entity.style[state]); + if (entity.featureJson.properties.style) { + styles.push(entity.featureJson.properties.style[VisualizerStates.INITIAL]); + styles.push(entity.featureJson.properties.style[state]); } } @@ -230,18 +241,21 @@ export abstract class EntitiesVisualizer extends BaseImageryVisualizer { const featuresCollectionToAdd: any = featureCollection(features); filteredLogicalEntities.forEach((entity: IVisualizerEntity) => { - this.removeEntity(entity.id, true); + this._removeEntity(entity.id); }); return (this.iMap).projectionService.projectCollectionAccuratelyToImage(featuresCollectionToAdd, this.iMap.mapObject) .pipe(map((features: Feature[]) => { - features.forEach((feature: Feature) => { + const updatedEntities = features.reduce((prev, feature: Feature) => { const _id: string = feature.getId(); - this.idToEntity.set(_id, { - originalEntity: filteredLogicalEntities.find(({ id }) => id === _id), - feature: feature - }); - }); + return { + ...prev, + [_id]: { + originalEntity: filteredLogicalEntities.find(({ id }) => id === _id), + feature: feature + }} + }, {}); + this.entities = { ...this.entities, ...updatedEntities }; this.source.addFeatures(features); return true; })); @@ -249,7 +263,7 @@ export abstract class EntitiesVisualizer extends BaseImageryVisualizer { setEntities(logicalEntities: IVisualizerEntity[]): Observable { const removedEntities = []; - this.idToEntity.forEach(((value, key: string) => { + Object.entries(this.entities).forEach((([key, value]) => { const item = logicalEntities.find((entity) => entity.id === key); if (!item) { removedEntities.push(key); @@ -257,36 +271,61 @@ export abstract class EntitiesVisualizer extends BaseImageryVisualizer { })); removedEntities.forEach((id) => { - this.removeEntity(id); + this._removeEntity(id); }); return this.addOrUpdateEntities(logicalEntities); } - removeEntity(logicalEntityId: string, internal = false) { - const entityToRemove = this.idToEntity.get(logicalEntityId); + _removeEntity(logicalEntityId: string): boolean { + const entityToRemove = this.entities[logicalEntityId]; if (!entityToRemove) { - return; + return false; } - this.idToEntity.delete(logicalEntityId); + if (entityToRemove.feature && this.source.getFeatureById(entityToRemove.feature.getId())) { this.source.removeFeature(entityToRemove.feature); } + return true; } - clearEntities() { - if (this.idToEntity) { - this.idToEntity.clear(); + removeEntity(entityId: string) { + this._removeEntity(entityId); + const { [entityId]: entity, ...rest } = this.entities; + this.entities = rest; + } + + updateEntity(entityId: string, props: any) { + const entity = this.entities[entityId]; + if (entity) { + this.entities = { + ...this.entities, + [entityId]: { + ...entity, + originalEntity: { + ...entity.originalEntity, + featureJson: { + ...entity.originalEntity.featureJson, + properties: merge({}, entity.originalEntity.featureJson.properties, props) + } + } + } + }; + this.source.refresh(); + return entity; } + } + + + clearEntities() { + this.entities = {}; if (this.source) { this.source.clear(true); } } getEntities(): IVisualizerEntity[] { - const entities: IVisualizerEntity[] = []; - this.idToEntity.forEach((val, key) => entities.push(val.originalEntity)); - return entities; + return Object.values(this.entities).map(({ originalEntity }) => originalEntity); } onResetView(): Observable { diff --git a/src/app/@ansyn/ol/public_api.ts b/src/app/@ansyn/ol/public_api.ts index 5d0f417ecd..efeac172ef 100644 --- a/src/app/@ansyn/ol/public_api.ts +++ b/src/app/@ansyn/ol/public_api.ts @@ -40,4 +40,5 @@ export { AnnotationsColorComponent } from './plugins/annotations/annotations-con export { AnnotationsWeightComponent } from './plugins/annotations/annotations-context-menu/components/annotations-weight/annotations-weight.component'; export { ColorPickerComponent } from './plugins/annotations/annotations-context-menu/components/color-picker/color-picker.component'; export { AnnotationContextMenuComponent } from './plugins/annotations/annotations-context-menu/components/annotation-context-menu/annotation-context-menu.component'; -export { AnnotationsContextMenuModule } from './plugins/annotations/annotations-context-menu/annotations-context-menu.module'; +export { AnnotationsContextMenuModule } from './plugins/annotations/annotations-context-menu/annotations-context-menu.module'; +export { IEntities } from './plugins/entities-visualizer'; diff --git a/src/app/app/context/plugins/context-entity.visualizer.ts b/src/app/app/context/plugins/context-entity.visualizer.ts index dac4fc5831..811a4df7cf 100644 --- a/src/app/app/context/plugins/context-entity.visualizer.ts +++ b/src/app/app/context/plugins/context-entity.visualizer.ts @@ -84,7 +84,7 @@ export class ContextEntityVisualizer extends EntitiesVisualizer { if (!this.referenceDate || !(this.getGeometry(feature) instanceof olPoint)) { return ''; } - const originalEntity = this.idToEntity.get(feature.getId()).originalEntity; + const { originalEntity } = this.entities[feature.getId()]; const entityDate = (originalEntity).date; const timeDiff = getTimeDiff(this.referenceDate, entityDate); @@ -97,7 +97,7 @@ export class ContextEntityVisualizer extends EntitiesVisualizer { return this.idToCachedCenter.get(featureId); } - const entityMap = this.idToEntity.get(featureId); + const entityMap = this.entities[featureId]; if (entityMap.originalEntity.featureJson.geometry.type === 'Point') { const featureGeoJson = this.geoJsonFormat.writeFeatureObject(entityMap.feature);