@@ -54,11 +54,14 @@ const prefix = (SYMBOL_PREFIX + '').trim();
5454const KEY_IDX_NAME = ( KEY_IDX + '' ) . trim ( ) ;
5555let EMPTY_POSITION = new Float32Array ( 1 ) ;
5656const EMPTY_ARRAY = [ ] ;
57+ const TEMP_ARRAY = [ ] ;
5758
5859class Vector3DLayerRenderer extends CanvasCompatible ( LayerAbstractRenderer ) {
5960 constructor ( ...args ) {
6061 super ( ...args ) ;
6162 this . features = { } ;
63+ this . featuresArray = [ ] ;
64+ this . featuresChanged = false ;
6265 this . _geometries = { } ;
6366 this . _counter = 0 ;
6467 this . _allFeatures = { } ;
@@ -100,15 +103,23 @@ class Vector3DLayerRenderer extends CanvasCompatible(LayerAbstractRenderer) {
100103 }
101104
102105 _checkFeaturesVisibleChange ( ) {
103- const features = this . features ;
104- if ( ! features ) {
106+ if ( this . featuresChanged ) {
107+ this . featuresArray = Object . values ( this . features ) ;
108+ this . featuresChanged = false ;
109+ }
110+ const featuresArray = this . featuresArray ;
111+ if ( ! featuresArray ) {
105112 return this ;
106113 }
107114 //实时检测feature的visible变化
108- for ( const id in features ) {
109- let feats = features [ id ] || [ ] ;
115+ for ( let m = 0 , len = featuresArray . length ; m < len ; m ++ ) {
116+ let feats = featuresArray [ m ] ;
117+ if ( ! feats ) {
118+ continue ;
119+ }
110120 if ( ! Array . isArray ( feats ) ) {
111- feats = [ feats ] ;
121+ TEMP_ARRAY [ 0 ] = feats ;
122+ feats = TEMP_ARRAY ;
112123 }
113124 if ( ! feats . length ) {
114125 continue ;
@@ -1082,6 +1093,7 @@ class Vector3DLayerRenderer extends CanvasCompatible(LayerAbstractRenderer) {
10821093 this . _removeFeatures ( uid ) ;
10831094 }
10841095 this . features [ uid ] = convertToFeature ( geo , this . _kidGen , this . features [ uid ] ) ;
1096+ this . featuresChanged = true ;
10851097 const feas = this . features [ uid ] ;
10861098 this . _refreshFeatures ( feas , uid ) ;
10871099 this . _geometries [ uid ] = geo ;
@@ -1271,6 +1283,7 @@ class Vector3DLayerRenderer extends CanvasCompatible(LayerAbstractRenderer) {
12711283 delete this . _geometries [ uid ] ;
12721284 this . _removeFeatures ( uid ) ;
12731285 delete this . features [ uid ] ;
1286+ this . featuresChanged = true ;
12741287 }
12751288 }
12761289 this . markRebuild ( ) ;
0 commit comments