Skip to content

Commit 1413801

Browse files
committed
【fix】fix ICL-1160 修复clipRegion在非经纬度地图情况下得不到期望结果的问题 & UT。优化leaflet graphiclayer手势效果 review by liqian
1 parent 4bf6240 commit 1413801

File tree

5 files changed

+88
-10
lines changed

5 files changed

+88
-10
lines changed

src/leaflet/mapping/ImageMapLayer.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
44
import L, { Util, Layer, ImageOverlay } from 'leaflet';
55
import '../core/Base';
6-
import { ServerGeometry, ServerType, CommonUtil, SecurityManager, Credential } from '@supermap/iclient-common';
6+
import { ServerGeometry, ServerType, SecurityManager, Credential } from '@supermap/iclient-common';
77
import Attributions from '../core/Attributions';
88
/**
99
* @class L.supermap.imageMapLayer
@@ -234,11 +234,9 @@ export var ImageMapLayer = Layer.extend({
234234
params.push('rasterfunction=' + JSON.stringify(options.rasterfunction));
235235
}
236236

237-
if (options.clipRegionEnabled && options.clipRegion instanceof L.Path) {
238-
options.clipRegion = L.Util.toSuperMapGeometry(options.clipRegion.toGeoJSON());
239-
options.clipRegion = CommonUtil.toJSON(ServerGeometry.fromGeometry(options.clipRegion));
237+
if (options.clipRegionEnabled && options.clipRegion) {
240238
params.push('clipRegionEnabled=' + options.clipRegionEnabled);
241-
params.push('clipRegion=' + JSON.stringify(options.clipRegion));
239+
params.push('clipRegion=' + JSON.stringify(ServerGeometry.fromGeometry(Util.toSuperMapGeometry(options.clipRegion))));
242240
}
243241

244242
if (options.overlapDisplayed === false) {

src/leaflet/mapping/TiledMapLayer.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
ServerType,
99
Unit,
1010
Credential,
11-
CommonUtil,
1211
ServerGeometry
1312
} from '@supermap/iclient-common';
1413
import * as Util from "../core/Util";
@@ -333,9 +332,8 @@ export var TiledMapLayer = L.TileLayer.extend({
333332
params["layersID"] = options.layersID.toString();
334333
}
335334

336-
if (options.clipRegionEnabled && options.clipRegion instanceof L.Path) {
337-
options.clipRegion = Util.toSuperMapGeometry(options.clipRegion.toGeoJSON());
338-
options.clipRegion = CommonUtil.toJSON(ServerGeometry.fromGeometry(options.clipRegion));
335+
if (options.clipRegionEnabled && options.clipRegion) {
336+
options.clipRegion = ServerGeometry.fromGeometry(Util.toSuperMapGeometry(options.clipRegion));
339337
params["clipRegionEnabled"] = options.clipRegionEnabled;
340338
params["clipRegion"] = JSON.stringify(options.clipRegion);
341339
}

src/leaflet/overlay/graphic/CanvasRenderer.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export var GraphicCanvasRenderer = L.Class.extend({
3535
let me = this,
3636
layer = me.layer,
3737
map = layer._map;
38-
this.layer._renderer._ctx.canvas.style.cursor = 'pointer';
38+
3939
let graphics = layer._getGraphicsInBounds();
4040
evt.target = null;
4141
for (let i = graphics.length - 1; i >= 0; i--) {
@@ -61,12 +61,14 @@ export var GraphicCanvasRenderer = L.Class.extend({
6161
}
6262
bounds = L.bounds(p1, p2);
6363
if (bounds.contains(map.latLngToLayerPoint(evt.latlng))) {
64+
this.layer._renderer._ctx.canvas.style.cursor = 'pointer';
6465
evt.target = graphics[i];
6566
if (evt.type === 'click' && layer.options.onClick) {
6667
layer.options.onClick.call(layer, graphics[i], evt);
6768
}
6869
return;
6970
}
71+
this.layer._renderer._ctx.canvas.style.cursor = 'auto';
7072
}
7173
},
7274

test/leaflet/mapping/ImageMapLayerSpec.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,5 +222,45 @@ describe('leaflet_ImageMapLayer', () => {
222222
expect(hillshadeParameter.azimuth).toBe(200);
223223
expect(hillshadeParameter.zFactor).toBe(1);
224224
});
225+
it("getImageUrl, clipRegion_grojson", () => {
226+
const tempOptions = {
227+
clipRegion:{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[20,-20],[20,0],[40,0],[40,-20],[20,-20]]]}},
228+
clipRegionEnabled:true
229+
};
230+
const imageMapLayerObject = imageMapLayer(url, tempOptions).addTo(map);
231+
expect(imageMapLayerObject).not.toBeNull();
232+
const tileUrl = imageMapLayerObject.getImageUrl(L.point(1, 4));
233+
const clipRegionEnabledValue = getQueryValue(tileUrl,'clipRegionEnabled');
234+
expect(clipRegionEnabledValue).toBeTruthy();
235+
const clipRegionValue = getQueryValue(tileUrl,'clipRegion');
236+
expect(clipRegionValue).not.toBeNull;
237+
const clipRegionParameter = JSON.parse(decodeURIComponent(clipRegionValue));
238+
expect(clipRegionParameter.parts[0]).toBe(5);
239+
expect(clipRegionParameter.points.length).toBe(5);
240+
expect(clipRegionParameter.points[0].x).toBe(20);
241+
expect(clipRegionParameter.points[0].y).toBe(-20);
242+
expect(clipRegionParameter.points[4].x).toBe(20);
243+
expect(clipRegionParameter.points[4].y).toBe(-20);
244+
});
245+
it("getImageUrl, clipRegion_polygon", () => {
246+
const tempOptions = {
247+
clipRegion:L.polygon([[-20, 20], [0, 20], [0, 40], [-20, 40], [-20, 20]], {color: 'red'}),
248+
clipRegionEnabled:true
249+
};
250+
const imageMapLayerObject = imageMapLayer(url, tempOptions).addTo(map);
251+
expect(imageMapLayerObject).not.toBeNull();
252+
const tileUrl = imageMapLayerObject.getImageUrl(L.point(1, 4));
253+
const clipRegionEnabledValue = getQueryValue(tileUrl,'clipRegionEnabled');
254+
expect(clipRegionEnabledValue).toBeTruthy();
255+
const clipRegionValue = getQueryValue(tileUrl,'clipRegion');
256+
expect(clipRegionValue).not.toBeNull;
257+
const clipRegionParameter = JSON.parse(decodeURIComponent(clipRegionValue));
258+
expect(clipRegionParameter.parts[0]).toBe(5);
259+
expect(clipRegionParameter.points.length).toBe(5);
260+
expect(clipRegionParameter.points[0].x).toBe(20);
261+
expect(clipRegionParameter.points[0].y).toBe(-20);
262+
expect(clipRegionParameter.points[4].x).toBe(20);
263+
expect(clipRegionParameter.points[4].y).toBe(-20);
264+
});
225265

226266
});

test/leaflet/mapping/TiledMapLayerSpec.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,5 +155,45 @@ describe('leaflet_TiledMapLayer', () => {
155155
expect(hillshadeParameter.azimuth).toBe(200);
156156
expect(hillshadeParameter.zFactor).toBe(1);
157157
});
158+
it("getTileUrl, clipRegion_grojson", () => {
159+
const tempOptions = {
160+
clipRegion:{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[20,-20],[20,0],[40,0],[40,-20],[20,-20]]]}},
161+
clipRegionEnabled:true
162+
};
163+
const tiledMapLayerObject = tiledMapLayer(url, tempOptions).addTo(map);
164+
expect(tiledMapLayerObject).not.toBeNull();
165+
const tileUrl = tiledMapLayerObject.getTileUrl(L.point(1, 4));
166+
const clipRegionEnabledValue = getQueryValue(tileUrl,'clipRegionEnabled');
167+
expect(clipRegionEnabledValue).toBeTruthy();
168+
const clipRegionValue = getQueryValue(tileUrl,'clipRegion');
169+
expect(clipRegionValue).not.toBeNull;
170+
const clipRegionParameter = JSON.parse(decodeURIComponent(clipRegionValue));
171+
expect(clipRegionParameter.parts[0]).toBe(5);
172+
expect(clipRegionParameter.points.length).toBe(5);
173+
expect(clipRegionParameter.points[0].x).toBe(20);
174+
expect(clipRegionParameter.points[0].y).toBe(-20);
175+
expect(clipRegionParameter.points[4].x).toBe(20);
176+
expect(clipRegionParameter.points[4].y).toBe(-20);
177+
});
178+
it("getTileUrl, clipRegion_polygon", () => {
179+
const tempOptions = {
180+
clipRegion:L.polygon([[-20, 20], [0, 20], [0, 40], [-20, 40], [-20, 20]], {color: 'red'}),
181+
clipRegionEnabled:true
182+
};
183+
const tiledMapLayerObject = tiledMapLayer(url, tempOptions).addTo(map);
184+
expect(tiledMapLayerObject).not.toBeNull();
185+
const tileUrl = tiledMapLayerObject.getTileUrl(L.point(1, 4));
186+
const clipRegionEnabledValue = getQueryValue(tileUrl,'clipRegionEnabled');
187+
expect(clipRegionEnabledValue).toBeTruthy();
188+
const clipRegionValue = getQueryValue(tileUrl,'clipRegion');
189+
expect(clipRegionValue).not.toBeNull;
190+
const clipRegionParameter = JSON.parse(decodeURIComponent(clipRegionValue));
191+
expect(clipRegionParameter.parts[0]).toBe(5);
192+
expect(clipRegionParameter.points.length).toBe(5);
193+
expect(clipRegionParameter.points[0].x).toBe(20);
194+
expect(clipRegionParameter.points[0].y).toBe(-20);
195+
expect(clipRegionParameter.points[4].x).toBe(20);
196+
expect(clipRegionParameter.points[4].y).toBe(-20);
197+
});
158198

159199
});

0 commit comments

Comments
 (0)