Skip to content

Commit 4f4f0d7

Browse files
featureService 新增获取要素数量,数据集信息方法,getFeature 参数类新增 returnFeaturesOnly 参数 review by luox
1 parent 69d2ccb commit 4f4f0d7

17 files changed

+354
-9
lines changed

src/common/iServer/FeatureService.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@ import { FeatureAttachmentsService } from './FeatureAttachmentsService';
1111
import { EditFeaturesService } from './EditFeaturesService';
1212
import { DataFormat } from '../REST';
1313

14+
const FEATURE_SERVICE_MAP = {
15+
id: GetFeaturesByIDsService,
16+
sql: GetFeaturesBySQLService ,
17+
bounds: GetFeaturesByBoundsService,
18+
buffer: GetFeaturesByBufferService,
19+
geometry: GetFeaturesByGeometryService
20+
}
21+
1422
/**
1523
* @class FeatureService
1624
* @constructs FeatureService
@@ -235,6 +243,52 @@ export class FeatureService {
235243
return featureAttachmentsService.processAsync(params, callback);
236244
}
237245

246+
/**
247+
* @function FeatureService.prototype.getFeaturesCount
248+
* @description 获取要素数量。
249+
* @version 11.2.0
250+
* @param {GetFeaturesByIDsParameters|GetFeaturesByBoundsParameters|GetFeaturesByBufferParameters|GetFeaturesByGeometryParameters|GetFeaturesBySQLParameters} params - 查询参数类。
251+
* @param {RequestCallback} [callback] - 回调函数,该参数未传时可通过返回的 promise 获取结果。
252+
* @returns {Promise} Promise 对象。
253+
*/
254+
getFeaturesCount(params, callback) {
255+
var me = this;
256+
var newParams = { ...params, returnCountOnly: true, returnContent: true, returnFeaturesOnly: false };
257+
let queryType = Object.keys(FEATURE_SERVICE_MAP).find((type) => {
258+
return newParams.CLASS_NAME.toLowerCase().includes(type);
259+
});
260+
var getFeaturesServiceBase = new FEATURE_SERVICE_MAP[queryType](me.url, {
261+
proxy: me.options.proxy,
262+
withCredentials: me.options.withCredentials,
263+
crossOrigin: me.options.crossOrigin,
264+
headers: me.options.headers
265+
});
266+
return getFeaturesServiceBase.processAsync(newParams, callback);
267+
}
268+
269+
/**
270+
* @function FeatureService.prototype.getFeaturesDatasetInfo
271+
* @description 获取要素数据集信息。
272+
* @version 11.2.0
273+
* @param {GetFeaturesByIDsParameters|GetFeaturesByBoundsParameters|GetFeaturesByBufferParameters|GetFeaturesByGeometryParameters|GetFeaturesBySQLParameters} params - 查询参数类。
274+
* @param {RequestCallback} [callback] - 回调函数,该参数未传时可通过返回的 promise 获取结果。
275+
* @returns {Promise} Promise 对象。
276+
*/
277+
getFeaturesDatasetInfo(params, callback) {
278+
var me = this;
279+
var newParams = { ...params, returnDatasetInfoOnly: true, returnContent: true, returnFeaturesOnly: false };
280+
let queryType = Object.keys(FEATURE_SERVICE_MAP).find((type) => {
281+
return newParams.CLASS_NAME.toLowerCase().includes(type);
282+
});
283+
var getFeaturesServiceBase = new FEATURE_SERVICE_MAP[queryType](me.url, {
284+
proxy: me.options.proxy,
285+
withCredentials: me.options.withCredentials,
286+
crossOrigin: me.options.crossOrigin,
287+
headers: me.options.headers
288+
});
289+
return getFeaturesServiceBase.processAsync(newParams, callback);
290+
}
291+
238292
_processFormat(resultFormat) {
239293
return resultFormat ? resultFormat : DataFormat.GEOJSON;
240294
}

