Search in sources :

Example 1 with TileFromFeatureQuery

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

the class TileProviderFeatures method getQueryInput.

@Override
@JsonIgnore
@Value.Derived
public QueryInput getQueryInput(OgcApiDataV2 apiData, URICustomizer uriCustomizer, Map<String, String> queryParameters, List<OgcApiQueryParameter> allowedParameters, QueryInput genericInput, Tile tile) {
    if (!tile.getFeatureProvider().map(FeatureProvider2::supportsQueries).orElse(false)) {
        throw new IllegalStateException("Tile cannot be generated. The feature provider does not support feature queries.");
    }
    TileFormatExtension outputFormat = tile.getOutputFormat();
    List<String> collections = tile.getCollectionIds();
    if (collections.isEmpty()) {
        return new ImmutableQueryInputTileEmpty.Builder().from(genericInput).tile(tile).build();
    }
    if (!(outputFormat instanceof TileFormatWithQuerySupportExtension))
        throw new RuntimeException(String.format("Unexpected tile format without query support. Found: %s", outputFormat.getClass().getSimpleName()));
    // first execute the information that is passed as processing parameters (e.g., "properties")
    Map<String, Object> processingParameters = new HashMap<>();
    for (OgcApiQueryParameter parameter : allowedParameters) {
        processingParameters = parameter.transformContext(null, processingParameters, queryParameters, apiData);
    }
    if (tile.isDatasetTile()) {
        if (!outputFormat.canMultiLayer() && collections.size() > 1)
            throw new NotAcceptableException("The requested tile format supports only a single layer. Please select only a single collection.");
        Map<String, Tile> singleLayerTileMap = collections.stream().collect(ImmutableMap.toImmutableMap(collectionId -> collectionId, collectionId -> new ImmutableTile.Builder().from(tile).collectionIds(ImmutableList.of(collectionId)).isDatasetTile(false).build()));
        Map<String, FeatureQuery> queryMap = collections.stream().filter(collectionId -> {
            Optional<FeaturesCoreConfiguration> featuresConfiguration = apiData.getCollections().get(collectionId).getExtension(FeaturesCoreConfiguration.class);
            return featuresConfiguration.isPresent() && featuresConfiguration.get().getQueryables().isPresent() && !featuresConfiguration.get().getQueryables().get().getSpatial().isEmpty();
        }).collect(ImmutableMap.toImmutableMap(collectionId -> collectionId, collectionId -> {
            String featureTypeId = apiData.getCollections().get(collectionId).getExtension(FeaturesCoreConfiguration.class).map(cfg -> cfg.getFeatureType().orElse(collectionId)).orElse(collectionId);
            TilesConfiguration layerConfiguration = apiData.getExtension(TilesConfiguration.class, collectionId).orElseThrow();
            FeatureQuery query = ((TileFormatWithQuerySupportExtension) outputFormat).getQuery(singleLayerTileMap.get(collectionId), allowedParameters, queryParameters, layerConfiguration, uriCustomizer);
            return ImmutableFeatureQuery.builder().from(query).type(featureTypeId).build();
        }));
        FeaturesCoreConfiguration coreConfiguration = apiData.getExtension(FeaturesCoreConfiguration.class).orElseThrow();
        return new ImmutableQueryInputTileMultiLayer.Builder().from(genericInput).tile(tile).singleLayerTileMap(singleLayerTileMap).queryMap(queryMap).processingParameters(processingParameters).defaultCrs(apiData.getExtension(FeaturesCoreConfiguration.class).map(FeaturesCoreConfiguration::getDefaultEpsgCrs).orElseThrow()).build();
    } else {
        String collectionId = tile.getCollectionId();
        FeatureTypeConfigurationOgcApi featureType = apiData.getCollectionData(collectionId).orElseThrow();
        TilesConfiguration layerConfiguration = apiData.getExtension(TilesConfiguration.class, collectionId).orElseThrow();
        FeatureQuery query = ((TileFromFeatureQuery) outputFormat).getQuery(tile, allowedParameters, queryParameters, layerConfiguration, uriCustomizer);
        FeaturesCoreConfiguration coreConfiguration = featureType.getExtension(FeaturesCoreConfiguration.class).orElseThrow();
        return new ImmutableQueryInputTileSingleLayer.Builder().from(genericInput).tile(tile).query(query).processingParameters(processingParameters).defaultCrs(featureType.getExtension(FeaturesCoreConfiguration.class).map(FeaturesCoreConfiguration::getDefaultEpsgCrs).orElseThrow()).build();
    }
}
Also used : FeatureQuery(de.ii.xtraplatform.features.domain.FeatureQuery) TileFormatWithQuerySupportExtension(de.ii.ogcapi.tiles.domain.TileFormatWithQuerySupportExtension) TileFromFeatureQuery(de.ii.ogcapi.tiles.domain.TileFromFeatureQuery) QueryInput(de.ii.ogcapi.foundation.domain.QueryInput) HashMap(java.util.HashMap) TilesConfiguration(de.ii.ogcapi.tiles.domain.TilesConfiguration) Lists(com.google.common.collect.Lists) ImmutableList(com.google.common.collect.ImmutableList) Value(org.immutables.value.Value) PredefinedFilter(de.ii.ogcapi.tiles.domain.PredefinedFilter) SeedingOptions(de.ii.ogcapi.tiles.domain.SeedingOptions) Rule(de.ii.ogcapi.tiles.domain.Rule) Map(java.util.Map) JsonIgnore(com.fasterxml.jackson.annotation.JsonIgnore) Tile(de.ii.ogcapi.tiles.domain.Tile) Nullable(javax.annotation.Nullable) ImmutableQueryInputTileSingleLayer(de.ii.ogcapi.tiles.domain.ImmutableQueryInputTileSingleLayer) OgcApiQueryParameter(de.ii.ogcapi.foundation.domain.OgcApiQueryParameter) NotAcceptableException(javax.ws.rs.NotAcceptableException) ImmutableMap(com.google.common.collect.ImmutableMap) MinMax(de.ii.ogcapi.tiles.domain.MinMax) URICustomizer(de.ii.ogcapi.foundation.domain.URICustomizer) Maps(com.google.common.collect.Maps) FeatureProvider2(de.ii.xtraplatform.features.domain.FeatureProvider2) FeaturesCoreConfiguration(de.ii.ogcapi.features.core.domain.FeaturesCoreConfiguration) Objects(java.util.Objects) ImmutableQueryInputTileEmpty(de.ii.ogcapi.tiles.domain.ImmutableQueryInputTileEmpty) List(java.util.List) OgcApiDataV2(de.ii.ogcapi.foundation.domain.OgcApiDataV2) TileFormatExtension(de.ii.ogcapi.tiles.domain.TileFormatExtension) TileProvider(de.ii.ogcapi.tiles.domain.TileProvider) ImmutableFeatureQuery(de.ii.xtraplatform.features.domain.ImmutableFeatureQuery) Optional(java.util.Optional) ImmutableTile(de.ii.ogcapi.tiles.domain.ImmutableTile) JsonDeserialize(com.fasterxml.jackson.databind.annotation.JsonDeserialize) FeatureTypeConfigurationOgcApi(de.ii.ogcapi.foundation.domain.FeatureTypeConfigurationOgcApi) ImmutableQueryInputTileMultiLayer(de.ii.ogcapi.tiles.domain.ImmutableQueryInputTileMultiLayer) HashMap(java.util.HashMap) FeatureProvider2(de.ii.xtraplatform.features.domain.FeatureProvider2) ImmutableQueryInputTileMultiLayer(de.ii.ogcapi.tiles.domain.ImmutableQueryInputTileMultiLayer) TilesConfiguration(de.ii.ogcapi.tiles.domain.TilesConfiguration) FeatureQuery(de.ii.xtraplatform.features.domain.FeatureQuery) TileFromFeatureQuery(de.ii.ogcapi.tiles.domain.TileFromFeatureQuery) ImmutableFeatureQuery(de.ii.xtraplatform.features.domain.ImmutableFeatureQuery) ImmutableQueryInputTileEmpty(de.ii.ogcapi.tiles.domain.ImmutableQueryInputTileEmpty) FeatureTypeConfigurationOgcApi(de.ii.ogcapi.foundation.domain.FeatureTypeConfigurationOgcApi) FeaturesCoreConfiguration(de.ii.ogcapi.features.core.domain.FeaturesCoreConfiguration) TileFromFeatureQuery(de.ii.ogcapi.tiles.domain.TileFromFeatureQuery) TileFormatExtension(de.ii.ogcapi.tiles.domain.TileFormatExtension) Optional(java.util.Optional) Tile(de.ii.ogcapi.tiles.domain.Tile) ImmutableTile(de.ii.ogcapi.tiles.domain.ImmutableTile) OgcApiQueryParameter(de.ii.ogcapi.foundation.domain.OgcApiQueryParameter) NotAcceptableException(javax.ws.rs.NotAcceptableException) TileFormatWithQuerySupportExtension(de.ii.ogcapi.tiles.domain.TileFormatWithQuerySupportExtension) JsonIgnore(com.fasterxml.jackson.annotation.JsonIgnore)

