Search in sources :

Example 1 with TileMatrixSetLimits

use of de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetLimits in project ldproxy by interactive-instruments.

the class TileCacheImpl method deleteTilesMbtiles.

private void deleteTilesMbtiles(OgcApi api, Optional<String> collectionId, TileMatrixSet tileMatrixSet, MinMax levels, BoundingBox bbox) throws SQLException, IOException {
    OgcApiDataV2 apiData = api.getData();
    MbtilesTileset tileset = getOrInitTileset(api, collectionId, tileMatrixSet);
    List<TileMatrixSetLimits> limitsList = getLimits(apiData, tileMatrixSet, levels, collectionId, bbox);
    for (TileMatrixSetLimits limits : limitsList) {
        if (LOGGER.isTraceEnabled()) {
            LOGGER.trace("Deleting tiles from Mbtiles cache: API {}, collection {}, tiles {}/{}/{}-{}/{}-{}, TMS rows {}-{}", apiData.getId(), collectionId.orElse("all"), tileMatrixSet.getId(), limits.getTileMatrix(), limits.getMinTileRow(), limits.getMaxTileRow(), limits.getMinTileCol(), limits.getMaxTileCol(), tileMatrixSet.getTmsRow(Integer.parseInt(limits.getTileMatrix()), limits.getMaxTileRow()), tileMatrixSet.getTmsRow(Integer.parseInt(limits.getTileMatrix()), limits.getMinTileRow()));
        }
        tileset.deleteTiles(tileMatrixSet, limits);
    }
}
Also used : OgcApiDataV2(de.ii.ogcapi.foundation.domain.OgcApiDataV2) MbtilesTileset(de.ii.ogcapi.tiles.app.mbtiles.MbtilesTileset) TileMatrixSetLimits(de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetLimits)

Example 2 with TileMatrixSetLimits

use of de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetLimits in project ldproxy by interactive-instruments.

the class TileCacheImpl method shouldDeleteTileFile.

@SuppressWarnings("UnstableApiUsage")
private static boolean shouldDeleteTileFile(Path tilePath, Optional<String> collectionId, Map<String, Map<String, TileMatrixSetLimits>> tmsLimits, List<String> extensions) {
    if (tilePath.getNameCount() < 5) {
        return false;
    }
    String collection = tilePath.getName(0).toString();
    if (!Objects.equals(collection, "__all__") && collectionId.isPresent() && !Objects.equals(collectionId.get(), collection)) {
        return false;
    }
    String tmsId = tilePath.getName(1).toString();
    if (!tmsLimits.containsKey(tmsId)) {
        return false;
    }
    Map<String, TileMatrixSetLimits> levelLimits = tmsLimits.get(tmsId);
    String level = tilePath.getName(2).toString();
    if (!levelLimits.containsKey(level)) {
        return false;
    }
    TileMatrixSetLimits limits = levelLimits.get(level);
    int row = Integer.parseInt(tilePath.getName(3).toString());
    if (row < limits.getMinTileRow() || row > limits.getMaxTileRow()) {
        return false;
    }
    String file = tilePath.getName(4).toString();
    int col = Integer.parseInt(com.google.common.io.Files.getNameWithoutExtension(file));
    String extension = com.google.common.io.Files.getFileExtension(file);
    if (!extensions.contains(extension)) {
        return false;
    }
    if (col < limits.getMinTileCol() || col > limits.getMaxTileCol()) {
        return false;
    }
    return true;
}
Also used : TileMatrixSetLimits(de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetLimits)

Example 3 with TileMatrixSetLimits

use of de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetLimits in project ldproxy by interactive-instruments.

the class AbstractEndpointTileSingleCollection method getTile.