src/common/iServer/GetFeaturesByBoundsParameters.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { GetFeaturesParametersBase } from './GetFeaturesParametersBase';
1818
* @param {Array.<string>} [options.fields] - 查询结果返回字段。默认返回所有字段。
1919
* @param {SpatialQueryMode} [options.spatialQueryMode=SpatialQueryMode.CONTAIN] - 空间查询模式。
2020
* @param {boolean} [options.returnContent=true] - 是否直接返回查询结果。
21+
* @param {boolean} [options.returnFeaturesOnly=false] - 是否仅返回要素信息。当 returnContent 为 true 时设置有效。
2122
* @param {number} [options.fromIndex=0] - 查询结果的最小索引号。
2223
* @param {number} [options.toIndex=19] - 查询结果的最大索引号。
2324
* @param {string|number} [options.targetEpsgCode] - 动态投影的目标坐标系对应的 EPSG Code,使用此参数时,returnContent 参数需为 true。

src/common/iServer/GetFeaturesByBufferParameters.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { ServerGeometry } from './ServerGeometry';
1818
* @param {Array.<string>} [options.fields] - 查询结果返回字段。默认返回所有字段。
1919
* @param {string} [options.attributeFilter] - 属性查询条件。
2020
* @param {boolean} [options.returnContent=true] - 是否直接返回查询结果。
21+
* @param {boolean} [options.returnFeaturesOnly=false] - 是否仅返回要素信息。当 returnContent 为 true 时设置有效。
2122
* @param {number} [options.fromIndex=0] - 查询结果的最小索引号。
2223
* @param {number} [options.toIndex=19] - 查询结果的最大索引号。
2324
* @param {string|number} [options.targetEpsgCode] - 动态投影的目标坐标系对应的 EPSG Code,使用此参数时,returnContent 参数需为 true。

src/common/iServer/GetFeaturesByGeometryParameters.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { ServerGeometry } from './ServerGeometry';
1919
* @param {Array.<string>} [options.fields] - 查询结果返回字段。默认返回所有字段。
2020
* @param {SpatialQueryMode} [options.spatialQueryMode=SpatialQueryMode.CONTAIN] - 空间查询模式。
2121
* @param {boolean} [options.returnContent=true] - 是否直接返回查询结果。
22+
* @param {boolean} [options.returnFeaturesOnly=false] - 是否仅返回要素信息。当 returnContent 为 true 时设置有效。
2223
* @param {number} [options.fromIndex=0] - 查询结果的最小索引号。
2324
* @param {number} [options.toIndex=19] - 查询结果的最大索引号。
2425
* @param {string|number} [options.targetEpsgCode] - 动态投影的目标坐标系对应的 EPSG Code,使用此参数时,returnContent 参数需为 true。

src/common/iServer/GetFeaturesByIDsParameters.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { GetFeaturesParametersBase } from './GetFeaturesParametersBase';
1515
* @param {Array.<string>} [options.fields] - 查询结果返回字段。默认返回所有字段。
1616
* @param {Array.<string>} options.dataSetNames - 数据集集合中的数据集名称列表。
1717
* @param {boolean} [options.returnContent=true] - 是否直接返回查询结果。
18+
* @param {boolean} [options.returnFeaturesOnly=false] - 是否仅返回要素信息。当 returnContent 为 true 时设置有效。
1819
* @param {number} [options.fromIndex=0] - 查询结果的最小索引号。
1920
* @param {number} [options.toIndex=19] - 查询结果的最大索引号。
2021
* @param {string|number} [options.targetEpsgCode] - 动态投影的目标坐标系对应的 EPSG Code,使用此参数时,returnContent 参数需为 true。

src/common/iServer/GetFeaturesBySQLParameters.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { GetFeaturesParametersBase } from './GetFeaturesParametersBase';
1313
* @param {FilterParameter} options.queryParameter - 查询过滤条件参数。
1414
* @param {Array.<string>} options.datasetNames - 数据集集合中的数据集名称列表。
1515
* @param {boolean} [options.returnContent=true] - 是否直接返回查询结果。
16+
* @param {boolean} [options.returnFeaturesOnly=false] - 是否仅返回要素信息。当 returnContent 为 true 时设置有效。
1617
* @param {number} [options.fromIndex=0] - 查询结果的最小索引号。
1718
* @param {number} [options.toIndex=19] - 查询结果的最大索引号。
1819
* @param {string|number} [options.targetEpsgCode] - 动态投影的目标坐标系对应的 EPSG Code,使用此参数时,returnContent 参数需为 true。

