@@ -87,6 +87,12 @@ export const LEGEND_STYLE_TYPES = {
87
87
STYLE : 'style'
88
88
} ;
89
89
90
+ const UN_SUPPORTED_LAYER_TYPE = [ 'point-extrusion' , 'heatmap-extrusion' , 'radar' , 'line-extrusion' , 'line-curve' , 'line-curve-extrusion' , 'chart' ]
91
+ const UN_SUPPORTED_LAYER_ATTRS_MAP = {
92
+ circle : [ 'circle-animate-speed' , 'circle-animate-rings' ] ,
93
+ line : [ 'line-animate-duration' , 'line-animate-interval ' , 'line-animate-trailLength ' ]
94
+ }
95
+
90
96
export class WebMap extends mapboxgl . Evented {
91
97
constructor ( mapId , options , mapOptions = { } ) {
92
98
super ( ) ;
@@ -116,6 +122,7 @@ export class WebMap extends mapboxgl.Evented {
116
122
* @param {Object } map - map 实例。
117
123
*/
118
124
initializeMap ( mapInfo , map ) {
125
+ mapInfo = this . _handleUnSupportedLayers ( mapInfo ) ;
119
126
this . _mapInfo = mapInfo ;
120
127
if ( map ) {
121
128
this . _appendLayers = true ;
@@ -333,15 +340,19 @@ export class WebMap extends mapboxgl.Evented {
333
340
}
334
341
335
342
_updateLayerCatalogsId ( catalogs , layerIdMapList ) {
336
- catalogs . forEach ( ( catalog ) => {
343
+ catalogs . forEach ( ( catalog , index ) => {
337
344
const { id, children } = catalog ;
338
345
if ( catalog . type === 'group' ) {
339
346
this . _updateLayerCatalogsId ( children , layerIdMapList ) ;
340
347
return ;
341
348
}
342
349
const matchLayer = layerIdMapList . find ( ( item ) => item . originId === id ) ;
343
- catalog . originId = id ;
344
- catalog . id = matchLayer . renderId ;
350
+ if ( matchLayer ) {
351
+ catalog . originId = id ;
352
+ catalog . id = matchLayer . renderId ;
353
+ } else {
354
+ catalogs . splice ( index , 1 ) ;
355
+ }
345
356
} ) ;
346
357
}
347
358
@@ -358,15 +369,15 @@ export class WebMap extends mapboxgl.Evented {
358
369
this . fire ( 'addlayerssucceeded' , { map : this . map , mapparams : this . mapParams , layers : matchLayers } ) ;
359
370
}
360
371
361
- _getLayerInfosFromCatalogs ( catalogs ) {
372
+ _getLayerInfosFromCatalogs ( catalogs , layers ) {
362
373
const results = [ ] ;
363
374
for ( let i = 0 ; i < catalogs . length ; i ++ ) {
364
- const { catalogType, children, visible } = catalogs [ i ] ;
365
- if ( catalogType === 'layer' && visible ) {
375
+ const { catalogType, children, visible, id } = catalogs [ i ] ;
376
+ if ( catalogType === 'layer' && visible && layers . find ( ( layer ) => { return layer . id === id } ) ) {
366
377
results . push ( catalogs [ i ] ) ;
367
378
}
368
379
if ( catalogType === 'group' && children && children . length > 0 ) {
369
- const result = this . _getLayerInfosFromCatalogs ( children ) ;
380
+ const result = this . _getLayerInfosFromCatalogs ( children , layers ) ;
370
381
results . push ( ...result ) ;
371
382
}
372
383
}
@@ -422,15 +433,15 @@ export class WebMap extends mapboxgl.Evented {
422
433
_generateLayers ( ) {
423
434
const allLayersOnMap = this . _getLayersOnMap ( ) ;
424
435
const { catalogs = [ ] , datas = [ ] } = this . _mapResourceInfo ;
425
- const originLayers = this . _getLayerInfosFromCatalogs ( catalogs ) ;
436
+ const originLayers = this . _getLayerInfosFromCatalogs ( catalogs , this . _mapInfo . layers ) ;
426
437
const layers = allLayersOnMap . map ( ( layer ) => {
427
438
const matchOriginLayer = this . _layerIdRenameMapList . find ( ( item ) => item . renderId === layer . id ) || { } ;
428
439
const matchLayer = originLayers . find ( ( item ) => item . id === matchOriginLayer . originId ) || { } ;
429
440
const { title = layer . id , visualization, layersContent, msDatasetId } = matchLayer ;
430
441
let dataType = '' ;
431
442
let dataId = '' ;
432
443
for ( const data of datas ) {
433
- const matchData = data . datasets . find ( ( dataset ) => dataset . msDatasetId === msDatasetId ) ;
444
+ const matchData = data . datasets && data . datasets . find ( ( dataset ) => dataset . msDatasetId === msDatasetId ) ;
434
445
if ( matchData ) {
435
446
dataType = data . sourceType ;
436
447
dataId = matchData . datasetId ;
@@ -625,7 +636,7 @@ export class WebMap extends mapboxgl.Evented {
625
636
626
637
_createLegendInfo ( ) {
627
638
const { catalogs = [ ] } = this . _mapResourceInfo ;
628
- const originLayers = this . _getLayerInfosFromCatalogs ( catalogs ) ;
639
+ const originLayers = this . _getLayerInfosFromCatalogs ( catalogs , this . _mapInfo . layers ) ;
629
640
for ( const layer of originLayers ) {
630
641
const { renderer } = layer . visualization || { } ;
631
642
if ( ! renderer ) {
@@ -1072,4 +1083,47 @@ export class WebMap extends mapboxgl.Evented {
1072
1083
} ) ;
1073
1084
return Number ( ( topBoundary - bottomBoundary ) . toFixed ( 2 ) ) ;
1074
1085
}
1086
+
1087
+ _handleUnSupportedLayers ( mapInfo ) {
1088
+ let filterLayerIds = [ ] ;
1089
+ const unSupportedMsg = 'layer are not supported yet' ;
1090
+ let { layers, interaction } = mapInfo ;
1091
+ if ( interaction && interaction . drill ) {
1092
+ this . fire ( 'getlayersfailed' , { error : `drill ${ unSupportedMsg } ` } ) ;
1093
+ interaction . drill . forEach ( ( drillItem ) => {
1094
+ filterLayerIds = filterLayerIds . concat ( drillItem . layerIds ) ;
1095
+ } ) ;
1096
+ }
1097
+ layers . forEach ( ( layerInfo ) => {
1098
+ if ( UN_SUPPORTED_LAYER_TYPE . includes ( layerInfo . type ) ) {
1099
+ this . fire ( 'getlayersfailed' , { error : `${ layerInfo . type } ${ unSupportedMsg } ` } ) ;
1100
+ filterLayerIds . push ( layerInfo . id ) ;
1101
+ return ;
1102
+ }
1103
+ if ( layerInfo . type === 'heatmap' && layerInfo . paint && [ 'spuare' , 'hexagon' ] . includes ( layerInfo . paint [ 'heatmap-shape' ] ) ) {
1104
+ this . fire ( 'getlayersfailed' , { error : `${ layerInfo . paint [ 'heatmap-shape' ] } -heatmap ${ unSupportedMsg } ` } ) ;
1105
+ filterLayerIds . push ( layerInfo . id ) ;
1106
+ }
1107
+ let partialUnSupportProps = UN_SUPPORTED_LAYER_ATTRS_MAP [ layerInfo . type ] ;
1108
+ let triggered = false ;
1109
+ if ( partialUnSupportProps ) {
1110
+ partialUnSupportProps . forEach ( ( attr ) => {
1111
+ layerInfo . layout && Object . keys ( layerInfo . layout ) . forEach ( ( layoutProp ) => {
1112
+ if ( layoutProp === attr && ! triggered ) {
1113
+ this . fire ( 'getlayersfailed' , { error : `${ layerInfo . type } -animate ${ unSupportedMsg } ` } ) ;
1114
+ filterLayerIds . push ( layerInfo . id ) ;
1115
+ triggered = true ;
1116
+ }
1117
+ } ) ;
1118
+ } ) ;
1119
+ }
1120
+ } ) ;
1121
+ mapInfo . layers = layers . filter ( ( layer ) => {
1122
+ return ! filterLayerIds . includes ( layer . id ) ;
1123
+ } ) ;
1124
+ // metadata.layerCatalog = metadata.layerCatalog.filter((catalog) => {
1125
+ // return !filterLayerIds.includes(catalog.id);
1126
+ // });
1127
+ return mapInfo ;
1128
+ }
1075
1129
}
0 commit comments