protected Response getTile(OgcApi api, ApiRequestContext requestContext, UriInfo uriInfo, String definitionPath, String collectionId, String tileMatrixSetId, String tileMatrix, String tileRow, String tileCol, TileProvider tileProvider) throws CrsTransformationException, IOException, NotFoundException {
    OgcApiDataV2 apiData = api.getData();
    Map<String, String> queryParams = toFlatMap(uriInfo.getQueryParameters());
    FeatureTypeConfigurationOgcApi featureType = apiData.getCollections().get(collectionId);
    TilesConfiguration tilesConfiguration = featureType.getExtension(TilesConfiguration.class).orElseThrow();
    checkPathParameter(extensionRegistry, apiData, definitionPath, "collectionId", collectionId);
    checkPathParameter(extensionRegistry, apiData, definitionPath, "tileMatrixSetId", tileMatrixSetId);
    checkPathParameter(extensionRegistry, apiData, definitionPath, "tileMatrix", tileMatrix);
    checkPathParameter(extensionRegistry, apiData, definitionPath, "tileRow", tileRow);
    checkPathParameter(extensionRegistry, apiData, definitionPath, "tileCol", tileCol);
    final List<OgcApiQueryParameter> allowedParameters = getQueryParameters(extensionRegistry, apiData, definitionPath, collectionId);
    int row;
    int col;
    int level;
    try {
        level = Integer.parseInt(tileMatrix);
        row = Integer.parseInt(tileRow);
        col = Integer.parseInt(tileCol);
    } catch (NumberFormatException e) {
        throw new ServerErrorException("Could not convert tile coordinates that have been validated to integers", 500);
    }
    MinMax zoomLevels = tilesConfiguration.getZoomLevelsDerived().get(tileMatrixSetId);
    if (zoomLevels.getMax() < level || zoomLevels.getMin() > level)
        throw new NotFoundException("The requested tile is outside the zoom levels for this tile set.");
    TileMatrixSet tileMatrixSet = tileMatrixSetRepository.get(tileMatrixSetId).orElseThrow(() -> new NotFoundException("Unknown tile matrix set: " + tileMatrixSetId));
    TileMatrixSetLimits tileLimits = limitsGenerator.getCollectionTileMatrixSetLimits(api, collectionId, tileMatrixSet, zoomLevels).stream().filter(limits -> limits.getTileMatrix().equals(tileMatrix)).findAny().orElse(null);
    if (tileLimits != null) {
        if (tileLimits.getMaxTileCol() < col || tileLimits.getMinTileCol() > col || tileLimits.getMaxTileRow() < row || tileLimits.getMinTileRow() > row)
            // return 404, if outside the range
            throw new NotFoundException("The requested tile is outside of the limits for this zoom level and tile set.");
    }
    String path = definitionPath.replace("{collectionId}", collectionId).replace("{tileMatrixSetId}", tileMatrixSetId).replace("{tileMatrix}", tileMatrix).replace("{tileRow}", tileRow).replace("{tileCol}", tileCol);
    TileFormatExtension outputFormat = requestContext.getApi().getOutputFormat(TileFormatExtension.class, requestContext.getMediaType(), path, Optional.of(collectionId)).orElseThrow(() -> new NotAcceptableException(MessageFormat.format("The requested media type ''{0}'' is not supported for this resource.", requestContext.getMediaType())));
    Optional<FeatureProvider2> featureProvider = providers.getFeatureProvider(apiData);
    // check, if the cache can be used (no query parameters except f)
    boolean useCache = tileProvider.tilesMayBeCached() && tilesConfiguration.getCache() != TilesConfiguration.TileCacheType.NONE && (queryParams.isEmpty() || (queryParams.size() == 1 && queryParams.containsKey("f")));
    // don't store the tile in the cache if it is outside the range
    MinMax cacheMinMax = tilesConfiguration.getZoomLevelsDerived().get(tileMatrixSetId);
    useCache = useCache && (Objects.isNull(cacheMinMax) || (level <= cacheMinMax.getMax() && level >= cacheMinMax.getMin()));
    Tile tile = new ImmutableTile.Builder().tileMatrixSet(tileMatrixSet).tileLevel(level).tileRow(row).tileCol(col).api(api).apiData(apiData).outputFormat(outputFormat).featureProvider(featureProvider).collectionIds(ImmutableList.of(collectionId)).temporary(!useCache).isDatasetTile(false).build();
    QueryInput queryInput = null;
    // if cache can be used and the tile is cached for the requested format, return the cache
    if (useCache) {
        // get the tile from the cache and return it
        Optional<InputStream> tileStream = Optional.empty();
        try {
            tileStream = cache.getTile(tile);
        } catch (Exception e) {
            LOGGER.warn("Failed to retrieve tile {}/{}/{}/{} for collection '{}' from the cache. Reason: {}", tile.getTileMatrixSet().getId(), tile.getTileLevel(), tile.getTileRow(), tile.getTileCol(), collectionId, e.getMessage());
        }
        if (tileStream.isPresent()) {
            queryInput = new Builder().from(getGenericQueryInput(apiData)).tile(tile).tileContent(tileStream.get()).build();
        }
    }
    // not cached or cache access failed
    if (Objects.isNull(queryInput))
        queryInput = tileProvider.getQueryInput(apiData, requestContext.getUriCustomizer(), queryParams, allowedParameters, getGenericQueryInput(apiData), tile);
    TilesQueriesHandler.Query query = null;
    if (queryInput instanceof TilesQueriesHandler.QueryInputTileMbtilesTile)
        query = TilesQueriesHandler.Query.MBTILES_TILE;
    else if (queryInput instanceof TilesQueriesHandler.QueryInputTileTileServerTile)
        query = TilesQueriesHandler.Query.TILESERVER_TILE;
    else if (queryInput instanceof TilesQueriesHandler.QueryInputTileEmpty)
        query = TilesQueriesHandler.Query.EMPTY_TILE;
    else if (queryInput instanceof TilesQueriesHandler.QueryInputTileStream)
        query = TilesQueriesHandler.Query.TILE_STREAM;
    else if (queryInput instanceof TilesQueriesHandler.QueryInputTileMultiLayer)
        query = TilesQueriesHandler.Query.MULTI_LAYER_TILE;
    else if (queryInput instanceof TilesQueriesHandler.QueryInputTileSingleLayer)
        query = TilesQueriesHandler.Query.SINGLE_LAYER_TILE;
    return queryHandler.handle(query, queryInput, requestContext);
}
Also used : TilesQueriesHandler(de.ii.ogcapi.tiles.domain.TilesQueriesHandler) FeatureProvider2(de.ii.xtraplatform.features.domain.FeatureProvider2) Builder(de.ii.ogcapi.tiles.domain.ImmutableQueryInputTileStream.Builder) TilesConfiguration(de.ii.ogcapi.tiles.domain.TilesConfiguration) NotFoundException(javax.ws.rs.NotFoundException) MinMax(de.ii.ogcapi.tiles.domain.MinMax) FeatureTypeConfigurationOgcApi(de.ii.ogcapi.foundation.domain.FeatureTypeConfigurationOgcApi) QueryInput(de.ii.ogcapi.foundation.domain.QueryInput) TileMatrixSetLimits(de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetLimits) TileMatrixSet(de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSet) TileFormatExtension(de.ii.ogcapi.tiles.domain.TileFormatExtension) InputStream(java.io.InputStream) Tile(de.ii.ogcapi.tiles.domain.Tile) ImmutableTile(de.ii.ogcapi.tiles.domain.ImmutableTile) OgcApiQueryParameter(de.ii.ogcapi.foundation.domain.OgcApiQueryParameter) CrsTransformationException(de.ii.xtraplatform.crs.domain.CrsTransformationException) NotAcceptableException(javax.ws.rs.NotAcceptableException) IOException(java.io.IOException) NotFoundException(javax.ws.rs.NotFoundException) ServerErrorException(javax.ws.rs.ServerErrorException) OgcApiDataV2(de.ii.ogcapi.foundation.domain.OgcApiDataV2) NotAcceptableException(javax.ws.rs.NotAcceptableException) ServerErrorException(javax.ws.rs.ServerErrorException)

