Skip to content

Commit 54ace20

Browse files
【fix】 修复专题图removeFeatures destroyFeatures 删除单个要素不对 review by luox
1 parent 59291b4 commit 54ace20

File tree

17 files changed

+512
-68
lines changed

17 files changed

+512
-68
lines changed

src/leaflet/overlay/GraphThemeLayer.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,14 @@ export var GraphThemeLayer = ThemeLayer.extend({
7272
/**
7373
* @function GraphThemeLayer.prototype.addFeatures
7474
* @description 向专题图图层中添加数据。
75-
* @param {(ServerFeature|ThemeFeature|GeoJSONObject)} features - 待添加的要素。
75+
* @param {(Array.<SuperMap.ServerFeature>|Array.<L.supermap.themeFeature>|Array.<GeoJSONObject>|SuperMap.ServerFeature|L.supermap.themeFeature|GeoJSONObject)} features - 待添加的要素。
7676
*/
7777
addFeatures: function (features) {
7878
var me = this;
7979
/**
8080
* @event GraphThemeLayer#beforefeaturesadded
8181
* @description 向专题图图层中添加数据之前触发。
82-
* @property {(ServerFeature|ThemeFeature|GeoJSONObject)} features - 待添加的要素。
82+
* @property {(Array.<SuperMap.ServerFeature>|Array.<L.supermap.themeFeature>|Array.<GeoJSONObject>|SuperMap.ServerFeature|L.supermap.themeFeature|GeoJSONObject)} features - 待添加的要素。
8383
*/
8484
me.fire("beforefeaturesadded", {features: features});
8585

@@ -314,7 +314,7 @@ export var GraphThemeLayer = ThemeLayer.extend({
314314
/**
315315
* @function GraphThemeLayer.prototype.removeFeatures
316316
* @description 从专题图中删除 feature。这个函数删除所有传递进来的矢量要素(数据)。
317-
* @param {(Array.<SuperMap.Feature.Vector>|Function)} features - 待删除的要素或用于过滤的回调函数
317+
* @param {(Array.<FeatureVector>|FeatureVector|Function)} features - 待删除的要素或用于条件删除的回调函数
318318
*/
319319
removeFeatures: function (features) { // eslint-disable-line no-unused-vars
320320
var me = this;

src/leaflet/overlay/LabelThemeLayer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ export var LabelThemeLayer = GeoFeatureThemeLayer.extend({
144144
/**
145145
* @function LabelThemeLayer.prototype.removeFeatures
146146
* @description 从专题图中删除 feature。这个函数删除所有传递进来的矢量要素。参数中的 features 数组中的每一项,必须是已经添加到当前图层中的 feature。
147-
* @param {(Array.<SuperMap.Feature.Vector>|Function)} features - 要删除的要素或用于过滤的回调函数
147+
* @param {(Array.<FeatureVector>|FeatureVector|Function)} features - 要删除的要素或用于条件删除的回调函数
148148
*/
149149
removeFeatures: function (features) { // eslint-disable-line no-unused-vars
150150
this.labelFeatures = [];

src/leaflet/overlay/theme/GeoFeatureThemeLayer.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,15 @@ export var GeoFeatureThemeLayer = ThemeLayer.extend({
6666
/**
6767
* @function GeoFeatureThemeLayer.prototype.addFeatures
6868
* @description 添加数据。
69-
* @param {(ServerFeature|ThemeFeature|GeoJSONObject)} features - 待填加的要素。
69+
* @param {(Array.<SuperMap.ServerFeature>|Array.<L.supermap.themeFeature>|Array.<GeoJSONObject>|SuperMap.ServerFeature|L.supermap.themeFeature|GeoJSONObject)} features - 待填加的要素。
7070
*/
7171
addFeatures: function (features) {
7272
var me = this;
7373

7474
/**
7575
* @event GeoFeatureThemeLayer#beforefeaturesadded
7676
* @description 添加数据之前触发。
77-
* @property {(ServerFeature|ThemeFeature|GeoJSONObject)} features - 事件对象
77+
* @property {(Array.<SuperMap.ServerFeature>|Array.<L.supermap.themeFeature>|Array.<GeoJSONObject>|SuperMap.ServerFeature|L.supermap.themeFeature|GeoJSONObject)} features - 要素
7878
*/
7979
me.fire("beforefeaturesadded", {features: features});
8080

@@ -99,7 +99,7 @@ export var GeoFeatureThemeLayer = ThemeLayer.extend({
9999
/**
100100
* @function GeoFeatureThemeLayer.prototype.removeFeatures
101101
* @description 删除专题图中 features。参数中的 features 数组中的每一项,必须是已经添加到当前图层中的 feature。
102-
* @param {(FeatureVector|Function)} features - 待删除的要素或用于过滤的回调函数
102+
* @param {(Array.<FeatureVector>|FeatureVector|Function)} features - 要删除的要素或用于条件删除的回调函数
103103
*/
104104
removeFeatures: function (features) { // eslint-disable-line no-unused-vars
105105
this.clearCache();
@@ -190,6 +190,7 @@ export var GeoFeatureThemeLayer = ThemeLayer.extend({
190190
* @function GeoFeatureThemeLayer.prototype.createThematicFeature
191191
* @description 创建专题要素。
192192
* @param {FeatureVector} feature - 要创建的要素。
193+
* @returns {Array.<FeatureVector>} 返回矢量要素。
193194
*/
194195
createThematicFeature: function (feature) {
195196
var me = this;
@@ -273,6 +274,7 @@ export var GeoFeatureThemeLayer = ThemeLayer.extend({
273274
* @function GeoFeatureThemeLayer.prototype.getShapesByFeatureID
274275
* @description 通过 FeatureID 获取 feature 关联的所有图形。如果不传入此参数,函数将返回所有图形。
275276
* @param {number} featureID - 要素 ID。
277+
* @returns {Array} 返回图形数组
276278
*/
277279
getShapesByFeatureID: function (featureID) {
278280
var me = this,

src/leaflet/overlay/theme/ThemeLayer.js

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,9 @@ export var ThemeLayer = L.Layer.extend({
120120
},
121121

122122
/**
123-
* @function ThemeLayer.prototype.addFeatures
124-
* @description 添加数据
125-
* @param {(ServerFeature|ThemeFeature|GeoJSONObject)} features - 待转换的要素
123+
* @function L.supermap.ThemeLayer.prototype.addFeatures
124+
* @description 向专题图图层中添加数据
125+
* @param {(Array.<SuperMap.ServerFeature>|Array.<L.supermap.themeFeature>|Array.<GeoJSONObject>|SuperMap.ServerFeature|L.supermap.themeFeature|GeoJSONObject)} features - 待添加要素
126126
*/
127127
addFeatures: function (features) { // eslint-disable-line no-unused-vars
128128
//子类实现此方法
@@ -140,7 +140,7 @@ export var ThemeLayer = L.Layer.extend({
140140
/**
141141
* @function ThemeLayer.prototype.destroyFeatures
142142
* @description 销毁要素。
143-
* @param {Array.<FeatureVector>} features - 待销毁的要素
143+
* @param {Array.<FeatureVector>|FeatureVector} features - 将被销毁的要素
144144
*/
145145
destroyFeatures: function (features) {
146146
if (features === undefined) {
@@ -150,6 +150,9 @@ export var ThemeLayer = L.Layer.extend({
150150
return;
151151
}
152152
this.removeFeatures(features);
153+
if (!Array.isArray(features)) {
154+
features = [features];
155+
}
153156
for (var i = features.length - 1; i >= 0; i--) {
154157
features[i].destroy();
155158
}
@@ -158,7 +161,7 @@ export var ThemeLayer = L.Layer.extend({
158161
/**
159162
* @function L.supermap.ThemeLayer.prototype.removeFeatures
160163
* @description 从专题图中删除 feature。这个函数删除所有传递进来的矢量要素。
161-
* @param {(Array.<SuperMap.Feature.Vector>|Function)} features - 将被删除的要素或用来过滤的回调函数。
164+
* @param {(Array.<FeatureVector>|FeatureVector|Function)} features - 将被删除的要素或用来过滤的回调函数。
162165
*/
163166
removeFeatures: function (features) {
164167
var me = this;
@@ -168,7 +171,7 @@ export var ThemeLayer = L.Layer.extend({
168171
if (features === me.features) {
169172
return me.removeAllFeatures();
170173
}
171-
if (!L.Util.isArray(features) && !typeof features === 'function') {
174+
if (!L.Util.isArray(features) && !(typeof features === 'function')) {
172175
features = [features];
173176
}
174177

@@ -211,10 +214,10 @@ export var ThemeLayer = L.Layer.extend({
211214

212215
var succeed = featuresFailRemoved.length == 0;
213216
/**
214-
* @event ThemeLayer#featuresremoved
215-
* @description 成功删除要素之后触发
216-
* @property {Array.<FeatureVector>} features - 事件对象
217-
* @property {boolean} succeed - 要素是否删除成功,true 为删除成功,false 为删除失败。
217+
* @event L.supermap.ThemeLayer#featuresremoved
218+
* @description 删除的要素成功之后触发
219+
* @property {Array.<FeatureVector>} features - 删除失败的要素数组
220+
* @property {boolean} succeed - 要输是否删除成功,true 为删除成功,false 为删除失败。
218221
*/
219222
me.fire("featuresremoved", {
220223
features: featuresFailRemoved,
@@ -242,7 +245,7 @@ export var ThemeLayer = L.Layer.extend({
242245
* @function ThemeLayer.prototype.getFeatures
243246
* @description 查看当前图层中的有效数据。
244247
* @param {Function} [filter] - 根据条件过滤要素的回调函数。
245-
* @returns {Array} 返回图层中的有效数据
248+
* @returns {Array.<FeatureVector>} 返回图层中的要素
246249
*/
247250
getFeatures: function (filter) {
248251
var len = this.features.length;
@@ -256,10 +259,11 @@ export var ThemeLayer = L.Layer.extend({
256259
},
257260

258261
/**
259-
* @function ThemeLayer.prototype.getFeatureBy
260-
* @description 过滤属性。
261-
* @param {string} property - 过滤某个属性名。
262-
* @param {string} value - 返回属性值。
262+
* @function L.supermap.ThemeLayer.prototype.getFeatureBy
263+
* @description 在专题图的要素数组 features 里面遍历每一个 feature,当 feature[property] === value 时,返回此 feature(并且只返回第一个)。
264+
* @param {string} property - 要的某个属性名。
265+
* @param {string} value - 对应属性名得值。
266+
* @returns {Array.<FeatureVector>} 返回图层中的要素。
263267
*/
264268
getFeatureBy: function (property, value) {
265269
var me = this;
@@ -278,17 +282,18 @@ export var ThemeLayer = L.Layer.extend({
278282
* @function ThemeLayer.prototype.getFeatureById
279283
* @description 返回指定 ID 的矢量要素,不存在则返回 null。
280284
* @param {number} featureId - 要素 ID。
285+
* @returns {Array.<FeatureVector>} 返回图层中的要素。
281286
*/
282287
getFeatureById: function (featureId) {
283288
return this.getFeatureBy('id', featureId);
284289
},
285290

286291
/**
287-
* @function ThemeLayer.prototype.getFeaturesByAttribute
288-
* @description 指定属性名和属性值,返回所有匹配的要素数组。
289-
* @param {string} attrName - 属性名
290-
* @param {string} attrValue - 属性值
291-
* @returns {Array} 返回所有匹配的要素数组。
292+
* @function L.supermap.ThemeLayer.prototype.getFeaturesByAttribute
293+
* @description 通过给定一个属性的 key 值和 value 值,返回所有匹配的要素数组。
294+
* @param {string} attrName - key 值
295+
* @param {string} attrValue - value 值
296+
* @returns {Array.<FeatureVector>} 返回所有匹配的要素数组。
292297
*/
293298
getFeaturesByAttribute: function (attrName, attrValue) {
294299
var me = this,
@@ -456,7 +461,7 @@ export var ThemeLayer = L.Layer.extend({
456461
/**
457462
* @function ThemeLayer.prototype.toiClientFeature
458463
* @description 转为 iClient 要素。
459-
* @param {(ServerFeature|ThemeFeature|GeoJSONObject)} features - 待转换的要素
464+
* @param {(Array.<SuperMap.ServerFeature>|Array.<L.supermap.themeFeature>|Array.<GeoJSONObject>|SuperMap.ServerFeature|L.supermap.themeFeature|GeoJSONObject)} features - 待转要素
460465
* @returns {Array.<FeatureVector>} 转换后的 iClient 要素。
461466
*/
462467
toiClientFeature: function (features) {
@@ -491,8 +496,8 @@ export var ThemeLayer = L.Layer.extend({
491496
/**
492497
* @function ThemeLayer.prototype.toFeature
493498
* @deprecated
494-
* @description 转为 iClient 要素,该方法将被弃用,由 {@link ThemeLayer#toiClientFeature} 代替。
495-
* @param {(ServerFeature|ThemeFeature|GeoJSONObject)} features - 待转换的要素
499+
* @description 转为 iClient 要素,该方法将被弃用,由 {@link L.supermap.ThemeLayer#toiClientFeature} 代替。
500+
* @param {(Array.<SuperMap.ServerFeature>|Array.<L.supermap.themeFeature>|Array.<GeoJSONObject>|SuperMap.ServerFeature|L.supermap.themeFeature|GeoJSONObject)} features - 待转要素
496501
* @returns {FeatureVector} 转换后的 iClient 要素。
497502
*/
498503
toFeature: function (features) {

src/mapboxgl/overlay/GraphThemeLayer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ export class Graph extends Theme {
365365
/**
366366
* @function GraphThemeLayer.prototype.removeFeatures
367367
* @description 从专题图中删除 feature。这个函数删除所有传递进来的矢量要素。参数中的 features 数组中的每一项,必须是已经添加到当前图层中的 feature。
368-
* @param {FeatureVector} features - 要删除的要素。
368+
* @param {Array.<FeatureVector>|FeatureVector|Function} features - 要删除的要素。
369369
*/
370370
removeFeatures(features) {
371371
this.clearCache();

src/mapboxgl/overlay/HeatMapLayer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ export class HeatMapLayer extends mapboxgl.Evented {
528528
/**
529529
* @function HeatMapLayer.prototype.removeFeatures
530530
* @description 移除指定的热点信息。
531-
* @param {Array.<FeatureVector>} features - 热点信息数组。
531+
* @param {Array.<FeatureVector>|FeatureVector} features - 热点信息数组。
532532
*/
533533
removeFeatures(features) {
534534
if (!features || features.length === 0 || !this.features || this.features.length === 0) {

src/mapboxgl/overlay/LabelThemeLayer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,9 @@ export class Label extends GeoFeature {
125125
/**
126126
* @function LabelThemeLayer.prototype.removeFeatures
127127
* @description 从专题图中删除 feature。这个函数删除所有传递进来的矢量要素。
128-
* @param {(SuperMap.Feature.Vector|Function)} features - 要删除的要素对象或用于过滤的回调函数。
128+
* @param {(Array.<FeatureVector>|FeatureVector|Function)} features - 要删除的要素对象或用于过滤的回调函数。
129129
*/
130-
removeFeatures() {
130+
removeFeatures(features) {
131131
this.labelFeatures = [];
132132
super.removeFeatures.call(this, features);
133133
}

src/mapboxgl/overlay/theme/GeoFeatureThemeLayer.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ export class GeoFeature extends Theme {
208208
* @function GeoFeatureThemeLayer.prototype.createThematicFeature
209209
* @description 创建专题要素。
210210
* @param {FeatureVector} feature - 要素对象。
211+
* @returns {Array.<FeatureVector>} 返回矢量要素
211212
*/
212213
createThematicFeature(feature) {
213214
var style = Util.copyAttributesWithClip(this.style);
@@ -275,6 +276,7 @@ export class GeoFeature extends Theme {
275276
* @function GeoFeatureThemeLayer.prototype.getShapesByFeatureID
276277
* @param {number} [featureID=si.refDataID] - 要素 ID。
277278
* @description 通过 FeatureID 获取 feature 关联的所有图形。如果不传入此参数,函数将返回所有图形。
279+
* @returns {Array} 返回图形数组
278280
*/
279281
getShapesByFeatureID(featureID) {
280282
var list = [];

src/mapboxgl/overlay/theme/ThemeLayer.js

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -138,20 +138,23 @@ export class Theme {
138138

139139
/**
140140
* @function ThemeLayer.prototype.destroyFeatures
141-
* @description 销毁某个要素
142-
* @param {FeatureVector} features - 将被销毁的要素。
141+
* @description 销毁要素
142+
* @param {Array.<FeatureVector>|FeatureVector} features - 将被销毁的要素。
143143
*/
144144
destroyFeatures(features) {
145-
var all = (features == undefined);
146-
if (all) {
147-
features = this.features;
148-
}
149-
if (features) {
150-
this.removeFeatures(features);
151-
for (var i = features.length - 1; i >= 0; i--) {
152-
features[i].destroy();
153-
}
154-
}
145+
var all = (features === undefined);
146+
if (all) {
147+
features = this.features;
148+
}
149+
if (features) {
150+
this.removeFeatures(features);
151+
if (!Array.isArray(features)) {
152+
features = [features];
153+
}
154+
for (var i = features.length - 1; i >= 0; i--) {
155+
features[i].destroy();
156+
}
157+
}
155158
}
156159

157160
/**
@@ -211,7 +214,7 @@ export class Theme {
211214

212215
/**
213216
* @function ThemeLayer.prototype.removeFeatures
214-
* @param {(Array.<FeatureVector>|Function)} features - 待删除 feature 的数组或用来过滤的回调函数。
217+
* @param {(Array.<FeatureVector>|FeatureVector|Function)} features - 待删除 feature 的数组或用来过滤的回调函数。
215218
* @description 删除专题图中的features。
216219
* 参数中的 features 数组中的每一项,必须是已经添加到当前图层中的 feature,
217220
* 如果要删除的 features 数组中的元素过多,推荐使用 removeAllFeatures删除所有 feature后,再重新添加。这样效率会更高。
@@ -224,7 +227,7 @@ export class Theme {
224227
if (features === me.features) {
225228
return me.removeAllFeatures();
226229
}
227-
if (!CommonUtil.isArray(features) && !typeof features === 'function') {
230+
if (!CommonUtil.isArray(features) && !(typeof features === 'function')) {
228231
features = [features];
229232
}
230233

@@ -264,7 +267,7 @@ export class Theme {
264267
/**
265268
* @event mapboxgl.supermap.ThemeLayer#featuresremoved
266269
* @description 要素删除之后触发。
267-
* @property {Array.<SuperMap.Feature.Vector>} features - 未被成功删除的要素。
270+
* @property {Array.<FeatureVector>} features - 未被成功删除的要素。
268271
* @property {boolean} succeed - 删除成功与否。
269272
*/
270273
mapboxgl.Evented.prototype.fire("featuresremoved", {features: featuresFailRemoved, succeed: succeed});
@@ -286,7 +289,7 @@ export class Theme {
286289
* @function ThemeLayer.prototype.getFeatures
287290
* @description 查看当前图层中的有效数据。
288291
* @param {Function} [filter] - 根据条件过滤要素的回调函数。
289-
* @returns {FeatureVector} 用户加入图层的有效数据。
292+
* @returns {Array.<FeatureVector>} 用户加入图层的有效数据。
290293
*/
291294
getFeatures(filter) {
292295
var len = this.features.length;
@@ -407,6 +410,7 @@ export class Theme {
407410
* @function ThemeLayer.prototype.getLocalXY
408411
* @description 地理坐标转为像素坐标。
409412
* @param {Object} [coordinate] - 坐标位置。
413+
* @returns {Array} 像素坐标数组。
410414
*/
411415
getLocalXY(coordinate) {
412416
var pixelP, map = this.map;
@@ -424,8 +428,8 @@ export class Theme {
424428
/**
425429
* @function ThemeLayer.prototype.toiClientFeature
426430
* @description 转为 iClient 要素。
427-
* @param {ThemeFeature|GeoJSONObject} features - 待转要素。
428-
* @returns {FeatureVector} 转换后的 iClient 要素。
431+
* @param {(Array.<SuperMap.ServerFeature>|Array.<L.supermap.themeFeature>|Array.<GeoJSONObject>|SuperMap.ServerFeature|L.supermap.themeFeature|GeoJSONObject)} features - 待转要素。
432+
* @returns {Array.<FeatureVector>} 转换后的 iClient 要素。
429433
*/
430434
toiClientFeature(features) {
431435
if (!CommonUtil.isArray(features)) {
@@ -459,7 +463,7 @@ export class Theme {
459463
* @function ThemeLayer.prototype.toFeature
460464
* @deprecated
461465
* @description 转为 iClient 要素,该方法将被弃用,由 {@link ThemeLayer#toiClientFeature} 代替。
462-
* @param {ThemeFeature|GeoJSONObject} features - 待转要素。
466+
* @param {(Array.<SuperMap.ServerFeature>|Array.<L.supermap.themeFeature>|Array.<GeoJSONObject>|SuperMap.ServerFeature|L.supermap.themeFeature|GeoJSONObject)} features - 待转要素。
463467
* @returns {FeatureVector} 转换后的 iClient 要素。
464468
*/
465469
toFeature(features) {

src/openlayers/overlay/Graph.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ export class Graph extends Theme {
385385
/**
386386
* @function ol.source.Graph.prototype.removeFeatures
387387
* @description 从专题图中删除 feature。这个函数删除所有传递进来的矢量要素。参数中的 features 数组中的每一项,必须是已经添加到当前图层中的 feature。
388-
* @param {FeatureVector} features - 要删除的要素。
388+
* @param {Array.<FeatureVector>|FeatureVector|Function} features - 要删除的要素。
389389
*/
390390
removeFeatures(features) {
391391
this.clearCache();

0 commit comments

Comments
 (0)