@@ -32,6 +32,7 @@ import Toggle from 'ol-ext/control/Toggle'
32
32
import Button from 'ol-ext/control/Button'
33
33
import TextButton from 'ol-ext/control/TextButton'
34
34
import LayerPopup from 'ol-ext/control/LayerPopup'
35
+ import LayerSwitcher from 'ol-ext/control/LayerSwitcher'
35
36
import Popup from 'ol-ext/overlay/Popup'
36
37
import { position } from 'ol-ext/control/control'
37
38
import { ResizeObserver } from '@juggle/resize-observer'
@@ -46,6 +47,7 @@ interface LayerObject {
46
47
type : string
47
48
id : number
48
49
name : string
50
+ baselayer : boolean
49
51
options : object
50
52
}
51
53
@@ -151,21 +153,45 @@ export class GttClient {
151
153
const l = new Tile ( {
152
154
visible : false ,
153
155
source : new ( tileSource ) ( layer . options )
154
- } )
156
+ } )
157
+
155
158
l . set ( 'lid' , layer . id )
156
159
l . set ( 'title' , layer . name )
157
- l . set ( 'baseLayer' , true )
158
- l . on ( 'change:visible' , e => {
159
- const target = e . target as Tile < XYZ >
160
- if ( target . getVisible ( ) ) {
161
- const lid = target . get ( 'lid' )
162
- document . cookie = `_redmine_gtt_basemap=${ lid } ;path=/`
163
- }
164
- } )
160
+ l . set ( 'baseLayer' , layer . baselayer )
161
+ if ( layer . baselayer ) {
162
+ l . on ( 'change:visible' , e => {
163
+ const target = e . target as Tile < XYZ >
164
+ if ( target . getVisible ( ) ) {
165
+ const lid = target . get ( 'lid' )
166
+ document . cookie = `_redmine_gtt_basemap=${ lid } ;path=/`
167
+ }
168
+ } )
169
+ }
165
170
this . layerArray . push ( l )
166
- this . map . addLayer ( l )
171
+ // this.map.addLayer(l)
167
172
}
168
173
} , this )
174
+
175
+ /**
176
+ * Ordering the Layers for the LayerSwitcher Control.
177
+ * BaseLayers are added first.
178
+ */
179
+ this . layerArray . forEach ( ( l :Layer ) => {
180
+ if ( l . get ( "baseLayer" ) ) {
181
+ this . map . addLayer ( l )
182
+ }
183
+ }
184
+ )
185
+
186
+ var containsOverlay = false ;
187
+
188
+ this . layerArray . forEach ( ( l :Layer ) => {
189
+ if ( ! l . get ( "baseLayer" ) ) {
190
+ this . map . addLayer ( l )
191
+ containsOverlay = true
192
+ }
193
+ }
194
+ )
169
195
}
170
196
171
197
this . setBasemap ( )
@@ -331,7 +357,13 @@ export class GttClient {
331
357
} )
332
358
333
359
// Add LayerSwitcher Image Toolbar
334
- this . map . addControl ( new LayerPopup ( ) )
360
+ if ( containsOverlay ) {
361
+ this . map . addControl ( new LayerSwitcher ( ) )
362
+ }
363
+ else {
364
+ this . map . addControl ( new LayerPopup ( ) )
365
+ }
366
+
335
367
336
368
// Because Redmine filter functions are applied later, the Window onload
337
369
// event provides a workaround to have filters loaded before executing
0 commit comments