#pragma once #include "IPrepareRasterOverlayRendererResources.h" #include "Library.h" #include "RasterOverlayTileProvider.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace CesiumRasterOverlays { /** * @brief Options for URL template overlays. */ struct UrlTemplateRasterOverlayOptions { /** * @brief A credit for the data source, which is displayed on the canvas. */ std::optional credit; /** * @brief The {@link CesiumGeospatial::Projection} that is used. */ std::optional projection; /** * @brief The {@link CesiumGeometry::QuadtreeTilingScheme} specifying how * the ellipsoidal surface is broken into tiles. */ std::optional tilingScheme; /** * @brief The minimum level-of-detail supported by the imagery provider. * * Take care when specifying this that the number of tiles at the minimum * level is small, such as four or less. A larger number is likely to * result in rendering problems. */ uint32_t minimumLevel = 0; /** * @brief The maximum level-of-detail supported by the imagery provider. */ uint32_t maximumLevel = 25; /** * @brief Pixel width of image tiles. */ uint32_t tileWidth = 256; /** * @brief Pixel height of image tiles. */ uint32_t tileHeight = 256; /** * @brief The {@link CesiumGeometry::Rectangle}, in radians, covered by the * image. */ std::optional coverageRectangle; }; /** * @brief A {@link RasterOverlay} accessing images from a templated URL. */ class CESIUMRASTEROVERLAYS_API UrlTemplateRasterOverlay final : public RasterOverlay { public: /** * @brief Creates a new instance. * * The following template parameters are supported in `url`: * - `{x}` - The tile X coordinate in the tiling scheme, where 0 is the westernmost tile. * - `{y}` - The tile Y coordinate in the tiling scheme, where 0 is the nothernmost tile. * - `{z}` - The level of the tile in the tiling scheme, where 0 is the root of the quadtree pyramid. * - `{reverseX}` - The tile X coordinate in the tiling scheme, where 0 is the easternmost tile. * - `{reverseY}` - The tile Y coordinate in the tiling scheme, where 0 is the southernmost tile. * - `{reverseZ}` - The tile Z coordinate in the tiling scheme, where 0 is equivalent to `urlTemplateOptions.maximumLevel`. * - `{westDegrees}` - The western edge of the tile in geodetic degrees. * - `{southDegrees}` - The southern edge of the tile in geodetic degrees. * - `{eastDegrees}` - The eastern edge of the tile in geodetic degrees. * - `{northDegrees}` - The northern edge of the tile in geodetic degrees. * - `{minimumX}` - The minimum X coordinate of the tile's projected coordinates. * - `{minimumY}` - The minimum Y coordinate of the tile's projected coordinates. * - `{maximumX}` - The maximum X coordinate of the tile's projected coordinates. * - `{maximumY}` - The maximum Y coordinate of the tile's projected coordinates. * - `{width}` - The width of each tile in pixels. * - `{height}` - The height of each tile in pixels. * * @param name The user-given name of this overlay layer. * @param url The URL with template parameters. * @param headers The headers. This is a list of pairs of strings of the * form (Key,Value) that will be inserted as request headers internally. * @param urlTemplateOptions The {@link UrlTemplateRasterOverlayOptions}. * @param overlayOptions The {@link RasterOverlayOptions} for this instance. */ UrlTemplateRasterOverlay( const std::string& name, const std::string& url, const std::vector& headers = {}, const UrlTemplateRasterOverlayOptions& urlTemplateOptions = {}, const RasterOverlayOptions& overlayOptions = {}) : RasterOverlay(name, overlayOptions), _url(url), _headers(headers), _options(urlTemplateOptions) {} virtual CesiumAsync::Future createTileProvider( const CreateRasterOverlayTileProviderParameters& parameters) const override; private: std::string _url; std::vector _headers; UrlTemplateRasterOverlayOptions _options; }; } // namespace CesiumRasterOverlays