Пример #1
0
        public Dictionary <Corner, LongLat> GetRotatedBoxCornerLongLats()
        {
            var rotation = -Rotation;

            var corners = new Dictionary <Corner, LongLat>();

            corners[Corner.NorthEast] = new LongLat(East, North);
            corners[Corner.NorthWest] = new LongLat(West, North);
            corners[Corner.SouthWest] = new LongLat(West, South);
            corners[Corner.SouthEast] = new LongLat(East, South);

            var projectionOrigin = new LongLat((East + West) / 2, (North + South) / 2);

            var projectedMapCenter = projectionOrigin.Project(projectionOrigin);

            var projectedCorners = new Dictionary <Corner, PointD>();

            projectedCorners[Corner.NorthEast] = corners[Corner.NorthEast].Project(projectionOrigin);
            projectedCorners[Corner.NorthWest] = corners[Corner.NorthWest].Project(projectionOrigin);
            projectedCorners[Corner.SouthWest] = corners[Corner.SouthWest].Project(projectionOrigin);
            projectedCorners[Corner.SouthEast] = corners[Corner.SouthEast].Project(projectionOrigin);

            var projectedRotatedCorners = new Dictionary <Corner, PointD>();

            projectedRotatedCorners[Corner.NorthEast] = LinearAlgebraUtil.Rotate(projectedCorners[Corner.NorthEast], projectedMapCenter, rotation);
            projectedRotatedCorners[Corner.NorthWest] = LinearAlgebraUtil.Rotate(projectedCorners[Corner.NorthWest], projectedMapCenter, rotation);
            projectedRotatedCorners[Corner.SouthWest] = LinearAlgebraUtil.Rotate(projectedCorners[Corner.SouthWest], projectedMapCenter, rotation);
            projectedRotatedCorners[Corner.SouthEast] = LinearAlgebraUtil.Rotate(projectedCorners[Corner.SouthEast], projectedMapCenter, rotation);

            var rotatedCorners = new Dictionary <Corner, LongLat>();

            rotatedCorners[Corner.NorthWest] = LongLat.Deproject(projectedRotatedCorners[Corner.NorthWest], projectionOrigin);
            rotatedCorners[Corner.NorthEast] = LongLat.Deproject(projectedRotatedCorners[Corner.NorthEast], projectionOrigin);
            rotatedCorners[Corner.SouthWest] = LongLat.Deproject(projectedRotatedCorners[Corner.SouthWest], projectionOrigin);
            rotatedCorners[Corner.SouthEast] = LongLat.Deproject(projectedRotatedCorners[Corner.SouthEast], projectionOrigin);
            return(rotatedCorners);
        }
Пример #2
0
        /// <summary>
        /// Converts a map image pixel coordinate to a longitude and latitude coordinate
        /// </summary>
        /// <param name="mapImagePosition">Map pixel coordinate, referring to unzoomed map without any borders and image header</param>
        /// <returns></returns>
        public LongLat GetLongLatForMapImagePosition(PointD mapImagePosition, GeneralMatrix averageTransformationMatrixInverse)
        {
            var projectedPosition = LinearAlgebraUtil.Transform(mapImagePosition, averageTransformationMatrixInverse);

            return(LongLat.Deproject(projectedPosition, ProjectionOrigin));
        }