コード例 #1
0
        /// <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);
        }
    }
}
コード例 #2
0
ファイル: Tile.cs プロジェクト: erisonliang/GTiff2Tiles
        /// <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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
ファイル: Tile.cs プロジェクト: erisonliang/GTiff2Tiles
        /// <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);
        }
コード例 #5
0
ファイル: EnumsTests.cs プロジェクト: wangpei421/GTiff2Tiles
 public void GetTileExtensions() => Assert.DoesNotThrow(() =>
 {
     TileExtension e = TileExtension.Png;
     e = TileExtension.Jpg;
     e = TileExtension.Webp;
 });