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