Skip to content

Commit dc95b33

Browse files
committed
【feature】GetFeaturesByGeometryParameters增加orderBy参数支持排序
1 parent cab8fdc commit dc95b33

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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy