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)
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