示例#1
0
        internal Rect GetTileBounds(double tileGridScale, Point tileGridTopLeft, Size viewportSize)
        {
            var scale  = tileGridScale / ViewportScale;
            var matrix = new Matrix(scale, 0d, 0d, scale, 0d, 0d);

            matrix.Rotate(-ViewportRotation);

            // viewport origin in map coordinates
            //
            var origin = InverseViewportTransform.Transform(new Point());

            // translate origin to tile grid origin in pixels
            //
            matrix.Translate(
                tileGridScale * (origin.X - tileGridTopLeft.X),
                tileGridScale * (tileGridTopLeft.Y - origin.Y));

            // transforms viewport bounds to tile pixel bounds
            //
            var transform = new MatrixTransform {
                Matrix = matrix
            };

            return(transform.TransformBounds(new Rect(0d, 0d, viewportSize.Width, viewportSize.Height)));
        }
示例#2
0
        /// <summary>
        /// Transforms a Rect in viewport coordinates to a BoundingBox in geographic coordinates.
        /// </summary>
        public BoundingBox ViewportRectToBoundingBox(Rect rect)
        {
            var p1 = InverseViewportTransform.Transform(new Point(rect.X, rect.Y));
            var p2 = InverseViewportTransform.Transform(new Point(rect.X, rect.Y + rect.Height));
            var p3 = InverseViewportTransform.Transform(new Point(rect.X + rect.Width, rect.Y));
            var p4 = InverseViewportTransform.Transform(new Point(rect.X + rect.Width, rect.Y + rect.Height));

            rect.X      = Math.Min(p1.X, Math.Min(p2.X, Math.Min(p3.X, p4.X)));
            rect.Y      = Math.Min(p1.Y, Math.Min(p2.Y, Math.Min(p3.Y, p4.Y)));
            rect.Width  = Math.Max(p1.X, Math.Max(p2.X, Math.Max(p3.X, p4.X))) - rect.X;
            rect.Height = Math.Max(p1.Y, Math.Max(p2.Y, Math.Max(p3.Y, p4.Y))) - rect.Y;

            return(RectToBoundingBox(rect));
        }
示例#3
0
 /// <summary>
 /// Transforms a Point in viewport coordinates to a Location in geographic coordinates.
 /// </summary>
 public Location ViewportPointToLocation(Point point)
 {
     return(PointToLocation(InverseViewportTransform.Transform(point)));
 }