@@ -211,52 +211,63 @@ export class Theme {
211211
212212 /**
213213 * @function ThemeLayer.prototype.removeFeatures
214- * @param {Array.<FeatureVector> } features - 待删除 features 。
214+ * @param {( Array.<FeatureVector>|Function) } features - 待删除 feature 的数组或用来过滤的回调函数 。
215215 * @description 删除专题图中的features。
216216 * 参数中的 features 数组中的每一项,必须是已经添加到当前图层中的 feature,
217217 * 如果要删除的 features 数组中的元素过多,推荐使用 removeAllFeatures删除所有 feature后,再重新添加。这样效率会更高。
218218 */
219219 removeFeatures ( features ) {
220- if ( ! features || features . length === 0 ) {
221- return ;
222- }
223- if ( features === this . features ) {
224- return this . removeAllFeatures ( ) ;
225- }
226- if ( ! ( CommonUtil . isArray ( features ) ) ) {
227- features = [ features ] ;
228- }
229- var featuresFailRemoved = [ ] ;
230- for ( var i = features . length - 1 ; i >= 0 ; i -- ) {
231- var feature = features [ i ] ;
232- //如果我们传入的feature在features数组中没有的话,则不进行删除,
233- //并将其放入未删除的数组中。
234- var findex = CommonUtil . indexOf ( this . features , feature ) ;
220+ var me = this ;
221+ if ( ! features ) {
222+ return ;
223+ }
224+ if ( features === me . features ) {
225+ return me . removeAllFeatures ( ) ;
226+ }
227+ if ( ! CommonUtil . isArray ( features ) && ! typeof features === 'function' ) {
228+ features = [ features ] ;
229+ }
230+
231+ var featuresFailRemoved = [ ] ;
232+
233+ for ( var i = 0 ; i < me . features . length ; i ++ ) {
234+ var feature = me . features [ i ] ;
235+
236+ //如果我们传入的feature在features数组中没有的话,则不进行删除,
237+ //并将其放入未删除的数组中。
238+ if ( features && typeof features === 'function' ) {
239+ if ( features ( feature ) ) {
240+ me . features . splice ( i -- , 1 ) ;
241+ }
242+ } else {
243+ var findex = CommonUtil . indexOf ( features , feature ) ;
235244 if ( findex === - 1 ) {
236245 featuresFailRemoved . push ( feature ) ;
237- continue ;
246+ } else {
247+ me . features . splice ( i -- , 1 ) ;
238248 }
239- this . features . splice ( findex , 1 ) ;
240- }
241- var drawFeatures = [ ] ;
242- for ( var hex = 0 , len = this . features . length ; hex < len ; hex ++ ) {
243- feature = this . features [ hex ] ;
244- drawFeatures . push ( feature ) ;
245- }
246- this . features = [ ] ;
247- this . addFeatures ( drawFeatures ) ;
248- //绘制专题要素
249- if ( this . renderer ) {
250- this . redrawThematicFeatures ( this . map . getBounds ( ) ) ;
251- }
252- var succeed = featuresFailRemoved . length == 0 ? true : false ;
253- /**
254- * @event ThemeLayer#featuresremoved
255- * @description 要素删除之后触发。
256- * @property {Array.<FeatureVector> } features - 未被成功删除的要素。
257- * @property {boolean } succeed - 是否删除成功。
258- */
259- mapboxgl . Evented . prototype . fire ( "featuresremoved" , { features : featuresFailRemoved , succeed : succeed } ) ;
249+ }
250+ }
251+
252+ var drawFeatures = [ ] ;
253+ for ( var hex = 0 , len = this . features . length ; hex < len ; hex ++ ) {
254+ feature = this . features [ hex ] ;
255+ drawFeatures . push ( feature ) ;
256+ }
257+ this . features = [ ] ;
258+ this . addFeatures ( drawFeatures ) ;
259+ //绘制专题要素
260+ if ( this . renderer ) {
261+ this . redrawThematicFeatures ( this . map . getBounds ( ) ) ;
262+ }
263+ var succeed = featuresFailRemoved . length == 0 ? true : false ;
264+ /**
265+ * @event mapboxgl.supermap.ThemeLayer#featuresremoved
266+ * @description 要素删除之后触发。
267+ * @property {Array.<SuperMap.Feature.Vector> } features - 未被成功删除的要素。
268+ * @property {boolean } succeed - 删除成功与否。
269+ */
270+ mapboxgl . Evented . prototype . fire ( "featuresremoved" , { features : featuresFailRemoved , succeed : succeed } ) ;
260271 }
261272
262273 /**
@@ -274,15 +285,18 @@ export class Theme {
274285 /**
275286 * @function ThemeLayer.prototype.getFeatures
276287 * @description 查看当前图层中的有效数据。
288+ * @param {Function } [filter] - 根据条件过滤要素的回调函数。
277289 * @returns {FeatureVector } 用户加入图层的有效数据。
278290 */
279- getFeatures ( ) {
280- var len = this . features . length ;
281- var clonedFeatures = new Array ( len ) ;
282- for ( var i = 0 ; i < len ; ++ i ) {
283- clonedFeatures [ i ] = this . features [ i ] ;
284- }
285- return clonedFeatures ;
291+ getFeatures ( filter ) {
292+ var len = this . features . length ;
293+ var clonedFeatures = [ ] ;
294+ for ( var i = 0 ; i < len ; ++ i ) {
295+ if ( ! filter || ( filter && typeof filter === 'function' && filter ( this . features [ i ] ) ) ) {
296+ clonedFeatures . push ( this . features [ i ] ) ;
297+ }
298+ }
299+ return clonedFeatures ;
286300 }
287301
288302 /**
0 commit comments