@@ -75,7 +75,9 @@ import CatalogMemberMixin from "../ModelMixins/CatalogMemberMixin";
7575import UrlMixin from "../ModelMixins/UrlMixin" ;
7676import proxyCatalogItemUrl from "../Models/Catalog/proxyCatalogItemUrl" ;
7777import createStratumInstance from "../Models/Definition/createStratumInstance" ;
78- import LoadableStratum from "../Models/Definition/LoadableStratum" ;
78+ import LoadableStratum , {
79+ LockedDownStratum
80+ } from "../Models/Definition/LoadableStratum" ;
7981import Model , { BaseModel } from "../Models/Definition/Model" ;
8082import StratumOrder from "../Models/Definition/StratumOrder" ;
8183import TerriaFeature from "../Models/Feature/Feature" ;
@@ -85,10 +87,10 @@ import TableStylingWorkflow from "../Models/Workflows/TableStylingWorkflow";
8587import createLongitudeLatitudeFeaturePerRow from "../Table/createLongitudeLatitudeFeaturePerRow" ;
8688import TableAutomaticStylesStratum from "../Table/TableAutomaticStylesStratum" ;
8789import TableStyle , { createRowGroupId } from "../Table/TableStyle" ;
90+ import { DiscreteTimesTraits } from "../Traits/TraitsClasses/DiscretelyTimeVaryingTraits" ;
8891import { GeoJsonTraits } from "../Traits/TraitsClasses/GeoJsonTraits" ;
8992import { RectangleTraits } from "../Traits/TraitsClasses/MappableTraits" ;
9093import StyleTraits from "../Traits/TraitsClasses/StyleTraits" ;
91- import { DiscreteTimeAsJS } from "./DiscretelyTimeVaryingMixin" ;
9294import { ExportData } from "./ExportableMixin" ;
9395import FeatureInfoUrlTemplateMixin from "./FeatureInfoUrlTemplateMixin" ;
9496import { isDataSource } from "./MappableMixin" ;
@@ -112,7 +114,10 @@ const SIMPLE_STYLE_KEYS = [
112114 "fill-opacity"
113115] ;
114116
115- class GeoJsonStratum extends LoadableStratum ( GeoJsonTraits ) {
117+ class GeoJsonStratum
118+ extends LoadableStratum ( GeoJsonTraits )
119+ implements LockedDownStratum < GeoJsonTraits , GeoJsonStratum >
120+ {
116121 static stratumName = "geojson" ;
117122 constructor ( private readonly _item : GeoJsonMixin . Instance ) {
118123 super ( ) ;
@@ -176,6 +181,39 @@ class GeoJsonStratum extends LoadableStratum(GeoJsonTraits) {
176181 return true ;
177182 }
178183 }
184+
185+ @computed get discreteTimes ( ) {
186+ if ( this . _item . readyData === undefined ) {
187+ return undefined ;
188+ }
189+
190+ // If we are using mvt (mapbox vector tiles / protomaps imagery provider) we use TableMixin.discreteTimes instead
191+ if ( this . _item . useTableStylingAndProtomaps ) return undefined ;
192+
193+ // If using timeProperty - get discrete times from that
194+ if ( this . _item . timeProperty ) {
195+ const times : string [ ] = [ ] ;
196+ const tags : string [ ] = [ ] ;
197+
198+ for ( let i = 0 ; i < this . _item . readyData . features . length ; i ++ ) {
199+ const feature = this . _item . readyData . features [ i ] ;
200+ if (
201+ feature . properties !== null &&
202+ feature . properties !== undefined &&
203+ feature . properties [ this . _item . timeProperty ! ] !== undefined
204+ ) {
205+ times . push (
206+ new Date (
207+ `${ feature . properties [ this . _item . timeProperty ! ] } `
208+ ) . toISOString ( )
209+ ) ;
210+ tags . push ( feature . properties [ this . _item . timeProperty ! ] ) ;
211+ }
212+ }
213+
214+ return createStratumInstance ( DiscreteTimesTraits , { tags, times } ) ;
215+ }
216+ }
179217}
180218
181219StratumOrder . addLoadStratum ( GeoJsonStratum . stratumName ) ;
@@ -1142,40 +1180,6 @@ function GeoJsonMixin<T extends AbstractConstructor<BaseType>>(Base: T) {
11421180 return dataSource ;
11431181 }
11441182
1145- @override
1146- get discreteTimes ( ) : DiscreteTimeAsJS [ ] | undefined {
1147- if ( this . readyData === undefined ) {
1148- return undefined ;
1149- }
1150-
1151- // If we are using mvt (mapbox vector tiles / protomaps imagery provider) return TableMixin.discreteTimes
1152- if ( this . useTableStylingAndProtomaps ) return super . discreteTimes ;
1153-
1154- // If using timeProperty - get discrete times from that
1155- if ( this . timeProperty ) {
1156- const discreteTimesMap : Map < string , DiscreteTimeAsJS > = new Map ( ) ;
1157-
1158- for ( let i = 0 ; i < this . readyData . features . length ; i ++ ) {
1159- const feature = this . readyData . features [ i ] ;
1160- if (
1161- feature . properties !== null &&
1162- feature . properties !== undefined &&
1163- feature . properties [ this . timeProperty ! ] !== undefined
1164- ) {
1165- const dt = {
1166- time : new Date (
1167- `${ feature . properties [ this . timeProperty ! ] } `
1168- ) . toISOString ( ) ,
1169- tag : feature . properties [ this . timeProperty ! ]
1170- } ;
1171- discreteTimesMap . set ( dt . tag , dt ) ;
1172- }
1173- }
1174-
1175- return Array . from ( discreteTimesMap . values ( ) ) ;
1176- }
1177- }
1178-
11791183 /**
11801184 * Transform feature properties into column-major format.
11811185 * This enables all TableMixin functionality - which is used for styling vector tiles.
0 commit comments