/// <summary> /// Example of method to use <see cref="IImage"/> interface for cropping the tiles. /// </summary> /// <param name="inputFileInfo">Input GeoTIFF.</param> /// <param name="outputDirectoryInfo">Directory for cropped tiles.</param> /// <param name="minZ">Minimum cropped zoom.</param> /// <param name="maxZ">Maximum cropped zoom.</param> /// <param name="tileType">Type of tiles to create.</param> /// <param name="tmsCompatible">Are tiles compatible with tms?</param> /// <param name="tileExtension">Extension of ready tiles.</param> /// <param name="progress">Progress.</param> /// <param name="threadsCount">Threads count.</param> /// <returns></returns> public static async ValueTask GenerateTilesAsync(FileInfo inputFileInfo, DirectoryInfo outputDirectoryInfo, int minZ, int maxZ, TileType tileType, bool tmsCompatible = true, TileExtension tileExtension = TileExtension.Png, IProgress <double> progress = null, int threadsCount = 5) { //This is example. //TODO: Better exception-handling await using IImage image = tileType switch { TileType.Raster => new Raster(inputFileInfo), //TileType.Terrain => new Image(inputFileInfo), _ => throw new Exception() }; string tileExtensionString = tileExtension switch { TileExtension.Png => Extensions.Png, TileExtension.Jpg => Extensions.Jpg, TileExtension.Webp => Extensions.Webp, _ => throw new ArgumentOutOfRangeException(nameof(tileExtension), tileExtension, null) }; const bool isExperimental = false; //Generate tiles. await image.GenerateTilesAsync(outputDirectoryInfo, minZ, maxZ, tmsCompatible, tileExtensionString, progress, threadsCount, isExperimental); } } }
/// <summary> /// Creates new <see cref="Tile"/> /// </summary> /// <param name="number"><see cref="Number"/></param> /// <param name="coordinateSystem">Desired coordinate system</param> /// <param name="size"><see cref="Size"/>; /// <remarks>should be a square, e.g. 256x256; /// <para/>If set to <see langword="null"/>, uses <see cref="DefaultSize"/> /// as value</remarks></param> /// <param name="bytes"><see cref="Bytes"/></param> /// <param name="extension"><see cref="Extension"/></param> /// <param name="tmsCompatible">Is tms compatible?</param> /// <exception cref="ArgumentException"/> protected Tile(Number number, CoordinateSystem coordinateSystem, Size size = null, IEnumerable <byte> bytes = null, TileExtension extension = TileExtension.Png, bool tmsCompatible = false) { (Number, Bytes, Extension, TmsCompatible, Size) = (number, bytes, extension, tmsCompatible, size ?? DefaultSize); if (!Size.IsSquare) { throw new ArgumentException(Strings.NotSqare, nameof(size)); } (MinCoordinate, MaxCoordinate) = Number.ToGeoCoordinates(coordinateSystem, Size, tmsCompatible); }
/// <inheritdoc cref="Tile(GeoCoordinate,GeoCoordinate,int,Size,IEnumerable{byte},TileExtension,bool)"/> /// <param name="minCoordinate"></param> /// <param name="maxCoordinate"></param> /// <param name="zoom"></param> /// <param name="size"></param> /// <param name="bytes"></param> /// <param name="extension"></param> /// <param name="tmsCompatible"></param> /// <param name="bandsCount"><see cref="BandsCount"/> /// <remarks><para/>Must be in range (0, 4]; /// <para/><see cref="DefaultBandsCount"/> by default</remarks></param> /// <param name="interpolation"><see cref="Interpolation"/> /// <remarks><para/><see cref="Enums.Interpolation.Lanczos3"/> by default</remarks></param> /// <exception cref="ArgumentOutOfRangeException"/> public RasterTile(GeoCoordinate minCoordinate, GeoCoordinate maxCoordinate, int zoom, Size size = null, IEnumerable <byte> bytes = null, TileExtension extension = TileExtension.Png, bool tmsCompatible = false, int bandsCount = DefaultBandsCount, Interpolation interpolation = Interpolation.Lanczos3) : base(minCoordinate, maxCoordinate, zoom, size, bytes, extension, tmsCompatible) { #region Preconditions checks if (bandsCount <= 0 || bandsCount > 4) { throw new ArgumentOutOfRangeException(nameof(bandsCount)); } #endregion (BandsCount, Interpolation) = (bandsCount, interpolation); }
/// <summary> /// Creates new <see cref="Tile"/> from <see cref="GeoCoordinate"/> values /// </summary> /// <param name="minCoordinate">Minimal <see cref="GeoCoordinate"/></param> /// <param name="maxCoordinate">Maximal <see cref="GeoCoordinate"/></param> /// <param name="zoom">Zoom</param> /// <param name="size"><see cref="Size"/>; /// <remarks>should be a square, e.g. 256x256; /// <para/>If set to <see langword="null"/>, uses <see cref="DefaultSize"/> /// as value</remarks></param> /// <param name="bytes"><see cref="Bytes"/></param> /// <param name="extension"><see cref="Extension"/></param> /// <param name="tmsCompatible">Is tms compatible?</param> /// <exception cref="ArgumentException"/> protected Tile(GeoCoordinate minCoordinate, GeoCoordinate maxCoordinate, int zoom, Size size = null, IEnumerable <byte> bytes = null, TileExtension extension = TileExtension.Png, bool tmsCompatible = false) { Size = size ?? DefaultSize; if (!Size.IsSquare) { throw new ArgumentException(Strings.NotSqare, nameof(size)); } (Number minNumber, Number maxNumber) = GeoCoordinate.GetNumbers(minCoordinate, maxCoordinate, zoom, Size, tmsCompatible); if (!minNumber.Equals(maxNumber)) { throw new ArgumentException(Strings.CoordinatesDoesntFit); } (Number, Bytes, Extension, TmsCompatible) = (minNumber, bytes, extension, tmsCompatible); (MinCoordinate, MaxCoordinate) = (minCoordinate, maxCoordinate); }
public void GetTileExtensions() => Assert.DoesNotThrow(() => { TileExtension e = TileExtension.Png; e = TileExtension.Jpg; e = TileExtension.Webp; });