Skip to content

Commit 94e5466

Browse files
committed
【fix】修复leaflet tiandituCRS上叠加grapiclayer偏移的问题 review by luoxiao
1 parent 12a340f commit 94e5466

File tree

2 files changed

+50
-3
lines changed

2 files changed

+50
-3
lines changed

src/leaflet/overlay/GraphicLayer.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ const defaultProps = {
1919
strokeWidth: 1,
2020
outline: false
2121
};
22+
const BASE_RESOLUTIONS = {
23+
'EPSG:4326': 360.0 / 256,
24+
'EPSG:3857': (20037508.34279 * 2) / 256
25+
};
26+
const DEFAULT_ZOOM_OFFSET = {
27+
'EPSG:4326': 1,
28+
'EPSG:3857': 0
29+
};
2230

2331
/**
2432
* @class L.supermap.graphicLayer
@@ -275,9 +283,12 @@ export var GraphicLayer = L.Path.extend({
275283
let center = map.getCenter();
276284
let longitude = center.lng;
277285
let latitude = center.lat;
278-
const zoomOffset = this._crs.code === "EPSG:4326"?1:0;
279-
let zoom = map.getZoom()+zoomOffset;
280-
let maxZoom = map.getMaxZoom()+zoomOffset;
286+
let zoomOffset = DEFAULT_ZOOM_OFFSET[this._crs.code] || 0;
287+
if(BASE_RESOLUTIONS[this._crs.code] && this._crs.resolutions && this._crs.resolutions.length > 0 ){
288+
zoomOffset = Math.round(Math.log2(BASE_RESOLUTIONS[this._crs.code]/this._crs.resolutions[0]))
289+
}
290+
let zoom = map.getZoom() + zoomOffset;
291+
let maxZoom = map.getMaxZoom() + zoomOffset;
281292

282293
let mapViewport = {
283294
longitude: longitude,

test/leaflet/overlay/GraphicLayerSpec.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,5 +346,41 @@ describe('leaflet_GraphicLayer', () => {
346346
done();
347347
}, 4000);
348348
});
349+
it('CRS_4326_ICL_1349', (done) => {
350+
let { map, testDiv } = createMap();
351+
map.options.crs = L.CRS.TianDiTu_Mercator;
352+
let layer = graphicLayer(graphics, { render: 'webgl' }).addTo(map);
353+
setTimeout(() => {
354+
expect(layer._crs).toEqual(map.options.crs);
355+
const state = layer.getState();
356+
expect(state.maxZoom).toEqual(map.getMaxZoom()+1);
357+
expect(state.zoom).toEqual(map.getZoom()+1);
358+
const webglRenderLayer = layer._renderer._renderLayer;
359+
expect(webglRenderLayer).not.toBeNull();
360+
expect(webglRenderLayer.props.coordinateSystem).toEqual(window.DeckGL.COORDINATE_SYSTEM.LNGLAT);
361+
expect(webglRenderLayer.props.isGeographicCoordinateSystem).toBeFalse();
362+
map.remove();
363+
window.document.body.removeChild(testDiv);
364+
done();
365+
}, 4000);
366+
});
367+
it('CRS_4326_ICL_1349', (done) => {
368+
let { map, testDiv } = createMap();
369+
map.options.crs = L.CRS.TianDiTu_WGS84;
370+
let layer = graphicLayer(graphics, { render: 'webgl' }).addTo(map);
371+
setTimeout(() => {
372+
expect(layer._crs).toEqual(map.options.crs);
373+
const state = layer.getState();
374+
expect(state.maxZoom).toEqual(map.getMaxZoom()+1);
375+
expect(state.zoom).toEqual(map.getZoom()+1);
376+
const webglRenderLayer = layer._renderer._renderLayer;
377+
expect(webglRenderLayer).not.toBeNull();
378+
expect(webglRenderLayer.props.coordinateSystem).toEqual(window.DeckGL.COORDINATE_SYSTEM.LNGLAT_OFFSETS);
379+
expect(webglRenderLayer.props.isGeographicCoordinateSystem).toBeTrue();
380+
map.remove();
381+
window.document.body.removeChild(testDiv);
382+
done();
383+
}, 4000);
384+
});
349385
});
350386
});

0 commit comments

Comments
 (0)