internal static double GetClosestScale(double scale, ZoomLevelSet zoomLevelSet)
        {
            double closestScale     = double.NaN;
            double closestScaleDiff = Double.MaxValue;

            foreach (ZoomLevel item in zoomLevelSet.GetZoomLevels())
            {
                double currentScaleDiff = Math.Abs(item.Scale - scale);
                if (currentScaleDiff < closestScaleDiff)
                {
                    closestScaleDiff = currentScaleDiff;
                    closestScale     = item.Scale;
                }
            }

            return(closestScale);
        }
        internal static int GetSnappedZoomLevelIndex(double scale, ZoomLevelSet zoomLevelSet)
        {
            int zoomLevel = -1;

            foreach (ZoomLevel item in zoomLevelSet.GetZoomLevels())
            {
                if (item.Scale >= scale || Math.Abs(item.Scale - scale) < 0.1)
                {
                    zoomLevel++;
                }
                else
                {
                    break;
                }
            }

            return(zoomLevel == -1 ? 0 : zoomLevel);
        }
Exemple #3
0
        public static void AddZoomLevels(this ZoomLevelSet zoomLevelSet, bool addExtraZoomLevels = true)
        {
            var zoomLevels = zoomLevelSet.GetZoomLevels();

            if (zoomLevels.Count == 20)
            {
                foreach (var item in zoomLevels)
                {
                    item.Scale = Math.Round(item.Scale, 6);
                    zoomLevelSet.CustomZoomLevels.Add(item);
                }
                if (addExtraZoomLevels)
                {
                    for (int i = 0; i < 5; i++)
                    {
                        var currentScale = Math.Round(zoomLevelSet.CustomZoomLevels.LastOrDefault().Scale * 0.5, 6);
                        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(currentScale));
                    }
                }
            }
        }