boolean returnOnlyFirst = Boolean.TRUE.equals( renamedQuery.getHints().getOrDefault(QUERY_FIRST_BAND, false)); Set<String> queriesCoverages = new HashSet<>(); for (CoverageBand band : bands) {
query.getHints().put(Hints.LINEARIZATION_TOLERANCE, linearizationTolerance);
try { ConfigurationMetadataKey key = ConfigurationMetadataKey.get(e.getKey()); newQuery.getHints().put(key, e.getValue()); } catch (IllegalArgumentException ignore) { LOGGER.fine("Hint " + e.getKey() + ": " + ignore);
private Double getRequestedDistance(Query query) { Double result = (Double) query.getHints().get(Hints.GEOMETRY_DISTANCE); if (result == null) { /* * Check if hints GEOMETRY_SIMPLIFICATION is active, when both are supported (because the * wrapper store supports simplification) only simplification is sent down, but we can use it to pick * a starting geometry to simplify further. */ result = (Double) query.getHints().get(Hints.GEOMETRY_SIMPLIFICATION); log.fine("Hint for geometry simplification in query, fallback to base feature"); } if (result == null) { log.fine("No hint for geometry distance in query, fallback to base feature"); } else { if (log.isLoggable(Level.FINE)) { log.fine("Hint geometry distance: " + result); } } return result; }
/** * If the provided query has a filter of a where clause place holder exists it will be * preserved. * * @param query the query to test * @return a query hints map that will contain an entry specifying if the the where clause place * holder should be keep or not */ public static Hints setKeepWhereClausePlaceHolderHint(Query query) { Filter filter = query.getFilter(); return setKeepWhereClausePlaceHolderHint( query.getHints(), filter != null && filter != Filter.INCLUDE); }
/** * Builds the most appropriate geometry factory depending on the available query hints * * @param query * @return */ protected GeometryFactory getGeometryFactory(Query query) { // if no hints, use the default geometry factory if (query == null || query.getHints() == null) { return new GeometryFactory(); } // grab a geometry factory... check for a special hint Hints hints = query.getHints(); GeometryFactory geometryFactory = (GeometryFactory) hints.get(Hints.JTS_GEOMETRY_FACTORY); if (geometryFactory == null) { // look for a coordinate sequence factory CoordinateSequenceFactory csFactory = (CoordinateSequenceFactory) hints.get(Hints.JTS_COORDINATE_SEQUENCE_FACTORY); if (csFactory != null) { geometryFactory = new GeometryFactory(csFactory); } } if (geometryFactory == null) { // fall back on the default one geometryFactory = new GeometryFactory(); } return geometryFactory; }
@Override protected FeatureReader<SimpleFeatureType, SimpleFeature> getReaderInternal(Query query) throws IOException { File file = new File(store.dir, typeName + ".properties"); PropertyFeatureReader reader = new PropertyFeatureReader(store.getNamespaceURI(), file, getGeometryFactory(query)); Double tolerance = (Double) query.getHints().get(Hints.LINEARIZATION_TOLERANCE); if (tolerance != null) { reader.setWKTReader(new WKTReader2(tolerance)); } return reader; }
private GeometryFactory getGeometryFactory(Query query) { Hints hints = query.getHints(); // grab a geometry factory... check for a special hint GeometryFactory geometryFactory = (GeometryFactory) hints.get(Hints.JTS_GEOMETRY_FACTORY); if (geometryFactory == null) { // look for a coordinate sequence factory CoordinateSequenceFactory csFactory = (CoordinateSequenceFactory) hints.get(Hints.JTS_COORDINATE_SEQUENCE_FACTORY); if (csFactory != null) { geometryFactory = new GeometryFactory(csFactory); } else { geometryFactory = new GeometryFactory(); } } return geometryFactory; }
/** * Merges the wrapper hints with the query ones, making sure not to overwrite the query ones * * @param q * @return */ protected Query mergeHints(Query q) { if (this.hints == null || this.hints.isEmpty()) { return q; } Query clone = new Query(q); Hints hints = clone.getHints(); if (hints == null || hints.isEmpty()) { clone.setHints(this.hints); } else { for (Entry<Object, Object> entry : this.hints.entrySet()) { if (!hints.containsKey(entry.getKey())) { hints.put(entry.getKey(), entry.getValue()); } } } return clone; }
/** * Gets the max amount amount of features to keep in memory from the query and system hints * * @param query * @return */ static int getMaxFeatures(Query query) { Hints hints = null; if (query != null) { hints = query.getHints(); } int maxFeatures = 1000; if (hints != null && hints.get(Hints.MAX_MEMORY_SORT) != null) { maxFeatures = (Integer) hints.get(Hints.MAX_MEMORY_SORT); } else if (Hints.getSystemDefault(Hints.MAX_MEMORY_SORT) != null) { maxFeatures = (Integer) Hints.getSystemDefault(Hints.MAX_MEMORY_SORT); } return maxFeatures; }
throws SQLException { encodeAliasedTableName( featureType.getTypeName(), sql, query.getHints(), join.getPrimaryAlias());
public void testMixQueryAll() { // mixing Query.ALL equivalents with extra hints did not work Query firstQuery = new Query(Query.ALL); Query secondQuery = new Query(Query.ALL); firstQuery.setHints(new Hints(Hints.USE_PROVIDED_FID, Boolean.TRUE)); secondQuery.setHints(new Hints(Hints.FEATURE_2D, Boolean.TRUE)); Query mixed = DataUtilities.mixQueries(firstQuery, secondQuery, "mixer"); assertEquals(2, mixed.getHints().size()); assertTrue((Boolean) mixed.getHints().get(Hints.USE_PROVIDED_FID)); assertTrue((Boolean) mixed.getHints().get(Hints.FEATURE_2D)); }
Hints hints = targetQuery.getHints(); hints.put(Hints.GEOMETRY_DISTANCE, 0.0);
/** * Copy contructor. * * @param query the query to copy */ public Query(Query query) { this( query.getTypeName(), query.getNamespace(), query.getFilter(), query.getMaxFeatures(), query.getProperties(), query.getHandle()); this.sortBy = query.getSortBy(); this.coordinateSystem = query.getCoordinateSystem(); this.coordinateSystemReproject = query.getCoordinateSystemReproject(); this.version = query.getVersion(); this.hints = query.getHints(); this.startIndex = query.getStartIndex(); this.alias = query.getAlias(); this.joins = new ArrayList(); for (Join j : query.getJoins()) { this.joins.add(new Join(j)); } }
private void fillCache(Query query) throws IOException { Query cloned = new DefaultQuery(query); cloned.getHints().remove(Hints.GEOMETRY_DISTANCE); FeatureCollection features = wrapped.getFeatures(cloned); FeatureIterator fi = features.features(); index = null; STRtree newIndex = new STRtree(); while (fi.hasNext()) { // consider turning all geometries into packed ones, to save space Feature f = fi.next(); newIndex.insert(ReferencedEnvelope.reference(f.getBounds()), f); } fi.close(); index = newIndex; cachedQuery = query; cachedBounds = getEnvelope(query.getFilter()); dirty = false; }
/** * Copy contructor, clones the state of a generic Query into a DefaultQuery * * @param query */ public DefaultQuery(Query query) { this( query.getTypeName(), query.getNamespace(), query.getFilter(), query.getMaxFeatures(), query.getProperties(), query.getHandle()); this.sortBy = query.getSortBy(); this.coordinateSystem = query.getCoordinateSystem(); this.coordinateSystemReproject = query.getCoordinateSystemReproject(); this.version = query.getVersion(); this.hints = query.getHints(); this.startIndex = query.getStartIndex(); this.alias = query.getAlias(); this.joins = query.getJoins(); } }
private Query namedQuery(Query query) { Query namedQuery = namedQuery( query.getFilter(), query.getMaxFeatures(), query instanceof JoiningQuery); namedQuery.setProperties(query.getProperties()); namedQuery.setCoordinateSystem(query.getCoordinateSystem()); namedQuery.setCoordinateSystemReproject(query.getCoordinateSystemReproject()); namedQuery.setHandle(query.getHandle()); namedQuery.setMaxFeatures(query.getMaxFeatures()); namedQuery.setStartIndex(query.getStartIndex()); namedQuery.setSortBy(query.getSortBy()); namedQuery.setHints(query.getHints()); if (query instanceof JoiningQuery) { ((JoiningQuery) namedQuery).setQueryJoins(((JoiningQuery) query).getQueryJoins()); ((JoiningQuery) namedQuery).setRootMapping(((JoiningQuery) query).getRootMapping()); } return namedQuery; }
protected GetFeatureRequest createGetFeature(Query query, ResultType resultType) throws IOException { GetFeatureRequest request = client.createGetFeatureRequest(); final WFSDataStore dataStore = getDataStore(); final QName remoteTypeName = dataStore.getRemoteTypeName(getEntry().getName()); final SimpleFeatureType remoteSimpleFeatureType; remoteSimpleFeatureType = dataStore.getRemoteSimpleFeatureType(remoteTypeName); request.setTypeName(remoteTypeName); request.setFullType(remoteSimpleFeatureType); invertAxisInFilterIfNeeded(query, remoteSimpleFeatureType); request.setFilter(query.getFilter()); request.setResultType(resultType); request.setHints(query.getHints()); int maxFeatures = query.getMaxFeatures(); if (Integer.MAX_VALUE > maxFeatures) { request.setMaxFeatures(maxFeatures); } // let the request decide request.setOutputFormat(outputFormat); request.setPropertyNames(query.getPropertyNames()); request.setSortBy(query.getSortBy()); String srsName = getSupportedSrsName(request, query); request.setSrsName(srsName); return request; }