Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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));
        }