Example 4 with TileMatrixSetLimits

use of de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetLimits in project ldproxy by interactive-instruments.

the class TileCacheImpl method deleteTilesFiles.

private void deleteTilesFiles(OgcApiDataV2 apiData, Optional<String> collectionId, Map<String, MinMax> zoomLevels, Map<String, BoundingBox> boundingBoxes) throws IOException {
    List<String> extensions = getTileFormats(apiData, collectionId).stream().map(TileFormatExtension::getExtension).collect(ImmutableList.toImmutableList());
    Map<String, Map<String, TileMatrixSetLimits>> limits = zoomLevels.keySet().stream().map(tmsId -> {
        Map<String, TileMatrixSetLimits> limitsMap = getLimits(apiData, getTileMatrixSetById(tmsId), zoomLevels.get(tmsId), collectionId, boundingBoxes.get(tmsId)).stream().map(l -> new SimpleImmutableEntry<>(l.getTileMatrix(), l)).collect(Collectors.toUnmodifiableMap(Entry::getKey, Entry::getValue));
        return new SimpleImmutableEntry<>(tmsId, limitsMap);
    }).collect(Collectors.toUnmodifiableMap(Entry::getKey, Entry::getValue));
    Path basePath = getTilesStore().resolve(apiData.getId());
    try (Stream<Path> walk = Files.find(basePath, 5, (path, basicFileAttributes) -> basicFileAttributes.isRegularFile() && shouldDeleteTileFile(basePath.relativize(path), collectionId, limits, extensions))) {
        walk.map(Path::toFile).forEach(File::delete);
    }
}
Also used : BufferedInputStream(java.io.BufferedInputStream) LoggerFactory(org.slf4j.LoggerFactory) FileTime(java.nio.file.attribute.FileTime) ImmutableValidationResult(de.ii.xtraplatform.store.domain.entities.ImmutableValidationResult) MbtilesMetadata(de.ii.ogcapi.tiles.app.mbtiles.MbtilesMetadata) MODE(de.ii.xtraplatform.store.domain.entities.ValidationResult.MODE) Locale(java.util.Locale) Map(java.util.Map) TileMatrixSetRepository(de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetRepository) Tile(de.ii.ogcapi.tiles.domain.Tile) ExtensionRegistry(de.ii.ogcapi.foundation.domain.ExtensionRegistry) Path(java.nio.file.Path) FeaturesCoreProviders(de.ii.ogcapi.features.core.domain.FeaturesCoreProviders) OgcApi(de.ii.ogcapi.foundation.domain.OgcApi) Set(java.util.Set) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) List(java.util.List) Stream(java.util.stream.Stream) OgcApiDataV2(de.ii.ogcapi.foundation.domain.OgcApiDataV2) TileMatrixSet(de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSet) CrsTransformerFactory(de.ii.xtraplatform.crs.domain.CrsTransformerFactory) Entry(java.util.Map.Entry) Optional(java.util.Optional) BoundingBox(de.ii.xtraplatform.crs.domain.BoundingBox) MbtilesTileset(de.ii.ogcapi.tiles.app.mbtiles.MbtilesTileset) EntityRegistry(de.ii.xtraplatform.store.domain.entities.EntityRegistry) TileFormatWithQuerySupportExtension(de.ii.ogcapi.tiles.domain.TileFormatWithQuerySupportExtension) TileMatrixSetLimits(de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetLimits) HashMap(java.util.HashMap) SimpleImmutableEntry(java.util.AbstractMap.SimpleImmutableEntry) Singleton(javax.inject.Singleton) TileSet(de.ii.ogcapi.tiles.domain.TileSet) AutoBind(com.github.azahnen.dagger.annotations.AutoBind) TilesConfiguration(de.ii.ogcapi.tiles.domain.TilesConfiguration) MessageFormat(java.text.MessageFormat) Inject(javax.inject.Inject) TileMatrixSetLimitsGenerator(de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetLimitsGenerator) SQLException(java.sql.SQLException) ImmutableList(com.google.common.collect.ImmutableList) ValidationResult(de.ii.xtraplatform.store.domain.entities.ValidationResult) AppContext(de.ii.xtraplatform.base.domain.AppContext) TileCache(de.ii.ogcapi.tiles.domain.TileCache) Logger(org.slf4j.Logger) MinMax(de.ii.ogcapi.tiles.domain.MinMax) Files(java.nio.file.Files) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) ImmutableMbtilesMetadata(de.ii.ogcapi.tiles.app.mbtiles.ImmutableMbtilesMetadata) FileAlreadyExistsException(java.nio.file.FileAlreadyExistsException) File(java.io.File) SchemaInfo(de.ii.ogcapi.features.core.domain.SchemaInfo) TileFormatExtension(de.ii.ogcapi.tiles.domain.TileFormatExtension) CACHE_DIR(de.ii.ogcapi.foundation.domain.FoundationConfiguration.CACHE_DIR) Metadata(de.ii.ogcapi.foundation.domain.Metadata) InputStream(java.io.InputStream) Path(java.nio.file.Path) Entry(java.util.Map.Entry) SimpleImmutableEntry(java.util.AbstractMap.SimpleImmutableEntry) Map(java.util.Map) HashMap(java.util.HashMap) File(java.io.File)

