public ZoomLevel GetNearestZoomLevel(double resolution) { InternalChecker.CheckArrayIsEmptyOrNull(zoomLevels, "ZoomLevels"); var orderedZoomLevels = zoomLevels.OrderByDescending(z => z.Resolution); // smaller than smallest if (orderedZoomLevels.Last().Resolution > resolution) { return(orderedZoomLevels.Last()); } // bigger than biggest if (orderedZoomLevels.First().Resolution < resolution) { return(orderedZoomLevels.First()); } ZoomLevel result = null; double resultDistance = double.MaxValue; foreach (var current in orderedZoomLevels) { double distance = Math.Abs(current.Resolution - resolution); if (distance < resultDistance) { result = current; resultDistance = distance; } } return(result); }
public Pixel GetDrawingPosition(int viewPortWidth, int viewPortHeight) { InternalChecker.CheckParameterIsNull(ZoomLevel, "ZoomLevel"); double pixelX = Extent.MinX / ZoomLevel.Resolution; double pixelY = Extent.MaxX / ZoomLevel.Resolution; return(new Pixel((float)pixelX, (float)pixelY)); }
private ZoomLevel GetZoomLevel() { InternalChecker.CheckParameterIsNull(TileSchema, "Schema"); double resolutionX = Extent.Width / Width; double resolutionY = Extent.Height / Height; double resolution = Math.Max(resolutionX, resolutionY); return(TileSchema.GetNearestZoomLevel(resolution)); }