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