Skip to content

Commit feede3b

Browse files
committed
【fix】修复mapboxgl getfeaturebybuffer geometry传入SuperMap.point不能执行的问题 review by luoxiao
1 parent 779832f commit feede3b

File tree

2 files changed

+72
-3
lines changed

2 files changed

+72
-3
lines changed

src/mapboxgl/services/FeatureService.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import { Util } from '../core/Util';
77
import { ServiceBase } from './ServiceBase';
88
import {
99
DataFormat,
10+
Geometry,
11+
GeometryPoint,
1012
GetFeaturesByIDsService,
1113
GetFeaturesBySQLService,
1214
GetFeaturesByBoundsService,
@@ -174,7 +176,7 @@ export class FeatureService extends ServiceBase {
174176
dataSourceName = params.dataSourceName,
175177
dataSetName = params.dataSetName;
176178

177-
url = CommonUtil.urlPathAppend(url, "datasources/" + dataSourceName + "/datasets/" + dataSetName);
179+
url = CommonUtil.urlPathAppend(url, 'datasources/' + dataSourceName + '/datasets/' + dataSetName);
178180
var editFeatureService = new EditFeaturesService(url, {
179181
proxy: me.options.proxy,
180182
withCredentials: me.options.withCredentials,
@@ -214,15 +216,19 @@ export class FeatureService extends ServiceBase {
214216
if (params.geometry) {
215217
if (params.geometry instanceof mapboxgl.LngLatBounds) {
216218
params.geometry = Util.toSuperMapPolygon(params.geometry);
217-
} else {
219+
} else if (params.geometry instanceof mapboxgl.Point) {
220+
params.geometry = new GeometryPoint(params.geometry.x, params.geometry.y);
221+
} else if (params.geometry instanceof mapboxgl.LngLat) {
222+
params.geometry = new GeometryPoint(params.geometry.lng, params.geometry.lat);
223+
} else if (!(params.geometry instanceof Geometry)) {
218224
params.geometry = Util.toSuperMapGeometry(params.geometry);
219225
}
220226
}
221227
//editFeature服务参数转换,传入单独得对象或对象数组
222228
if (params.features) {
223229
var features = [];
224230
if (Util.isArray(params.features)) {
225-
params.features.map(function(feature) {
231+
params.features.map(function (feature) {
226232
features.push(me._createServerFeature(feature));
227233
return features;
228234
});

test/mapboxgl/services/GetFeaturesByBufferSpec.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import mapboxgl from 'mapbox-gl';
12
import { FeatureService } from '../../../src/mapboxgl/services/FeatureService';
23
import { GetFeaturesByBufferParameters } from '../../../src/common/iServer/GetFeaturesByBufferParameters';
34
import { FetchRequest } from '../../../src/common/util/FetchRequest';
@@ -135,4 +136,66 @@ describe('mapboxgl_FeatureService_getFeaturesByBuffer', () => {
135136
done();
136137
});
137138
});
139+
it('getFeaturesByBuffer_geometry_mapboxglPoint', done => {
140+
var queryBufferGeometry = new mapboxgl.Point(-77, 38);
141+
var bufferParam = new GetFeaturesByBufferParameters({
142+
datasetNames: ['World:Capitals'],
143+
bufferDistance: 10,
144+
geometry: queryBufferGeometry,
145+
fromIndex: 1,
146+
toIndex: 3
147+
});
148+
var service = new FeatureService(url);
149+
spyOn(FetchRequest, 'commit').and.callFake((method, testUrl, params, options) => {
150+
expect(method).toBe('POST');
151+
expect(testUrl).toBe(url + '/featureResults?returnContent=true&fromIndex=1&toIndex=3');
152+
var paramsObj = JSON.parse(params.replace(/'/g, '"'));
153+
expect(paramsObj.geometry).not.toBeFalsy();
154+
expect(paramsObj.geometry.points.length).toBe(1);
155+
expect(paramsObj.geometry.points[0].x).toBe(-77)
156+
expect(paramsObj.geometry.points[0].y).toBe(38)
157+
return Promise.resolve(new Response(JSON.stringify(getFeaturesResultJson)));
158+
});
159+
service.getFeaturesByBuffer(bufferParam, testResult => {
160+
serviceResult = testResult;
161+
var result = serviceResult.result;
162+
expect(result.succeed).toBe(true);
163+
expect(result.featureCount).toEqual(1);
164+
expect(result.totalCount).toEqual(1);
165+
expect(serviceResult.result.features.type).toEqual('FeatureCollection');
166+
bufferParam.destroy();
167+
done();
168+
});
169+
});
170+
it('getFeaturesByBuffer_geometry_mapboxglLatlng', done => {
171+
var queryBufferGeometry = new mapboxgl.LngLat(-77, 38);
172+
var bufferParam = new GetFeaturesByBufferParameters({
173+
datasetNames: ['World:Capitals'],
174+
bufferDistance: 10,
175+
geometry: queryBufferGeometry,
176+
fromIndex: 1,
177+
toIndex: 3
178+
});
179+
var service = new FeatureService(url);
180+
spyOn(FetchRequest, 'commit').and.callFake((method, testUrl, params, options) => {
181+
expect(method).toBe('POST');
182+
expect(testUrl).toBe(url + '/featureResults?returnContent=true&fromIndex=1&toIndex=3');
183+
var paramsObj = JSON.parse(params.replace(/'/g, '"'));
184+
expect(paramsObj.geometry).not.toBeFalsy();
185+
expect(paramsObj.geometry.points.length).toBe(1);
186+
expect(paramsObj.geometry.points[0].x).toBe(-77);
187+
expect(paramsObj.geometry.points[0].y).toBe(38);
188+
return Promise.resolve(new Response(JSON.stringify(getFeaturesResultJson)));
189+
});
190+
service.getFeaturesByBuffer(bufferParam, testResult => {
191+
serviceResult = testResult;
192+
var result = serviceResult.result;
193+
expect(result.succeed).toBe(true);
194+
expect(result.featureCount).toEqual(1);
195+
expect(result.totalCount).toEqual(1);
196+
expect(serviceResult.result.features.type).toEqual('FeatureCollection');
197+
bufferParam.destroy();
198+
done();
199+
});
200+
});
138201
});

0 commit comments

Comments
 (0)