@@ -306,11 +306,11 @@ export class WebMap extends mapboxgl.Evented {
306
306
const { catalogs = [ ] } = this . _mapResourceInfo ;
307
307
const originLayers = this . _getLayerInfosFromCatalogs ( catalogs ) ;
308
308
const layers = originLayers . map ( ( layer ) => {
309
- const { title, visualization } = layer ;
309
+ const { id , title, visualization, visible , layersContent } = layer ;
310
310
const layerFromMapInfo = this . _mapInfo . layers . find ( ( item ) => {
311
311
return item . id === layer . id ;
312
312
} ) ;
313
- this . _createLegendInfo ( Object . assign ( { } , layerFromMapInfo ) , visualization ) ;
313
+ this . _createLegendInfo ( Object . assign ( { } , layerFromMapInfo , { title : layer . title } ) , visualization ) ;
314
314
let dataType = '' ;
315
315
let dataId = '' ;
316
316
for ( const data of this . _mapResourceInfo . datas ) {
@@ -321,16 +321,22 @@ export class WebMap extends mapboxgl.Evented {
321
321
break ;
322
322
}
323
323
}
324
- const overlayLayers = {
324
+ const overlayLayers = this . _formatLayer ( {
325
325
dataSource : {
326
326
serverId : dataId ,
327
327
type : dataType
328
328
} ,
329
- layerID : layer . id ,
330
- layerType : layerFromMapInfo . type === 'raster' ? 'raster' : 'vector' ,
329
+ id,
331
330
type : layerFromMapInfo . type ,
332
- name : title
333
- } ;
331
+ title,
332
+ visible,
333
+ renderSource : {
334
+ id : layerFromMapInfo . source ,
335
+ type : layerFromMapInfo . type === 'raster' ? 'raster' : 'vector' ,
336
+ sourceLayer : layerFromMapInfo [ "source-layer" ]
337
+ } ,
338
+ renderLayers : this . _getRenderLayers ( layersContent , id )
339
+ } ) ;
334
340
const styleSettings = this . _parseRendererStyleData ( visualization . renderer ) ;
335
341
const defaultStyleSetting = styleSettings [ 0 ] ;
336
342
if ( defaultStyleSetting ) {
@@ -348,7 +354,97 @@ export class WebMap extends mapboxgl.Evented {
348
354
}
349
355
return overlayLayers ;
350
356
} ) ;
351
- return layers ;
357
+ const baseLayer = this . _getBaseLayer ( layers ) ;
358
+ return baseLayer ? [ baseLayer ] . concat ( layers ) : layers ;
359
+ }
360
+
361
+ getLayerCatalog ( ) {
362
+ const originLayerCatalog = this . _mapInfo . metadata . layerCatalog ;
363
+ const formatLayerCatalog = this . _createFormatCatalogs ( originLayerCatalog ) ;
364
+ const baseLayer = this . _getBaseLayer ( formatLayerCatalog ) ;
365
+ return baseLayer ? [ baseLayer ] . concat ( formatLayerCatalog ) : formatLayerCatalog ;
366
+ }
367
+
368
+ _createFormatCatalogs ( catalogs ) {
369
+ const formatCatalogs = catalogs . map ( ( catalog ) => {
370
+ let formatItem ;
371
+ const { id, title, type, visible, children, parts } = catalog ;
372
+ if ( catalog . type === "group" ) {
373
+ formatItem = {
374
+ children : this . _createFormatCatalogs ( children ) ,
375
+ id,
376
+ title,
377
+ type,
378
+ visible
379
+ }
380
+ } else {
381
+ const appreciableLayers = this . _generateLayers ( ) ;
382
+ const matchLayer = appreciableLayers . find ( layer => layer . id === id ) ;
383
+ formatItem = this . _formatLayer ( {
384
+ dataSource : matchLayer . dataSource ,
385
+ id,
386
+ type : matchLayer . type ,
387
+ title,
388
+ visible,
389
+ renderSource : matchLayer . renderSource ,
390
+ renderLayers : this . _getRenderLayers ( parts , id ) ,
391
+ themeSetting : matchLayer . themeSetting
392
+ } )
393
+ }
394
+ return formatItem ;
395
+ } ) ;
396
+ return formatCatalogs ;
397
+ }
398
+
399
+ _getRenderLayers ( layerIds , layerId ) {
400
+ if ( layerIds ) {
401
+ if ( layerIds . includes ( layerId ) ) {
402
+ return layerIds ;
403
+ } else {
404
+ return [ layerId , ...layerIds ]
405
+ }
406
+ } else {
407
+ return [ layerId ]
408
+ }
409
+ }
410
+
411
+ _getBaseLayer ( layers ) {
412
+ const baseLayer = this . _mapInfo . layers [ 0 ] ;
413
+ const { id, type } = baseLayer ;
414
+ const baseLayerInfo = this . map . getLayer ( id ) ;
415
+ const ids = layers . map ( layer => layer . id ) ;
416
+ if ( ! ids . includes ( id ) ) {
417
+ const formatBaseLayer = this . _formatLayer ( {
418
+ dataSource : { } ,
419
+ id,
420
+ title : id ,
421
+ type,
422
+ visible : true ,
423
+ renderSource : {
424
+ id : baseLayerInfo . source ,
425
+ type : baseLayerInfo . type === 'raster' ? 'raster' : 'vector' ,
426
+ sourceLayer : baseLayerInfo [ "source-layer" ]
427
+ } ,
428
+ renderLayers : [ id ] ,
429
+ themeSetting : { }
430
+ } ) ;
431
+ return formatBaseLayer ;
432
+ }
433
+ return null ;
434
+ }
435
+
436
+ _formatLayer ( option ) {
437
+ const { dataSource = { } , id, title, type, visible = true , renderSource = { } , renderLayers = [ ] , themeSetting = { } } = option ;
438
+ return {
439
+ dataSource,
440
+ id,
441
+ title,
442
+ type,
443
+ visible,
444
+ renderSource,
445
+ renderLayers,
446
+ themeSetting
447
+ }
352
448
}
353
449
354
450
_parseRendererStyleData ( renderer ) {
0 commit comments