src/common/iServer/GetFeaturesParametersBase.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { Util } from '../commontypes/Util';
1212
* @param {Object} options - 参数。
1313
* @param {Array.<string>} options.datasetNames - 数据集名称列表。
1414
* @param {boolean} [options.returnContent=true] - 是否直接返回查询结果。
15+
* @param {boolean} [options.returnFeaturesOnly=false] - 是否仅返回要素信息。当 returnContent 为 true 时设置有效。
1516
* @param {number} [options.fromIndex=0] - 查询结果的最小索引号。
1617
* @param {number} [options.toIndex=19] - 查询结果的最大索引号。
1718
* @param {string|number} [options.targetEpsgCode] - 动态投影的目标坐标系对应的 EPSG Code,使用此参数时,returnContent 参数需为 true。
@@ -59,11 +60,11 @@ export class GetFeaturesParametersBase {
5960
*/
6061
this.toIndex = 19;
6162

62-
/**
63-
* @member {boolean} [GetFeaturesParametersBase.prototype.returnCountOnly=false]
64-
* @description 只返回查询结果的总数
63+
/**
64+
* @member {boolean} [GetFeaturesParametersBase.prototype.returnFeaturesOnly=false]
65+
* @description 仅返回要素信息
6566
*/
66-
this.returnCountOnly = false;
67+
this.returnFeaturesOnly = false;
6768

6869
/**
6970
* @member {number} [GetFeaturesParametersBase.prototype.maxFeatures=1000]

src/common/iServer/GetFeaturesServiceBase.js

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ export class GetFeaturesServiceBase extends CommonServiceBase {
3737
*/
3838
this.returnContent = true;
3939

40+
/**
41+
* @member {boolean} [GetFeaturesServiceBase.prototype.returnFeaturesOnly=false]
42+
* @description 是否仅返回要素信息。
43+
*/
44+
this.returnFeaturesOnly = false;
45+
4046
/**
4147
* @member {number} [GetFeaturesServiceBase.prototype.fromIndex=0]
4248
* @description 查询结果的最小索引号。如果该值大于查询结果的最大索引号,则查询结果为空。
@@ -105,6 +111,7 @@ export class GetFeaturesServiceBase extends CommonServiceBase {
105111
firstPara = true;
106112

107113
me.returnContent = params.returnContent;
114+
me.returnFeaturesOnly = params.returnFeaturesOnly;
108115
me.fromIndex = params.fromIndex;
109116
me.toIndex = params.toIndex;
110117
me.maxFeatures = params.maxFeatures;
@@ -117,9 +124,19 @@ export class GetFeaturesServiceBase extends CommonServiceBase {
117124
me.url = Util.urlAppend(me.url, `fromIndex=${me.fromIndex}&toIndex=${me.toIndex}`);
118125
}
119126

120-
if (params.returnCountOnly) {
121-
me.url = Util.urlAppend(me.url, "&returnCountOnly=" + params.returnContent)
122-
}
127+
if (me.returnContent) {
128+
if (params.returnCountOnly) {
129+
me.url = Util.urlAppend(me.url, "&returnCountOnly=" + params.returnCountOnly)
130+
}
131+
132+
if (params.returnDatasetInfoOnly) {
133+
me.url = Util.urlAppend(me.url, "&returnDatasetInfoOnly=" + params.returnDatasetInfoOnly)
134+
}
135+
136+
if (params.returnFeaturesOnly) {
137+
me.url = Util.urlAppend(me.url, "&returnFeaturesOnly=" + params.returnFeaturesOnly)
138+
}
139+
}
123140

124141
jsonParameters = me.getJsonParameters(params);
125142
return me.request({
@@ -141,10 +158,13 @@ export class GetFeaturesServiceBase extends CommonServiceBase {
141158
transformResult(result, options) {
142159
var me = this;
143160
result = Util.transformResult(result);
144-
if (me.format === DataFormat.GEOJSON && result.features) {
145-
var geoJSONFormat = new GeoJSON();
161+
var geoJSONFormat = new GeoJSON();
162+
if (me.format === DataFormat.GEOJSON && result.features) {
146163
result.features = geoJSONFormat.toGeoJSON(result.features);
147164
}
165+
if (me.returnFeaturesOnly && Array.isArray(result)) {
166+
result = geoJSONFormat.toGeoJSON(result);
167+
}
148168
return { result, options };
149169
}
150170

src/leaflet/services/FeatureService.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,31 @@ export var FeatureService = ServiceBase.extend({
166166
return this._featureService.editFeatureAttachments(params, callback);
167167
},
168168

169+
/**
170+
* @function FeatureService.prototype.getFeaturesCount
171+
* @description 获取要素数量。
172+
* @version 11.2.0
173+
* @param {GetFeaturesByIDsParameters|GetFeaturesByBoundsParameters|GetFeaturesByBufferParameters|GetFeaturesByGeometryParameters|GetFeaturesBySQLParameters} params - 查询参数类。
174+
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
175+
* @returns {Promise} Promise 对象。
176+
*/
177+
getFeaturesCount(params, callback) {
178+
params = this._processParams(params);
179+
return this._featureService.getFeaturesCount(params, callback);
180+
},
181+
/**
182+
* @function FeatureService.prototype.getFeaturesDatasetInfo
183+
* @description 获取要素数据集信息。
184+
* @version 11.2.0
185+
* @param {GetFeaturesByIDsParameters|GetFeaturesByBoundsParameters|GetFeaturesByBufferParameters|GetFeaturesByGeometryParameters|GetFeaturesBySQLParameters} params - 查询参数类。
186+
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
187+
* @returns {Promise} Promise 对象。
188+
*/
189+
getFeaturesDatasetInfo(params, callback) {
190+
params = this._processParams(params);
191+
return this._featureService.getFeaturesDatasetInfo(params, callback);
192+
},
193+
169194
_processParams: function (params) {
170195
if (!params) {
171196
return {};

src/mapboxgl/services/FeatureService.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,33 @@ export class FeatureService extends ServiceBase {
161161
editFeatureAttachments(params, callback) {
162162
return this._featureService.editFeatureAttachments(params, callback);
163163
}
164+
165+
/**
166+
* @function FeatureService.prototype.getFeaturesCount
167+
* @description 获取要素数量。
168+
* @version 11.2.0
169+
* @param {GetFeaturesByIDsParameters|GetFeaturesByBoundsParameters|GetFeaturesByBufferParameters|GetFeaturesByGeometryParameters|GetFeaturesBySQLParameters} params - 查询参数类。
170+
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
171+
* @returns {Promise} Promise 对象。
172+
*/
173+
getFeaturesCount(params, callback) {
174+
params = this._processParams(params);
175+
return this._featureService.getFeaturesCount(params, callback);
176+
}
177+
178+
/**
179+
* @function FeatureService.prototype.getFeaturesDatasetInfo
180+
* @description 获取要素数据集信息。
181+
* @version 11.2.0
182+
* @param {GetFeaturesByIDsParameters|GetFeaturesByBoundsParameters|GetFeaturesByBufferParameters|GetFeaturesByGeometryParameters|GetFeaturesBySQLParameters} params - 查询参数类。
183+
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
184+
* @returns {Promise} Promise 对象。
185+
*/
186+
getFeaturesDatasetInfo(params, callback) {
187+
params = this._processParams(params);
188+
return this._featureService.getFeaturesDatasetInfo(params, callback);
189+
}
190+
164191
/**
165192
* @private
166193
* @description 参数类型转换。

src/maplibregl/services/FeatureService.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,32 @@ export class FeatureService extends ServiceBase {
161161
editFeatureAttachments(params, callback) {
162162
return this._featureService.editFeatureAttachments(params, callback);
163163
}
164+
165+
/**
166+
* @function FeatureService.prototype.getFeaturesCount
167+
* @description 获取要素数量。
168+
* @version 11.2.0
169+
* @param {GetFeaturesByIDsParameters|GetFeaturesByBoundsParameters|GetFeaturesByBufferParameters|GetFeaturesByGeometryParameters|GetFeaturesBySQLParameters} params - 查询参数类。
170+
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
171+
* @returns {Promise} Promise 对象。
172+
*/
173+
getFeaturesCount(params, callback) {
174+
params = this._processParams(params);
175+
return this._featureService.getFeaturesCount(params, callback);
176+
}
177+
178+
/**
179+
* @function FeatureService.prototype.getFeaturesDatasetInfo
180+
* @description 获取要素数据集信息。
181+
* @version 11.2.0
182+
* @param {GetFeaturesByIDsParameters|GetFeaturesByBoundsParameters|GetFeaturesByBufferParameters|GetFeaturesByGeometryParameters|GetFeaturesBySQLParameters} params - 查询参数类。
183+
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
184+
* @returns {Promise} Promise 对象。
185+
*/
186+
getFeaturesDatasetInfo(params, callback) {
187+
params = this._processParams(params);
188+
return this._featureService.getFeaturesDatasetInfo(params, callback);
189+
}
164190

165191
/**
166192
* @private

src/openlayers/services/FeatureService.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,32 @@ export class FeatureService extends ServiceBase {
160160
editFeatureAttachments(params, callback) {
161161
return this._featureService.editFeatureAttachments(params, callback);
162162
}
163+
164+
/**
165+
* @function FeatureService.prototype.getFeaturesCount
166+
* @description 获取要素数量。
167+
* @version 11.2.0
168+
* @param {GetFeaturesByIDsParameters|GetFeaturesByBoundsParameters|GetFeaturesByBufferParameters|GetFeaturesByGeometryParameters|GetFeaturesBySQLParameters} params - 查询参数类。
169+
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
170+
* @returns {Promise} Promise 对象。
171+
*/
172+
getFeaturesCount(params, callback) {
173+
params = this._processParams(params);
174+
return this._featureService.getFeaturesCount(params, callback);
175+
}
176+
177+
/**
178+
* @function FeatureService.prototype.getFeaturesDatasetInfo
179+
* @description 获取要素数据集信息。
180+
* @version 11.2.0
181+
* @param {GetFeaturesByIDsParameters|GetFeaturesByBoundsParameters|GetFeaturesByBufferParameters|GetFeaturesByGeometryParameters|GetFeaturesBySQLParameters} params - 查询参数类。
182+
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
183+
* @returns {Promise} Promise 对象。
184+
*/
185+
getFeaturesDatasetInfo(params, callback) {
186+
params = this._processParams(params);
187+
return this._featureService.getFeaturesDatasetInfo(params, callback);
188+
}
163189

164190
_processParams(params) {
165191
if (!params) {

test/common/iServer/GetFeaturesByBoundsServiceSpec.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,4 +206,35 @@ describe('GetFeaturesByBoundsService', () => {
206206
});
207207
getFeaturesByBoundsService.processAsync(boundsParams, serviceCompleted);
208208
});
209+
it('GetFeaturesByBoundsParameters:returnFeaturesOnly', done => {
210+
var serviceCompleted = serviceSucceedEventArgsSystem => {
211+
console.log('serviceSucceedEventArgsSystem', serviceSucceedEventArgsSystem);
212+
try {
213+
getFeaturesByBoundsService.destroy();
214+
boundsParams.destroy();
215+
expect(serviceSucceedEventArgsSystem.result.type).toBe('FeatureCollection');
216+
expect(serviceSucceedEventArgsSystem.result.features.length).toBe(4);
217+
done();
218+
} catch (exception) {
219+
expect(false).toBeTruthy();
220+
console.log('GetFeaturesByBoundsService_' + exception.name + ':' + exception.message);
221+
getFeaturesByBoundsService.destroy();
222+
boundsParams.destroy();
223+
done();
224+
}
225+
};
226+
var getFeaturesByBoundsService = initGetFeaturesByBoundsService_RegisterListener();
227+
var boundsParams = new GetFeaturesByBoundsParameters({
228+
datasetNames: ['World:Countries'],
229+
bounds: new Bounds(0, 0, 90, 90),
230+
targetPrj: { "epsgCode": 4326 },
231+
returnFeaturesOnly: true
232+
});
233+
spyOn(FetchRequest, 'commit').and.callFake((method, testUrl, params, options) => {
234+
if (testUrl.indexOf('returnFeaturesOnly') > -1) {
235+
return Promise.resolve(new Response(JSON.stringify(getReturnFeaturesOnlyResultJson)));
236+
}
237+
});
238+
getFeaturesByBoundsService.processAsync(boundsParams, serviceCompleted);
239+
})
209240
});

0 commit comments

Comments
 (0)