Aggregations

JsonIgnore (com.fasterxml.jackson.annotation.JsonIgnore)1 JsonDeserialize (com.fasterxml.jackson.databind.annotation.JsonDeserialize)1 ImmutableList (com.google.common.collect.ImmutableList)1 ImmutableMap (com.google.common.collect.ImmutableMap)1 Lists (com.google.common.collect.Lists)1 Maps (com.google.common.collect.Maps)1 FeaturesCoreConfiguration (de.ii.ogcapi.features.core.domain.FeaturesCoreConfiguration)1 FeatureTypeConfigurationOgcApi (de.ii.ogcapi.foundation.domain.FeatureTypeConfigurationOgcApi)1 OgcApiDataV2 (de.ii.ogcapi.foundation.domain.OgcApiDataV2)1 OgcApiQueryParameter (de.ii.ogcapi.foundation.domain.OgcApiQueryParameter)1 QueryInput (de.ii.ogcapi.foundation.domain.QueryInput)1 URICustomizer (de.ii.ogcapi.foundation.domain.URICustomizer)1 ImmutableQueryInputTileEmpty (de.ii.ogcapi.tiles.domain.ImmutableQueryInputTileEmpty)1 ImmutableQueryInputTileMultiLayer (de.ii.ogcapi.tiles.domain.ImmutableQueryInputTileMultiLayer)1 ImmutableQueryInputTileSingleLayer (de.ii.ogcapi.tiles.domain.ImmutableQueryInputTileSingleLayer)1 ImmutableTile (de.ii.ogcapi.tiles.domain.ImmutableTile)1 MinMax (de.ii.ogcapi.tiles.domain.MinMax)1 PredefinedFilter (de.ii.ogcapi.tiles.domain.PredefinedFilter)1 Rule (de.ii.ogcapi.tiles.domain.Rule)1 SeedingOptions (de.ii.ogcapi.tiles.domain.SeedingOptions)1