From 6cc6a43b92b8561161c6db28dd33e26345b8aaea Mon Sep 17 00:00:00 2001 From: Ahmad Ayubi Date: Tue, 14 Dec 2021 12:41:27 -0500 Subject: [PATCH 1/3] ZoomToLayer fix --- src/layer.js | 70 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 23 deletions(-) diff --git a/src/layer.js b/src/layer.js index 05f354f0e..3a7f31b82 100644 --- a/src/layer.js +++ b/src/layer.js @@ -321,34 +321,58 @@ export class MapLayer extends HTMLElement { bR = this.extent.bottomRight.pcrs, layerBounds = L.bounds(L.point(tL.horizontal, tL.vertical), L.point(bR.horizontal, bR.vertical)), center = map.options.crs.unproject(layerBounds.getCenter(true)), - currentZoom = map.getZoom(); + newZoom = map.getZoom(); - map.setView(center, currentZoom, {animate:false}); - let mapBounds = M.pixelToPCRSBounds( - map.getPixelBounds(), - map.getZoom(), - map.options.projection); + let maxZoom = this.extent.zoom.maxZoom, minZoom = this.extent.zoom.minZoom; - //fits the bounds to the map view - if(mapBounds.contains(layerBounds)){ - while(mapBounds.contains(layerBounds) && (currentZoom + 1) <= this.extent.zoom.maxZoom){ - currentZoom++; - map.setView(center, currentZoom, {animate:false}); - mapBounds = M.pixelToPCRSBounds( - map.getPixelBounds(), - map.getZoom(), - map.options.projection); + let scale = map.options.crs.scale(newZoom), + mapCenterTCRS = map.options.crs.transformation.transform(layerBounds.getCenter(true), scale); + + let mapHalf = map.getSize().divideBy(2), + mapTlNew = mapCenterTCRS.subtract(mapHalf).round(), + mapBrNew = mapCenterTCRS.add(mapHalf).round(); + + let mapTlPCRSNew = M.pixelToPCRSPoint(mapTlNew, newZoom, map.options.projection), + mapBrPCRSNew = M.pixelToPCRSPoint(mapBrNew, newZoom, map.options.projection); + + let mapPCRS = L.bounds(mapTlPCRSNew, mapBrPCRSNew); + + if(mapPCRS.contains(layerBounds)){ + + } else { + + } + + if(mapPCRS.contains(layerBounds)){ + while(mapPCRS.contains(layerBounds) && (newZoom + 1) <= maxZoom){ + newZoom++; + + scale = map.options.crs.scale(newZoom); + mapCenterTCRS = map.options.crs.transformation.transform(layerBounds.getCenter(true), scale); + + mapTlNew = mapCenterTCRS.subtract(viewHalf).round(); + mapBrNew = mapCenterTCRS.add(viewHalf).round(); + mapTlPCRSNew = M.pixelToPCRSPoint(mapTlNew, newZoom, map.options.projection); + mapBrPCRSNew = M.pixelToPCRSPoint(mapBrNew, newZoom, map.options.projection); + + mapPCRS = L.bounds(mapTlPCRSNew, mapBrPCRSNew); } - if(currentZoom - 1 >= 0) map.flyTo(center, (currentZoom - 1)); + if(newZoom - 1 >= 0) newZoom--; } else { - while(!(mapBounds.contains(layerBounds)) && (currentZoom - 1) >= this.extent.zoom.minZoom){ - currentZoom--; - map.setView(center, currentZoom, {animate:false}); - mapBounds = M.pixelToPCRSBounds( - map.getPixelBounds(), - map.getZoom(), - map.options.projection); + while(!(mapPCRS.contains(layerBounds)) && (newZoom - 1) >= minZoom){ + newZoom--; + + scale = map.options.crs.scale(newZoom); + mapCenterTCRS = map.options.crs.transformation.transform(layerBounds.getCenter(true), scale); + + mapTlNew = mapCenterTCRS.subtract(viewHalf).round(); + mapBrNew = mapCenterTCRS.add(viewHalf).round(); + mapTlPCRSNew = M.pixelToPCRSPoint(mapTlNew, newZoom, map.options.projection); + mapBrPCRSNew = M.pixelToPCRSPoint(mapBrNew, newZoom, map.options.projection); + + mapPCRS = L.bounds(mapTlPCRSNew, mapBrPCRSNew); } } + map.flyTo(center, newZoom); } } From 337d7872111109389dbd61e16a49560d829f8a9e Mon Sep 17 00:00:00 2001 From: Ahmad Ayubi Date: Tue, 14 Dec 2021 12:58:17 -0500 Subject: [PATCH 2/3] Remove duplicate code --- src/layer.js | 44 +++++++++++++------------------------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/src/layer.js b/src/layer.js index 3a7f31b82..f082c4971 100644 --- a/src/layer.js +++ b/src/layer.js @@ -337,42 +337,24 @@ export class MapLayer extends HTMLElement { let mapPCRS = L.bounds(mapTlPCRSNew, mapBrPCRSNew); - if(mapPCRS.contains(layerBounds)){ + let zOffset = mapPCRS.contains(layerBounds) ? 1 : -1; - } else { - - } - - if(mapPCRS.contains(layerBounds)){ - while(mapPCRS.contains(layerBounds) && (newZoom + 1) <= maxZoom){ - newZoom++; - - scale = map.options.crs.scale(newZoom); - mapCenterTCRS = map.options.crs.transformation.transform(layerBounds.getCenter(true), scale); - - mapTlNew = mapCenterTCRS.subtract(viewHalf).round(); - mapBrNew = mapCenterTCRS.add(viewHalf).round(); - mapTlPCRSNew = M.pixelToPCRSPoint(mapTlNew, newZoom, map.options.projection); - mapBrPCRSNew = M.pixelToPCRSPoint(mapBrNew, newZoom, map.options.projection); - - mapPCRS = L.bounds(mapTlPCRSNew, mapBrPCRSNew); - } - if(newZoom - 1 >= 0) newZoom--; - } else { - while(!(mapPCRS.contains(layerBounds)) && (newZoom - 1) >= minZoom){ - newZoom--; + while((zOffset === -1 && !(mapPCRS.contains(layerBounds)) && (newZoom - 1) >= minZoom) || + (zOffset === 1 && mapPCRS.contains(layerBounds) && (newZoom + 1) <= maxZoom)) { + newZoom += zOffset; - scale = map.options.crs.scale(newZoom); - mapCenterTCRS = map.options.crs.transformation.transform(layerBounds.getCenter(true), scale); + scale = map.options.crs.scale(newZoom); + mapCenterTCRS = map.options.crs.transformation.transform(layerBounds.getCenter(true), scale); - mapTlNew = mapCenterTCRS.subtract(viewHalf).round(); - mapBrNew = mapCenterTCRS.add(viewHalf).round(); - mapTlPCRSNew = M.pixelToPCRSPoint(mapTlNew, newZoom, map.options.projection); - mapBrPCRSNew = M.pixelToPCRSPoint(mapBrNew, newZoom, map.options.projection); + mapTlNew = mapCenterTCRS.subtract(mapHalf).round(); + mapBrNew = mapCenterTCRS.add(mapHalf).round(); + mapTlPCRSNew = M.pixelToPCRSPoint(mapTlNew, newZoom, map.options.projection); + mapBrPCRSNew = M.pixelToPCRSPoint(mapBrNew, newZoom, map.options.projection); - mapPCRS = L.bounds(mapTlPCRSNew, mapBrPCRSNew); - } + mapPCRS = L.bounds(mapTlPCRSNew, mapBrPCRSNew); } + if(zOffset === 1 && newZoom - 1 >= 0) newZoom--; + map.flyTo(center, newZoom); } } From 1575a10188bf8de8a64b0ce948381570c86120bc Mon Sep 17 00:00:00 2001 From: Ahmad Ayubi Date: Tue, 14 Dec 2021 15:14:15 -0500 Subject: [PATCH 3/3] Replace flyTo with setView, removing animation --- src/layer.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/layer.js b/src/layer.js index f082c4971..8abacba4f 100644 --- a/src/layer.js +++ b/src/layer.js @@ -354,7 +354,6 @@ export class MapLayer extends HTMLElement { mapPCRS = L.bounds(mapTlPCRSNew, mapBrPCRSNew); } if(zOffset === 1 && newZoom - 1 >= 0) newZoom--; - - map.flyTo(center, newZoom); + map.setView(center, newZoom, {animate: false}); } }