@@ -8,7 +8,8 @@ import { ColorsPickerUtil } from '../util/ColorsPickerUtil';
8
8
import { Util } from '../commontypes/Util' ;
9
9
import { ArrayStatistic } from '../util/ArrayStatistic' ;
10
10
import { FetchRequest } from '../util/FetchRequest' ;
11
- import { SourceListModel } from './utils/SourceListModel' ;
11
+ import { SourceListModel } from './utils/SourceListModelV2' ;
12
+ import { mergeFeatures } from './utils/util' ;
12
13
13
14
export function createWebMapV2Extending ( SuperClass , { MapManager, mapRepo } ) {
14
15
return class WebMap extends SuperClass {
@@ -36,7 +37,6 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
36
37
this . rasterTileSize = mapOptions . rasterTileSize || 256 ;
37
38
this . layerFilter = options . layerFilter ;
38
39
this . checkSameLayer = options . checkSameLayer ;
39
- this . _legendList = [ ] ;
40
40
this . _taskID = new Date ( ) ;
41
41
this . _cacheLayerId = new Map ( ) ;
42
42
this . _layerTimerList = [ ] ;
@@ -80,18 +80,6 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
80
80
}
81
81
}
82
82
83
- getLayerCatalog ( ) {
84
- return ( this . _sourceListModel && this . _sourceListModel . getSourceList ( ) ) || [ ] ;
85
- }
86
-
87
- getLegendInfo ( ) {
88
- return this . _legendList ;
89
- }
90
-
91
- getAppreciableLayers ( ) {
92
- return ( this . _sourceListModel && this . _sourceListModel . getLayers ( ) ) || [ ] ;
93
- }
94
-
95
83
_initWebMap ( ) { }
96
84
97
85
_loadLayers ( mapInfo , _taskID ) {
@@ -355,7 +343,7 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
355
343
this . _setCacheLayer ( {
356
344
parentLayerId : layerInfo . layerID || layerInfo . name ,
357
345
layerInfo,
358
- subRenderLayers : layerIds . map ( ( layerId ) => ( { layerId, name : layerId } ) )
346
+ subRenderLayers : layerIds . map ( ( layerId ) => ( { layerId } ) )
359
347
} ) ;
360
348
addedCallback && addedCallback ( ) ;
361
349
} ,
@@ -465,7 +453,7 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
465
453
_initOverlayLayer ( layerInfo , features = [ ] , mergeByField ) {
466
454
const { layerID, layerType, visible, style, featureType, projection } = layerInfo ;
467
455
layerInfo . visible = visible ? 'visible' : 'none' ;
468
- features = this . mergeFeatures ( layerID , features , mergeByField ) ;
456
+ features = mergeFeatures ( { sourceId : layerID , features, mergeByField, map : this . map } ) ;
469
457
if ( layerType === 'restMap' ) {
470
458
this . _createRestMapLayer ( features , layerInfo ) ;
471
459
return ;
@@ -2252,8 +2240,8 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
2252
2240
*/
2253
2241
this . addLayersSucceededLen = this . _cacheLayerId . size ;
2254
2242
const appreciableLayers = this . getAppreciableLayers ( ) ;
2255
- this . _rectifyLayersOrder ( appreciableLayers ) ;
2256
2243
const layerOptions = this . _getSelfAppreciableLayers ( appreciableLayers ) ;
2244
+ this . _rectifyLayersOrder ( layerOptions . layers ) ;
2257
2245
this . fire ( 'addlayerssucceeded' , {
2258
2246
...layerOptions ,
2259
2247
map : this . map ,
@@ -2262,15 +2250,19 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
2262
2250
}
2263
2251
}
2264
2252
2265
- _rectifyLayersOrder ( appreciableLayers ) {
2253
+ _rectifyLayersOrder ( appreciableLayers , topLayerBeforeId ) {
2266
2254
const renderLayers = appreciableLayers . reduce ( ( layers , layer ) => {
2267
2255
return layers . concat ( layer . renderLayers ) ;
2268
2256
} , [ ] ) ;
2269
2257
const labelLayerIds = [ ] ;
2270
2258
const exsitLayers = renderLayers . filter ( ( layerId ) => ! ! this . map . getLayer ( layerId ) ) ;
2271
2259
for ( let index = exsitLayers . length - 1 ; index > - 1 ; index -- ) {
2272
2260
const targetlayerId = exsitLayers [ index ] ;
2273
- const beforLayerId = exsitLayers . slice ( index + 1 ) . find ( ( id ) => this . map . style . _layers [ id ] ) ;
2261
+ const afterLayers = exsitLayers . slice ( index + 1 ) ;
2262
+ let beforLayerId = afterLayers . find ( ( id ) => this . map . style . _layers [ id ] ) ;
2263
+ if ( ! afterLayers . length ) {
2264
+ beforLayerId = topLayerBeforeId ;
2265
+ }
2274
2266
this . map . moveLayer ( targetlayerId , beforLayerId ) ;
2275
2267
const labelLayerId = this . _getSymbolLabelLayerName ( targetlayerId ) ;
2276
2268
if ( this . map . getLayer ( labelLayerId ) ) {
@@ -2783,7 +2775,7 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
2783
2775
}
2784
2776
2785
2777
_setCacheLayer ( { parentLayerId, layerInfo, ignore = false , beforeId, subRenderLayers } ) {
2786
- const renderLayers = subRenderLayers || [ { layerId : layerInfo . id , name : layerInfo . name , ignore } ] ;
2778
+ const renderLayers = subRenderLayers || [ { layerId : layerInfo . id , ignore } ] ;
2787
2779
if ( ! this . _cacheLayerId . has ( parentLayerId ) ) {
2788
2780
this . _cacheLayerId . set ( parentLayerId , renderLayers ) ;
2789
2781
} else {
@@ -2812,11 +2804,9 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
2812
2804
if ( ! renderLayers . length ) {
2813
2805
return ;
2814
2806
}
2815
- const matchMainLayer = matchLayers . find ( ( item ) => item . layerId === targetLayerId ) ;
2816
2807
layersFromMapInfo . push ( {
2817
2808
...layerInfo ,
2818
2809
id : targetLayerId ,
2819
- name : matchMainLayer && matchMainLayer . name ,
2820
2810
visible : targetLayerVisible ,
2821
2811
renderLayers
2822
2812
} ) ;
@@ -2825,11 +2815,29 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
2825
2815
this . _changeSourceListModel ( layersFromMapInfo ) ;
2826
2816
const appreciableLayers = this . getAppreciableLayers ( ) ;
2827
2817
if ( this . addLayersSucceededLen && this . _cacheLayerId . size !== this . addLayersSucceededLen ) {
2828
- this . _rectifyLayersOrder ( appreciableLayers ) ;
2818
+ const selfAppreciableLayers = this . getSelfAppreciableLayers ( appreciableLayers )
2819
+ const topLayerBeforeId = this . _findTopLayerBeforeId ( selfAppreciableLayers ) ;
2820
+ this . _rectifyLayersOrder ( selfAppreciableLayers , topLayerBeforeId ) ;
2829
2821
this . addLayersSucceededLen = this . _cacheLayerId . size ;
2830
2822
}
2831
- const layerOptions = this . _getSelfAppreciableLayers ( appreciableLayers ) ;
2832
- this . fire ( 'addlayerchanged' , layerOptions ) ;
2823
+ this . fire ( 'addlayerchanged' , this . _getSelfAppreciableLayers ( appreciableLayers ) ) ;
2824
+ }
2825
+
2826
+ _findTopLayerBeforeId ( selfAppreciableLayers ) {
2827
+ // fix 追加图层,异步的图层回来排序错乱
2828
+ const selfLayerIds = selfAppreciableLayers . reduce ( ( ids , item ) => ids . concat ( item . renderLayers ) , [ ] ) ;
2829
+ const firstSelfLayerIdOnMap = selfLayerIds . find ( ( id ) => this . map . style . _layers [ id ] ) ;
2830
+ if ( ! firstSelfLayerIdOnMap ) {
2831
+ return ;
2832
+ }
2833
+ const firstSelfLayerIndex = this . map . getStyle ( ) . layers . findIndex ( ( item ) => item . id === firstSelfLayerIdOnMap ) ;
2834
+ const extraLayerIdsOnMap = this . map . getStyle ( ) . layers . filter ( item => ! selfLayerIds . some ( id => id === item . id ) ) . map ( item => item . id ) ;
2835
+ for ( const layerId of extraLayerIdsOnMap ) {
2836
+ const matchIndex = this . map . getStyle ( ) . layers . findIndex ( ( item ) => item . id === layerId ) ;
2837
+ if ( matchIndex > firstSelfLayerIndex ) {
2838
+ return layerId ;
2839
+ }
2840
+ }
2833
2841
}
2834
2842
2835
2843
_changeSourceListModel ( layersFromMapInfo ) {
@@ -2845,18 +2853,8 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
2845
2853
}
2846
2854
2847
2855
_getSelfAppreciableLayers ( appreciableLayers ) {
2848
- const cacheLayerToAddList = Array . from ( this . _cacheLayerId . values ( ) ) ;
2849
- const flatCacheLayerId = cacheLayerToAddList . reduce ( ( list , layers ) => {
2850
- const layerIds = layers . map ( ( item ) => item . layerId ) ;
2851
- list . push ( ...layerIds ) ;
2852
- return list ;
2853
- } , [ ] ) ;
2854
- const matchLayers = appreciableLayers . filter ( ( item ) =>
2855
- item . renderLayers . some ( ( id ) => flatCacheLayerId . some ( ( layerId ) => layerId === id ) )
2856
- ) ;
2857
2856
return {
2858
- layers : matchLayers ,
2859
- cacheLayerIds : flatCacheLayerId ,
2857
+ layers : this . getSelfAppreciableLayers ( appreciableLayers ) ,
2860
2858
allLoaded : this . _cacheLayerId . size === this . addLayersSucceededLen
2861
2859
} ;
2862
2860
}
0 commit comments