Skip to content

Commit 50ef82f

Browse files
committed
【feature】GetFeaturesByGeometryParameters增加orderBy参数支持排序
1 parent 564363f commit 50ef82f

File tree

3 files changed

+60
-10
lines changed

3 files changed

+60
-10
lines changed

src/common/iServer/FilterParameter.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,14 @@ export class FilterParameter {
6767
/**
6868
* @member {string} [FilterParameter.prototype.orderBy]
6969
* @description 查询排序的字段,orderBy 的字段须为数值型的。
70-
* 相当于 SQL 语句中的 ORDER BY 子句,其格式为:ORDER BY <列名>
70+
* 相当于 SQL 语句中的 ORDER BY 子句,其格式为:ORDER BY <列名>或ORDER BY <列名 排序规则>。
7171
* 列名即属性表中每一列的名称,列又可称为属性,在 SuperMap 中又称为字段。
72-
* 对单个字段排序时,该字段的用法为 orderBy = "字段名";
73-
* 对多个字段排序时,字段之间以英文逗号进行分割,用法为 orderBy = "字段名1, 字段名2"。
74-
* 例如,现有一个国家数据集,它有两个字段分别为“SmArea”和“pop_1994”,
75-
* 分别表示国家的面积和 1994 年的各国人口数量。
76-
* 如果要按照各国人口数量对记录进行排序, orderBy = "pop_1994";
77-
* 如果要以面积和人口进行排序,则 orderBy = "SmArea, pop_1994"。
72+
* 排序规则即按字段的升序或降序排序,asc 表示升序,desc 表示降序,不指定排序规则按升序排序。
73+
* 对单个字段排序时,该字段的用法为 orderBy = "字段名",升序为orderBy = "字段名 asc";降序为 orderBy = "字段名 desc";
74+
* 对多个字段排序时,字段之间以英文逗号进行分割,用法为 orderBy = "字段名1, 字段名2 asc, 字段名2 desc"。
75+
* 例如,在一个国家数据集中,有两个字段,字段名分别为“SmArea”和“pop_1994”,分别表示国家的面积和1994年的各国的人口数量,
76+
* 如果要按照各国人口数量对记录进行排序,可以设置 orderBy = "pop_1994";
77+
* 如果要以面积降序和人口升序进行排序, 设置 orderBy = "SmArea desc, pop_1994 asc"。
7878
*/
7979
this.orderBy = null;
8080

src/common/iServer/GetFeaturesByGeometryParameters.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { ServerGeometry } from './ServerGeometry';
2121
* @param {Array.<string>} options.datasetNames - 数据集集合中的数据集名称列表。
2222
* @param {string} [options.attributeFilter] - 几何查询属性过滤条件。
2323
* @param {Array.<string>} [options.fields] - 查询结果返回字段。默认返回所有字段。
24+
* @param {string} [options.orderBy] - 查询排序的字段,orderBy 的字段须为数值型的。
2425
* @param {SpatialQueryMode} [options.spatialQueryMode=SpatialQueryMode.CONTAIN] - 空间查询模式。
2526
* @param {boolean} [options.returnContent=true] - 是否直接返回查询结果。
2627
* @param {boolean} [options.returnFeaturesOnly=false] - 是否仅返回要素信息。当 returnContent 为 true 时设置有效。
@@ -67,6 +68,20 @@ export class GetFeaturesByGeometryParameters extends GetFeaturesParametersBase {
6768
* @description 空间查询模式。
6869
*/
6970
this.spatialQueryMode = SpatialQueryMode.CONTAIN;
71+
72+
/**
73+
* @member {string} [GetFeaturesByGeometryParameters.prototype.orderBy]
74+
* @description 查询排序的字段,orderBy 的字段须为数值型的。
75+
* 相当于 SQL 语句中的 ORDER BY 子句,其格式为:ORDER BY <列名>或ORDER BY <列名 排序规则>。
76+
* 列名即属性表中每一列的名称,列又可称为属性,在 SuperMap 中又称为字段。
77+
* 排序规则即按字段的升序或降序排序,asc 表示升序,desc 表示降序,不指定排序规则按升序排序。
78+
* 对单个字段排序时,该字段的用法为 orderBy = "字段名",升序为orderBy = "字段名 asc";降序为 orderBy = "字段名 desc";
79+
* 对多个字段排序时,字段之间以英文逗号进行分割,用法为 orderBy = "字段名1, 字段名2 asc, 字段名2 desc"。
80+
* 例如,在一个国家数据集中,有两个字段,字段名分别为“SmArea”和“pop_1994”,分别表示国家的面积和1994年的各国的人口数量,
81+
* 如果要按照各国人口数量对记录进行排序,可以设置 orderBy = "pop_1994";
82+
* 如果要以面积降序和人口升序进行排序, 设置 orderBy = "SmArea desc, pop_1994 asc"。
83+
*/
84+
this.orderBy = null;
7085
Util.extend(this, options);
7186

7287
this.CLASS_NAME = 'SuperMap.GetFeaturesByGeometryParameters';
@@ -92,6 +107,7 @@ export class GetFeaturesByGeometryParameters extends GetFeaturesParametersBase {
92107
me.attributeFilter = null;
93108
me.spatialQueryMode = null;
94109
me.getFeatureMode = null;
110+
me.orderBy = null;
95111
}
96112

97113
/**
@@ -110,10 +126,15 @@ export class GetFeaturesByGeometryParameters extends GetFeaturesParametersBase {
110126
geometry: geometry,
111127
spatialQueryMode: params.spatialQueryMode
112128
};
113-
if (params.fields) {
129+
if (params.fields || params.orderBy) {
114130
filterParameter = new FilterParameter();
115131
filterParameter.name = params.datasetNames;
116-
filterParameter.fields = params.fields;
132+
if (params.fields) {
133+
filterParameter.fields = params.fields;
134+
}
135+
if (params.orderBy) {
136+
filterParameter.orderBy = params.orderBy;
137+
}
117138
parasByGeometry.queryParameter = filterParameter;
118139
}
119140
if (params.attributeFilter) {
@@ -138,7 +159,6 @@ export class GetFeaturesByGeometryParameters extends GetFeaturesParametersBase {
138159
if (params.aggregations) {
139160
parasByGeometry.aggregations = params.aggregations;
140161
}
141-
142162
return Util.toJSON(parasByGeometry);
143163
}
144164
}

test/common/iServer/GetFeaturesByGeometryServiceSpec.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,4 +380,34 @@ describe('GetFeaturesByGeometryService', () => {
380380
});
381381
getFeaturesByGeometryService.processAsync(getFeaturesByGeometryParameters, serviceCompleted);
382382
})
383+
it('GetFeaturesByGeometryParameters:orderBy', done => {
384+
var serviceCompleted = serviceSucceedEventArgsSystem => {
385+
console.log('serviceSucceedEventArgsSystem', serviceSucceedEventArgsSystem);
386+
try {
387+
getFeaturesByGeometryService.destroy();
388+
getFeaturesByGeometryParameters.destroy();
389+
expect(serviceSucceedEventArgsSystem.result).not.toBeNull();
390+
done();
391+
} catch (exception) {
392+
expect(false).toBeTruthy();
393+
console.log('GetFeaturesByGeometryService_' + exception.name + ':' + exception.message);
394+
getFeaturesByGeometryService.destroy();
395+
getFeaturesByGeometryParameters.destroy();
396+
done();
397+
}
398+
};
399+
var getFeaturesByGeometryService = new GetFeaturesByGeometryService(dataServiceURL);
400+
var point = new Point(112, 36);
401+
var getFeaturesByGeometryParameters = new GetFeaturesByGeometryParameters({
402+
datasetNames: ['World:Countries'],
403+
geometry: point,
404+
orderBy: "SMID"
405+
});
406+
spyOn(FetchRequest, 'commit').and.callFake((method, testUrl, params, options) => {
407+
var paramsObj = JSON.parse(params.replace(/'/g, '"'));
408+
expect(paramsObj.queryParameter.orderBy).toBe("SMID");
409+
return Promise.resolve(new Response(JSON.stringify(getReturnFeaturesOnlyResultJson)));
410+
});
411+
getFeaturesByGeometryService.processAsync(getFeaturesByGeometryParameters, serviceCompleted);
412+
})
383413
});

0 commit comments

Comments
 (0)