Example 5 with TileMatrixSetLimits

use of de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetLimits in project ldproxy by interactive-instruments.

the class AbstractEndpointTileMultiCollection method getTile.

protected Response getTile(OgcApi api, ApiRequestContext requestContext, UriInfo uriInfo, String definitionPath, String tileMatrixSetId, String tileMatrix, String tileRow, String tileCol, TileProvider tileProvider) throws CrsTransformationException, IOException, NotFoundException {
    OgcApiDataV2 apiData = api.getData();
    Map<String, String> queryParams = toFlatMap(uriInfo.getQueryParameters());
    TilesConfiguration tilesConfiguration = apiData.getExtension(TilesConfiguration.class).orElseThrow();
    checkPathParameter(extensionRegistry, apiData, definitionPath, "tileMatrixSetId", tileMatrixSetId);
    checkPathParameter(extensionRegistry, apiData, definitionPath, "tileMatrix", tileMatrix);
    checkPathParameter(extensionRegistry, apiData, definitionPath, "tileRow", tileRow);
    checkPathParameter(extensionRegistry, apiData, definitionPath, "tileCol", tileCol);
    final List<OgcApiQueryParameter> allowedParameters = getQueryParameters(extensionRegistry, apiData, definitionPath);
    int row;
    int col;
    int level;
    try {
        level = Integer.parseInt(tileMatrix);
        row = Integer.parseInt(tileRow);
        col = Integer.parseInt(tileCol);
    } catch (NumberFormatException e) {
        throw new ServerErrorException("Could not convert tile coordinates that have been validated to integers", 500);
    }
    MinMax zoomLevels = tilesConfiguration.getZoomLevelsDerived().get(tileMatrixSetId);
    if (zoomLevels.getMax() < level || zoomLevels.getMin() > level)
        throw new NotFoundException("The requested tile is outside the zoom levels for this tile set.");
    TileMatrixSet tileMatrixSet = tileMatrixSetRepository.get(tileMatrixSetId).orElseThrow(() -> new NotFoundException("Unknown tile matrix set: " + tileMatrixSetId));
    TileMatrixSetLimits tileLimits = limitsGenerator.getTileMatrixSetLimits(api, tileMatrixSet, zoomLevels).stream().filter(limits -> limits.getTileMatrix().equals(tileMatrix)).findAny().orElse(null);
    if (tileLimits != null) {
        if (tileLimits.getMaxTileCol() < col || tileLimits.getMinTileCol() > col || tileLimits.getMaxTileRow() < row || tileLimits.getMinTileRow() > row)
            // return 404, if outside the range
            throw new NotFoundException("The requested tile is outside of the limits for this zoom level and tile set.");
    }
    String path = definitionPath.replace("{tileMatrixSetId}", tileMatrixSetId).replace("{tileMatrix}", tileMatrix).replace("{tileRow}", tileRow).replace("{tileCol}", tileCol);
    TileFormatExtension outputFormat = requestContext.getApi().getOutputFormat(TileFormatExtension.class, requestContext.getMediaType(), path, Optional.empty()).orElseThrow(() -> new NotAcceptableException(MessageFormat.format("The requested media type ''{0}'' is not supported for this resource.", requestContext.getMediaType())));
    Optional<FeatureProvider2> featureProvider = providers.getFeatureProvider(apiData);
    List<String> collections = queryParams.containsKey("collections") ? Splitter.on(",").splitToList(queryParams.get("collections")) : apiData.getCollections().values().stream().filter(collection -> apiData.isCollectionEnabled(collection.getId())).filter(collection -> {
        Optional<TilesConfiguration> layerConfiguration = collection.getExtension(TilesConfiguration.class);
        if (layerConfiguration.isEmpty() || !layerConfiguration.get().isEnabled() || !layerConfiguration.get().isMultiCollectionEnabled())
            return false;
        MinMax levels = layerConfiguration.get().getZoomLevelsDerived().get(tileMatrixSetId);
        return !Objects.nonNull(levels) || (levels.getMax() >= level && levels.getMin() <= level);
    }).map(FeatureTypeConfiguration::getId).collect(Collectors.toList());
    // check, if the cache can be used (no query parameters except f)
    boolean useCache = tileProvider.tilesMayBeCached() && tilesConfiguration.getCache() != TilesConfiguration.TileCacheType.NONE && (queryParams.isEmpty() || (queryParams.size() == 1 && queryParams.containsKey("f")));
    // don't store the tile in the cache if it is outside the range
    MinMax cacheMinMax = tilesConfiguration.getZoomLevelsDerived().get(tileMatrixSetId);
    useCache = useCache && (Objects.isNull(cacheMinMax) || (level <= cacheMinMax.getMax() && level >= cacheMinMax.getMin()));
    Tile tile = new ImmutableTile.Builder().tileMatrixSet(tileMatrixSet).tileLevel(level).tileRow(row).tileCol(col).api(api).apiData(apiData).outputFormat(outputFormat).featureProvider(featureProvider).collectionIds(collections).temporary(!useCache).isDatasetTile(true).build();
    QueryInput queryInput = null;
    // if cache can be used and the tile is cached for the requested format, return the cache
    if (useCache) {
        // get the tile from the cache and return it
        Optional<InputStream> tileStream = Optional.empty();
        try {
            tileStream = cache.getTile(tile);
        } catch (Exception e) {
            LOGGER.warn("Failed to retrieve multi-collection tile {}/{}/{}/{} from the cache. Reason: {}", tile.getTileMatrixSet().getId(), tile.getTileLevel(), tile.getTileRow(), tile.getTileCol(), e.getMessage());
        }
        if (tileStream.isPresent()) {
            queryInput = new Builder().from(getGenericQueryInput(apiData)).tile(tile).tileContent(tileStream.get()).build();
        }
    }
    // not cached or cache access failed
    if (Objects.isNull(queryInput))
        queryInput = tileProvider.getQueryInput(apiData, requestContext.getUriCustomizer(), queryParams, allowedParameters, getGenericQueryInput(apiData), tile);
    TilesQueriesHandler.Query query = null;
    if (queryInput instanceof TilesQueriesHandler.QueryInputTileMbtilesTile)
        query = TilesQueriesHandler.Query.MBTILES_TILE;
    else if (queryInput instanceof TilesQueriesHandler.QueryInputTileTileServerTile)
        query = TilesQueriesHandler.Query.TILESERVER_TILE;
    else if (queryInput instanceof TilesQueriesHandler.QueryInputTileEmpty)
        query = TilesQueriesHandler.Query.EMPTY_TILE;
    else if (queryInput instanceof TilesQueriesHandler.QueryInputTileStream)
        query = TilesQueriesHandler.Query.TILE_STREAM;
    else if (queryInput instanceof TilesQueriesHandler.QueryInputTileMultiLayer)
        query = TilesQueriesHandler.Query.MULTI_LAYER_TILE;
    else if (queryInput instanceof TilesQueriesHandler.QueryInputTileSingleLayer)
        query = TilesQueriesHandler.Query.SINGLE_LAYER_TILE;
    return queryHandler.handle(query, queryInput, requestContext);
}
Also used : Endpoint(de.ii.ogcapi.foundation.domain.Endpoint) CrsTransformationException(de.ii.xtraplatform.crs.domain.CrsTransformationException) LoggerFactory(org.slf4j.LoggerFactory) EndpointTileMultiCollection(de.ii.ogcapi.tiles.infra.EndpointTileMultiCollection) Map(java.util.Map) TileMatrixSetRepository(de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetRepository) ImmutableOgcApiResourceData(de.ii.ogcapi.collections.domain.ImmutableOgcApiResourceData) Tile(de.ii.ogcapi.tiles.domain.Tile) ExtensionRegistry(de.ii.ogcapi.foundation.domain.ExtensionRegistry) Splitter(com.google.common.base.Splitter) ApiOperation(de.ii.ogcapi.foundation.domain.ApiOperation) ApiRequestContext(de.ii.ogcapi.foundation.domain.ApiRequestContext) FeaturesCoreProviders(de.ii.ogcapi.features.core.domain.FeaturesCoreProviders) OgcApi(de.ii.ogcapi.foundation.domain.OgcApi) HttpMethods(de.ii.ogcapi.foundation.domain.HttpMethods) Collectors(java.util.stream.Collectors) NotFoundException(javax.ws.rs.NotFoundException) ImmutableApiEndpointDefinition(de.ii.ogcapi.foundation.domain.ImmutableApiEndpointDefinition) Objects(java.util.Objects) ApiEndpointDefinition(de.ii.ogcapi.foundation.domain.ApiEndpointDefinition) List(java.util.List) TilesQueriesHandler(de.ii.ogcapi.tiles.domain.TilesQueriesHandler) Response(javax.ws.rs.core.Response) OgcApiDataV2(de.ii.ogcapi.foundation.domain.OgcApiDataV2) TileMatrixSet(de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSet) CrsTransformerFactory(de.ii.xtraplatform.crs.domain.CrsTransformerFactory) TileProvider(de.ii.ogcapi.tiles.domain.TileProvider) Optional(java.util.Optional) FormatExtension(de.ii.ogcapi.foundation.domain.FormatExtension) ImmutableTile(de.ii.ogcapi.tiles.domain.ImmutableTile) UriInfo(javax.ws.rs.core.UriInfo) TileMatrixSetLimits(de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetLimits) ExtensionConfiguration(de.ii.ogcapi.foundation.domain.ExtensionConfiguration) OgcApiPathParameter(de.ii.ogcapi.foundation.domain.OgcApiPathParameter) QueryInput(de.ii.ogcapi.foundation.domain.QueryInput) TilesConfiguration(de.ii.ogcapi.tiles.domain.TilesConfiguration) MessageFormat(java.text.MessageFormat) TileMatrixSetLimitsGenerator(de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetLimitsGenerator) FeatureTypeConfiguration(de.ii.xtraplatform.features.domain.FeatureTypeConfiguration) OgcApiQueryParameter(de.ii.ogcapi.foundation.domain.OgcApiQueryParameter) TileCache(de.ii.ogcapi.tiles.domain.TileCache) NotAcceptableException(javax.ws.rs.NotAcceptableException) Logger(org.slf4j.Logger) MinMax(de.ii.ogcapi.tiles.domain.MinMax) IOException(java.io.IOException) FeatureProvider2(de.ii.xtraplatform.features.domain.FeatureProvider2) StaticTileProviderStore(de.ii.ogcapi.tiles.domain.StaticTileProviderStore) ServerErrorException(javax.ws.rs.ServerErrorException) TileFormatExtension(de.ii.ogcapi.tiles.domain.TileFormatExtension) Builder(de.ii.ogcapi.tiles.domain.ImmutableQueryInputTileStream.Builder) InputStream(java.io.InputStream) TilesQueriesHandler(de.ii.ogcapi.tiles.domain.TilesQueriesHandler) FeatureProvider2(de.ii.xtraplatform.features.domain.FeatureProvider2) Builder(de.ii.ogcapi.tiles.domain.ImmutableQueryInputTileStream.Builder) TilesConfiguration(de.ii.ogcapi.tiles.domain.TilesConfiguration) NotFoundException(javax.ws.rs.NotFoundException) MinMax(de.ii.ogcapi.tiles.domain.MinMax) QueryInput(de.ii.ogcapi.foundation.domain.QueryInput) TileMatrixSetLimits(de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetLimits) TileMatrixSet(de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSet) TileFormatExtension(de.ii.ogcapi.tiles.domain.TileFormatExtension) Optional(java.util.Optional) InputStream(java.io.InputStream) Tile(de.ii.ogcapi.tiles.domain.Tile) ImmutableTile(de.ii.ogcapi.tiles.domain.ImmutableTile) OgcApiQueryParameter(de.ii.ogcapi.foundation.domain.OgcApiQueryParameter) Endpoint(de.ii.ogcapi.foundation.domain.Endpoint) CrsTransformationException(de.ii.xtraplatform.crs.domain.CrsTransformationException) NotFoundException(javax.ws.rs.NotFoundException) NotAcceptableException(javax.ws.rs.NotAcceptableException) IOException(java.io.IOException) ServerErrorException(javax.ws.rs.ServerErrorException) OgcApiDataV2(de.ii.ogcapi.foundation.domain.OgcApiDataV2) NotAcceptableException(javax.ws.rs.NotAcceptableException) FeatureTypeConfiguration(de.ii.xtraplatform.features.domain.FeatureTypeConfiguration) ServerErrorException(javax.ws.rs.ServerErrorException)

