@@ -35,31 +35,51 @@ import type { Coordinate } from "ol/coordinate";
35
35
// ...
36
36
type LayerStore = {
37
37
[ key : string ] : Layer ;
38
- }
38
+ } ;
39
39
40
40
//
41
41
type ControlStore = {
42
42
[ key : string ] : Control ;
43
- }
43
+ } ;
44
+
45
+ //
46
+ type Metadata = {
47
+ layers : any [ ] ; //{ [key: string]: any };
48
+ controls : any [ ] ; //{ [key: string]: any };
49
+ } ;
50
+
51
+ const TYPE_IDENTIFIER = "@@type" ;
52
+ const GEOJSON_IDENTIFIER = "@@geojson" ;
44
53
45
54
const jsonConverter = new JSONConverter ( ) ;
46
55
47
- /*
48
- const defaultLayers = [
49
- new TileLayer({
50
- source: new OSM()
51
- })
52
- ];
53
- */
56
+ function parseLayerDef ( layerDef : JSONDef ) : Layer {
57
+ const layer = jsonConverter . parse ( layerDef ) ;
58
+ layer . set ( "id" , layerDef . id ) ;
59
+ addGeojsonFeatures ( layer , layerDef [ GEOJSON_IDENTIFIER ] ) ;
60
+ return layer ;
61
+ }
62
+
63
+ function addGeojsonFeatures ( layer : Layer , features : any ) : void {
64
+ if ( features === undefined )
65
+ return ;
66
+
67
+ const source = layer . getSource ( ) as VectorSource ;
68
+ source . addFeatures ( new GeoJSON ( ) . readFeatures ( features ) ) ;
69
+ console . log ( "geojson features added" , features ) ;
70
+ }
71
+
54
72
55
73
export default class MapWidget {
56
74
_container : HTMLElement ;
57
75
_map : Map ;
76
+ _metadata : Metadata = { layers : [ ] , controls : [ ] } ;
58
77
_layerStore : LayerStore = { } ;
59
78
_controlStore : ControlStore = { } ;
60
79
61
80
constructor ( mapElement : HTMLElement , mapOptions : MyMapOptions ) {
62
81
let baseLayers : Layer [ ] = [ ] // defaultLayers;
82
+ /*
63
83
if (mapOptions.layers !== undefined) {
64
84
for (let layerJSONDef of mapOptions.layers) {
65
85
@@ -73,7 +93,7 @@ export default class MapWidget {
73
93
this._layerStore[layerJSONDef.id] = layer;
74
94
}
75
95
}
76
-
96
+ */
77
97
78
98
let baseControls : Control [ ] = [ ] ;
79
99
// TODO: Use 'addControls' after map was created instead
@@ -103,6 +123,11 @@ export default class MapWidget {
103
123
controls : defaultControls ( ) . extend ( baseControls ) ,
104
124
layers : baseLayers ,
105
125
} ) ;
126
+
127
+ // Add layers
128
+ for ( let layerDef of mapOptions . layers || [ ] ) {
129
+ this . addLayer ( layerDef ) ;
130
+ }
106
131
}
107
132
108
133
// TODO: Obsolete
@@ -127,13 +152,6 @@ export default class MapWidget {
127
152
return this . _layerStore [ layerId ] ;
128
153
}
129
154
130
- getLayer ( layerId : string ) : Layer | undefined {
131
- for ( let layer of this . _map . getLayers ( ) . getArray ( ) ) {
132
- if ( layer . get ( "id" ) === layerId )
133
- return layer as Layer ;
134
- }
135
- }
136
-
137
155
// TODO: Obsolete
138
156
getControlOld ( controlId : string ) : Control {
139
157
return this . _controlStore [ controlId ] ;
@@ -166,7 +184,8 @@ export default class MapWidget {
166
184
console . log ( "geojsonObject added to VectorSource" , geoJSONObject ) ;
167
185
}
168
186
169
- addLayer ( layerJSONDef : JSONDef ) : void {
187
+ /*
188
+ addLayerOld(layerJSONDef: JSONDef): void {
170
189
const layer = jsonConverter.parse(layerJSONDef);
171
190
layer.set("id", layerJSONDef.id);
172
191
@@ -177,14 +196,35 @@ export default class MapWidget {
177
196
this._layerStore[layerJSONDef.id] = layer;
178
197
console.log("layerStore", this._layerStore);
179
198
}
199
+ */
200
+
201
+ getLayer ( layerId : string ) : Layer | undefined {
202
+ for ( let layer of this . _map . getLayers ( ) . getArray ( ) ) {
203
+ if ( layer . get ( "id" ) === layerId )
204
+ return layer as Layer ;
205
+ }
206
+ }
207
+
208
+ addLayer ( layerDef : JSONDef ) : void {
209
+ const layer = parseLayerDef ( layerDef ) ;
210
+ this . _map . addLayer ( layer ) ;
211
+ this . _metadata . layers . push ( {
212
+ id : layer . get ( "id" ) ,
213
+ type : layerDef [ TYPE_IDENTIFIER ] ,
214
+ extent : layer . getExtent ( )
215
+ } ) ;
216
+ console . log ( "layer" , layer . get ( "id" ) , "added" , this . _metadata ) ;
217
+ }
180
218
181
219
removeLayer ( layerId : string ) : void {
182
220
const layer = this . getLayer ( layerId ) ;
183
- if ( layer === undefined ) return ;
221
+ if ( layer === undefined )
222
+ return ;
184
223
185
224
this . _map . removeLayer ( layer ) ;
186
- delete this . _layerStore [ layerId ] ;
187
- console . log ( "layer" , layerId , "removed" , this . _layerStore ) ;
225
+ // delete this._layerStore[layerId];
226
+ this . _metadata . layers = this . _metadata . layers . filter ( item => item [ "id" ] != layerId ) ;
227
+ console . log ( "layer" , layerId , "removed" , this . _metadata ) ;
188
228
}
189
229
190
230
addControl ( controlJSONDef : JSONDef ) : void {
0 commit comments