Aggregations

TileMatrixSetLimits (de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSetLimits)6 OgcApiDataV2 (de.ii.ogcapi.foundation.domain.OgcApiDataV2)4 MinMax (de.ii.ogcapi.tiles.domain.MinMax)4 TileMatrixSet (de.ii.ogcapi.tiles.domain.tileMatrixSet.TileMatrixSet)4 Tile (de.ii.ogcapi.tiles.domain.Tile)3 TileFormatExtension (de.ii.ogcapi.tiles.domain.TileFormatExtension)3 TilesConfiguration (de.ii.ogcapi.tiles.domain.TilesConfiguration)3 IOException (java.io.IOException)3 InputStream (java.io.InputStream)3 Map (java.util.Map)3 FeaturesCoreProviders (de.ii.ogcapi.features.core.domain.FeaturesCoreProviders)2 ExtensionRegistry (de.ii.ogcapi.foundation.domain.ExtensionRegistry)2 OgcApi (de.ii.ogcapi.foundation.domain.OgcApi)2 OgcApiQueryParameter (de.ii.ogcapi.foundation.domain.OgcApiQueryParameter)2 QueryInput (de.ii.ogcapi.foundation.domain.QueryInput)2 Builder (de.ii.ogcapi.tiles.domain.ImmutableQueryInputTileStream.Builder)2 ImmutableTile (de.ii.ogcapi.tiles.domain.ImmutableTile)2 TileCache (de.ii.ogcapi.tiles.domain.TileCache)2 TileFormatWithQuerySupportExtension (de.ii.ogcapi.tiles.domain.TileFormatWithQuerySupportExtension)2 TilesQueriesHandler (de.ii.ogcapi.tiles.domain.TilesQueriesHandler)2