Branch data Line data Source code
1 : : /***************************************************************************
2 : : qgsogcutils.h
3 : : ---------------------
4 : : begin : March 2013
5 : : copyright : (C) 2013 by Martin Dobias
6 : : email : wonder dot sk at gmail dot com
7 : : ***************************************************************************
8 : : * *
9 : : * This program is free software; you can redistribute it and/or modify *
10 : : * it under the terms of the GNU General Public License as published by *
11 : : * the Free Software Foundation; either version 2 of the License, or *
12 : : * (at your option) any later version. *
13 : : * *
14 : : ***************************************************************************/
15 : : #ifndef QGSOGCUTILS_H
16 : : #define QGSOGCUTILS_H
17 : :
18 : : class QColor;
19 : : class QDomNode;
20 : : class QDomElement;
21 : : class QDomDocument;
22 : : class QString;
23 : :
24 : : #include "qgis_core.h"
25 : : #include "qgis_sip.h"
26 : : #include <list>
27 : : #include <QVector>
28 : :
29 : : class QgsExpression;
30 : : class QgsGeometry;
31 : : class QgsPointXY;
32 : : class QgsRectangle;
33 : : class QgsVectorLayer;
34 : :
35 : : #include "qgsgeometry.h"
36 : : #include "qgsexpression.h"
37 : : #include "qgsexpressionnode.h"
38 : : #include "qgsexpressionnodeimpl.h"
39 : : #include "qgssqlstatement.h"
40 : :
41 : : /**
42 : : * \ingroup core
43 : : * \brief The QgsOgcUtils class provides various utility functions for conversion between
44 : : * OGC (Open Geospatial Consortium) standards and QGIS internal representations.
45 : : *
46 : : * Currently supported standards:
47 : : *
48 : : * - GML2 - Geography Markup Language (import, export)
49 : : */
50 : : class CORE_EXPORT QgsOgcUtils
51 : : {
52 : : public:
53 : :
54 : : /**
55 : : * The Context struct stores the current layer and coordinate transform context.
56 : : * \since QGIS 3.14
57 : : */
58 : 0 : struct Context
59 : : {
60 : :
61 : : /**
62 : : * Constructs a Context from \a layer and \a transformContext
63 : : */
64 : 0 : Context( const QgsMapLayer *layer = nullptr, const QgsCoordinateTransformContext &transformContext = QgsCoordinateTransformContext() )
65 : 0 : : layer( layer )
66 : 0 : , transformContext( transformContext )
67 : : {
68 : 0 : }
69 : : const QgsMapLayer *layer = nullptr;
70 : : QgsCoordinateTransformContext transformContext;
71 : : };
72 : :
73 : : /**
74 : : *GML version
75 : : */
76 : : enum GMLVersion
77 : : {
78 : : GML_2_1_2,
79 : : GML_3_1_0,
80 : : GML_3_2_1,
81 : : };
82 : :
83 : : /**
84 : : * Static method that creates geometry from GML
85 : : * \param xmlString xml representation of the geometry. GML elements are expected to be
86 : : * in default namespace (\verbatim {<Point>...</Point> \endverbatim) or in
87 : : * "gml" namespace (\verbatim <gml:Point>...</gml:Point> \endverbatim)
88 : : * \param context QgsOgcUtils context
89 : : */
90 : : static QgsGeometry geometryFromGML( const QString &xmlString, const QgsOgcUtils::Context &context = QgsOgcUtils::Context() );
91 : :
92 : : /**
93 : : * Static method that creates geometry from GML
94 : : */
95 : : static QgsGeometry geometryFromGML( const QDomNode &geometryNode, const QgsOgcUtils::Context &context = QgsOgcUtils::Context() );
96 : :
97 : : //! Read rectangle from GML2 Box
98 : : static QgsRectangle rectangleFromGMLBox( const QDomNode &boxNode );
99 : :
100 : : //! Read rectangle from GML3 Envelope
101 : : static QgsRectangle rectangleFromGMLEnvelope( const QDomNode &envelopeNode );
102 : :
103 : : /**
104 : : * Exports the geometry to GML
105 : : * \returns QDomElement
106 : : * \since QGIS 2.16
107 : : */
108 : : static QDomElement geometryToGML( const QgsGeometry &geometry, QDomDocument &doc,
109 : : QgsOgcUtils::GMLVersion gmlVersion,
110 : : const QString &srsName,
111 : : bool invertAxisOrientation,
112 : : const QString &gmlIdBase,
113 : : int precision = 17 );
114 : :
115 : : /**
116 : : * Exports the geometry to GML2 or GML3
117 : : * \returns QDomElement
118 : : */
119 : : static QDomElement geometryToGML( const QgsGeometry &geometry, QDomDocument &doc, const QString &format, int precision = 17 );
120 : :
121 : : /**
122 : : * Exports the geometry to GML2
123 : : * \returns QDomElement
124 : : */
125 : : static QDomElement geometryToGML( const QgsGeometry &geometry, QDomDocument &doc, int precision = 17 );
126 : :
127 : : /**
128 : : * Exports the rectangle to GML2 Box
129 : : * \returns QDomElement
130 : : */
131 : : static QDomElement rectangleToGMLBox( QgsRectangle *box, QDomDocument &doc, int precision = 17 );
132 : :
133 : : /**
134 : : * Exports the rectangle to GML2 Box
135 : : * \returns QDomElement
136 : : * \since QGIS 2.16
137 : : */
138 : : static QDomElement rectangleToGMLBox( QgsRectangle *box, QDomDocument &doc,
139 : : const QString &srsName,
140 : : bool invertAxisOrientation,
141 : : int precision = 17 );
142 : :
143 : : /**
144 : : * Exports the rectangle to GML3 Envelope
145 : : * \returns QDomElement
146 : : */
147 : : static QDomElement rectangleToGMLEnvelope( QgsRectangle *env, QDomDocument &doc, int precision = 17 );
148 : :
149 : : /**
150 : : * Exports the rectangle to GML3 Envelope
151 : : * \returns QDomElement
152 : : * \since QGIS 2.16
153 : : */
154 : : static QDomElement rectangleToGMLEnvelope( QgsRectangle *env, QDomDocument &doc,
155 : : const QString &srsName,
156 : : bool invertAxisOrientation,
157 : : int precision = 17 );
158 : :
159 : :
160 : : //! Parse XML with OGC fill into QColor
161 : : static QColor colorFromOgcFill( const QDomElement &fillElement );
162 : :
163 : : //! Parse XML with OGC filter into QGIS expression
164 : : static QgsExpression *expressionFromOgcFilter( const QDomElement &element, QgsVectorLayer *layer = nullptr ) SIP_FACTORY;
165 : :
166 : : /**
167 : : * Creates OGC filter XML element. Supports minimum standard filter
168 : : * according to the OGC filter specs (=,!=,<,>,<=,>=,AND,OR,NOT)
169 : : * \returns valid \verbatim <Filter> \endverbatim QDomElement on success,
170 : : * otherwise null QDomElement
171 : : */
172 : : static QDomElement expressionToOgcFilter( const QgsExpression &exp, QDomDocument &doc, QString *errorMessage = nullptr );
173 : :
174 : : /**
175 : : * OGC filter version
176 : : */
177 : : enum FilterVersion
178 : : {
179 : : FILTER_OGC_1_0,
180 : : FILTER_OGC_1_1,
181 : : FILTER_FES_2_0
182 : : };
183 : :
184 : : /**
185 : : * Returns an expression from a WFS filter embedded in a document.
186 : : * \param element The WFS Filter
187 : : * \param version The WFS version
188 : : * \param layer Layer to use to retrieve field values from literal filters
189 : : * \since QGIS 3.4
190 : : */
191 : : static QgsExpression *expressionFromOgcFilter( const QDomElement &element, FilterVersion version, QgsVectorLayer *layer = nullptr ) SIP_FACTORY;
192 : :
193 : : /**
194 : : * Creates OGC filter XML element. Supports minimum standard filter
195 : : * according to the OGC filter specs (=,!=,<,>,<=,>=,AND,OR,NOT)
196 : : * \returns valid \verbatim <Filter> \endverbatim QDomElement on success,
197 : : * otherwise null QDomElement
198 : : * \note not available in Python bindings
199 : : * \since QGIS 2.16
200 : : */
201 : : static QDomElement expressionToOgcFilter( const QgsExpression &exp,
202 : : QDomDocument &doc,
203 : : QgsOgcUtils::GMLVersion gmlVersion,
204 : : FilterVersion filterVersion,
205 : : const QString &geometryName,
206 : : const QString &srsName,
207 : : bool honourAxisOrientation,
208 : : bool invertAxisOrientation,
209 : : QString *errorMessage = nullptr ) SIP_SKIP;
210 : :
211 : : /**
212 : : * Creates an OGC expression XML element.
213 : : * \returns valid OGC expression QDomElement on success,
214 : : * otherwise null QDomElement
215 : : */
216 : : static QDomElement expressionToOgcExpression( const QgsExpression &exp, QDomDocument &doc, QString *errorMessage = nullptr );
217 : :
218 : : /**
219 : : * Creates an OGC expression XML element.
220 : : * \returns valid OGC expression QDomElement on success,
221 : : * otherwise null QDomElement
222 : : */
223 : : static QDomElement expressionToOgcExpression( const QgsExpression &exp,
224 : : QDomDocument &doc,
225 : : QgsOgcUtils::GMLVersion gmlVersion,
226 : : FilterVersion filterVersion,
227 : : const QString &geometryName,
228 : : const QString &srsName,
229 : : bool honourAxisOrientation,
230 : : bool invertAxisOrientation,
231 : : QString *errorMessage = nullptr );
232 : :
233 : : #ifndef SIP_RUN
234 : :
235 : : /**
236 : : * \ingroup core
237 : : * \brief Layer properties. Used by SQLStatementToOgcFilter().
238 : : * \note not available in Python bindings
239 : : * \since QGIS 2.16
240 : : */
241 : 0 : class LayerProperties
242 : : {
243 : : public:
244 : : //! Constructor
245 : : LayerProperties() = default;
246 : :
247 : : //! Layer name
248 : : QString mName;
249 : : //! Geometry attribute name
250 : : QString mGeometryAttribute;
251 : : //! SRS name
252 : : QString mSRSName;
253 : : };
254 : : #endif
255 : :
256 : : /**
257 : : * Creates OGC filter XML element from the WHERE and JOIN clauses of a SQL
258 : : * statement. Supports minimum standard filter
259 : : * according to the OGC filter specs (=,!=,<,>,<=,>=,AND,OR,NOT,LIKE,BETWEEN,IN)
260 : : * Supports layer joins.
261 : : * Supports ST_GeometryFromText(wkt[, srid/srsname]),
262 : : * ST_MakeEnvelope(xmin,ymin,xmax,ymax[, srid/srsname])
263 : : * ST_GeomFromGML(serialized_gml_string)
264 : : * BBOX()
265 : : * ST_Intersects(), ST_Contains(), ST_Crosses(), ST_Equals(),
266 : : * ST_Disjoint(), ST_Overlaps(), ST_Touches(), ST_Within()
267 : : * ST_DWithin(), ST_Beyond()
268 : : * custom functions
269 : : * \returns valid \verbatim <Filter> \endverbatim QDomElement on success,
270 : : * otherwise null QDomElement
271 : : * \note not available in Python bindings
272 : : * \since QGIS 2.16
273 : : */
274 : : static QDomElement SQLStatementToOgcFilter( const QgsSQLStatement &statement,
275 : : QDomDocument &doc,
276 : : QgsOgcUtils::GMLVersion gmlVersion,
277 : : FilterVersion filterVersion,
278 : : const QList<LayerProperties> &layerProperties,
279 : : bool honourAxisOrientation,
280 : : bool invertAxisOrientation,
281 : : const QMap< QString, QString> &mapUnprefixedTypenameToPrefixedTypename,
282 : : QString *errorMessage = nullptr ) SIP_SKIP;
283 : :
284 : : private:
285 : :
286 : : //! Static method that creates geometry from GML Point
287 : : static QgsGeometry geometryFromGMLPoint( const QDomElement &geometryElement );
288 : : //! Static method that creates geometry from GML LineString
289 : : static QgsGeometry geometryFromGMLLineString( const QDomElement &geometryElement );
290 : : //! Static method that creates geometry from GML Polygon
291 : : static QgsGeometry geometryFromGMLPolygon( const QDomElement &geometryElement );
292 : : //! Static method that creates geometry from GML MultiPoint
293 : : static QgsGeometry geometryFromGMLMultiPoint( const QDomElement &geometryElement );
294 : : //! Static method that creates geometry from GML MultiLineString
295 : : static QgsGeometry geometryFromGMLMultiLineString( const QDomElement &geometryElement );
296 : : //! Static method that creates geometry from GML MultiPolygon
297 : : static QgsGeometry geometryFromGMLMultiPolygon( const QDomElement &geometryElement );
298 : :
299 : : /**
300 : : * Reads the \verbatim <gml:coordinates> \endverbatim element and extracts the coordinates as points
301 : : * \param coords list where the found coordinates are appended
302 : : * \param elem the \verbatim <gml:coordinates> \endverbatim element
303 : : * \returns boolean FALSE on success
304 : : */
305 : : static bool readGMLCoordinates( QgsPolylineXY &coords, const QDomElement &elem );
306 : :
307 : : /**
308 : : * Reads the \verbatim <gml:pos> \endverbatim or \verbatim <gml:posList> \endverbatim
309 : : * and extracts the coordinates as points
310 : : * \param coords list where the found coordinates are appended
311 : : * \param elem the \verbatim <gml:pos> \endverbatim or
312 : : * \verbatim <gml:posList> \endverbatim element
313 : : * \returns boolean FALSE on success
314 : : */
315 : : static bool readGMLPositions( QgsPolylineXY &coords, const QDomElement &elem );
316 : :
317 : :
318 : : /**
319 : : * Create a GML coordinates element from a point list.
320 : : * \param points list of data points
321 : : * \param doc the GML document
322 : : * \returns QDomElement
323 : : */
324 : : static QDomElement createGMLCoordinates( const QgsPolylineXY &points, QDomDocument &doc );
325 : :
326 : : /**
327 : : * Create a GML pos or posList element from a point list.
328 : : * \param points list of data points
329 : : * \param doc the GML document
330 : : * \returns QDomElement
331 : : */
332 : : static QDomElement createGMLPositions( const QgsPolylineXY &points, QDomDocument &doc );
333 : :
334 : : //! handle a generic sub-expression
335 : : static QgsExpressionNode *nodeFromOgcFilter( QDomElement &element, QString &errorMessage, QgsVectorLayer *layer = nullptr );
336 : : //! handle a generic binary operator
337 : : static QgsExpressionNodeBinaryOperator *nodeBinaryOperatorFromOgcFilter( QDomElement &element, QString &errorMessage, QgsVectorLayer *layer = nullptr );
338 : : //! handles various spatial operation tags (\verbatim <Intersects> \endverbatim, \verbatim <Touches> \endverbatim etc.)
339 : : static QgsExpressionNodeFunction *nodeSpatialOperatorFromOgcFilter( QDomElement &element, QString &errorMessage );
340 : : //! handle \verbatim <Not> \endverbatim tag
341 : : static QgsExpressionNodeUnaryOperator *nodeNotFromOgcFilter( QDomElement &element, QString &errorMessage );
342 : : //! handles \verbatim <Function> \endverbatim tag
343 : : static QgsExpressionNodeFunction *nodeFunctionFromOgcFilter( QDomElement &element, QString &errorMessage );
344 : : //! handles \verbatim <Literal> \endverbatim tag
345 : : static QgsExpressionNode *nodeLiteralFromOgcFilter( QDomElement &element, QString &errorMessage, QgsVectorLayer *layer = nullptr );
346 : : //! handles \verbatim <PropertyName> \endverbatim tag
347 : : static QgsExpressionNodeColumnRef *nodeColumnRefFromOgcFilter( QDomElement &element, QString &errorMessage );
348 : : //! handles \verbatim <PropertyIsBetween> \endverbatim tag
349 : : static QgsExpressionNode *nodeIsBetweenFromOgcFilter( QDomElement &element, QString &errorMessage );
350 : : //! handles \verbatim <PropertyIsNull> \endverbatim tag
351 : : static QgsExpressionNodeBinaryOperator *nodePropertyIsNullFromOgcFilter( QDomElement &element, QString &errorMessage );
352 : : };
353 : :
354 : : #ifndef SIP_RUN
355 : :
356 : : /**
357 : : * \ingroup core
358 : : * \brief Internal use by QgsOgcUtils
359 : : * \note not available in Python bindings
360 : : */
361 : 0 : class QgsOgcUtilsExprToFilter
362 : : {
363 : : public:
364 : : //! Constructor
365 : : QgsOgcUtilsExprToFilter( QDomDocument &doc,
366 : : QgsOgcUtils::GMLVersion gmlVersion,
367 : : QgsOgcUtils::FilterVersion filterVersion,
368 : : const QString &geometryName,
369 : : const QString &srsName,
370 : : bool honourAxisOrientation,
371 : : bool invertAxisOrientation );
372 : :
373 : : //! Convert an expression to a OGC filter
374 : : QDomElement expressionNodeToOgcFilter( const QgsExpressionNode *node, QgsExpression *expression, const QgsExpressionContext *context );
375 : :
376 : : //! Returns whether the gml: namespace is used
377 : 0 : bool GMLNamespaceUsed() const { return mGMLUsed; }
378 : :
379 : : //! Returns the error message.
380 : 0 : QString errorMessage() const { return mErrorMessage; }
381 : :
382 : : private:
383 : : QDomDocument &mDoc;
384 : : bool mGMLUsed;
385 : : QgsOgcUtils::GMLVersion mGMLVersion;
386 : : QgsOgcUtils::FilterVersion mFilterVersion;
387 : : const QString &mGeometryName;
388 : : const QString &mSrsName;
389 : : bool mInvertAxisOrientation;
390 : : QString mErrorMessage;
391 : : QString mFilterPrefix;
392 : : QString mPropertyName;
393 : : int mGeomId;
394 : :
395 : : QDomElement expressionUnaryOperatorToOgcFilter( const QgsExpressionNodeUnaryOperator *node, QgsExpression *expression, const QgsExpressionContext *context );
396 : : QDomElement expressionBinaryOperatorToOgcFilter( const QgsExpressionNodeBinaryOperator *node, QgsExpression *expression, const QgsExpressionContext *context );
397 : : QDomElement expressionLiteralToOgcFilter( const QgsExpressionNodeLiteral *node, QgsExpression *expression, const QgsExpressionContext *context );
398 : : QDomElement expressionColumnRefToOgcFilter( const QgsExpressionNodeColumnRef *node, QgsExpression *expression, const QgsExpressionContext *context );
399 : : QDomElement expressionInOperatorToOgcFilter( const QgsExpressionNodeInOperator *node, QgsExpression *expression, const QgsExpressionContext *context );
400 : : QDomElement expressionFunctionToOgcFilter( const QgsExpressionNodeFunction *node, QgsExpression *expression, const QgsExpressionContext *context );
401 : : };
402 : :
403 : : /**
404 : : * \ingroup core
405 : : * \brief Internal use by QgsOgcUtils
406 : : * \note not available in Python bindings
407 : : * \since QGIS 3.4
408 : : */
409 : 0 : class QgsOgcUtilsExpressionFromFilter
410 : : {
411 : : public:
412 : :
413 : : /**
414 : : * Constructor for QgsOgcUtilsExpressionFromFilter.
415 : : * \param version WFS Version
416 : : * \param layer Layer to use to retrieve field values from literal filters
417 : : */
418 : : QgsOgcUtilsExpressionFromFilter( QgsOgcUtils::FilterVersion version = QgsOgcUtils::FILTER_OGC_1_0,
419 : : const QgsVectorLayer *layer = nullptr );
420 : :
421 : : /**
422 : : * Returns an expression node from a WFS filter embedded in a document
423 : : * element. NULLPTR is returned when an error happened.
424 : : * \param element The WFS filter
425 : : */
426 : : QgsExpressionNode *nodeFromOgcFilter( const QDomElement &element );
427 : :
428 : : /**
429 : : * Returns the underlying error message, or an empty string in case of no
430 : : * error.
431 : : */
432 : : QString errorMessage() const;
433 : :
434 : : /**
435 : : * Returns an expression node from a WFS filter embedded in a document with
436 : : * binary operators.
437 : : *
438 : : */
439 : : QgsExpressionNodeBinaryOperator *nodeBinaryOperatorFromOgcFilter( const QDomElement &element );
440 : :
441 : : /**
442 : : * Returns an expression node from a WFS filter embedded in a document with
443 : : * spatial operators.
444 : : */
445 : : QgsExpressionNodeFunction *nodeSpatialOperatorFromOgcFilter( const QDomElement &element );
446 : :
447 : : /**
448 : : * Returns an expression node from a WFS filter embedded in a document with
449 : : * column references.
450 : : */
451 : : QgsExpressionNodeColumnRef *nodeColumnRefFromOgcFilter( const QDomElement &element );
452 : :
453 : : /**
454 : : * Returns an expression node from a WFS filter embedded in a document with
455 : : * literal tag.
456 : : */
457 : : QgsExpressionNode *nodeLiteralFromOgcFilter( const QDomElement &element );
458 : :
459 : : /**
460 : : * Returns an expression node from a WFS filter embedded in a document with
461 : : * Not operator.
462 : : */
463 : : QgsExpressionNodeUnaryOperator *nodeNotFromOgcFilter( const QDomElement &element );
464 : :
465 : : /**
466 : : * Returns an expression node from a WFS filter embedded in a document with
467 : : * IsNull operator.
468 : : */
469 : : QgsExpressionNodeBinaryOperator *nodePropertyIsNullFromOgcFilter( const QDomElement &element );
470 : :
471 : : /**
472 : : * Returns an expression node from a WFS filter embedded in a document with
473 : : * functions.
474 : : */
475 : : QgsExpressionNodeFunction *nodeFunctionFromOgcFilter( const QDomElement &element );
476 : :
477 : : /**
478 : : * Returns an expression node from a WFS filter embedded in a document with
479 : : * boudnaries operator.
480 : : */
481 : : QgsExpressionNode *nodeIsBetweenFromOgcFilter( const QDomElement &element );
482 : :
483 : : private:
484 : : const QgsVectorLayer *mLayer = nullptr;
485 : : QString mErrorMessage;
486 : : QString mPropertyName;
487 : : QString mPrefix;
488 : : };
489 : :
490 : : /**
491 : : * \ingroup core
492 : : * \brief Internal use by QgsOgcUtils
493 : : * \note not available in Python bindings
494 : : */
495 : 0 : class QgsOgcUtilsSQLStatementToFilter
496 : : {
497 : : public:
498 : : //! Constructor
499 : : QgsOgcUtilsSQLStatementToFilter( QDomDocument &doc,
500 : : QgsOgcUtils::GMLVersion gmlVersion,
501 : : QgsOgcUtils::FilterVersion filterVersion,
502 : : const QList<QgsOgcUtils::LayerProperties> &layerProperties,
503 : : bool honourAxisOrientation,
504 : : bool invertAxisOrientation,
505 : : const QMap< QString, QString> &mapUnprefixedTypenameToPrefixedTypename );
506 : :
507 : : //! Convert a SQL statement to a OGC filter
508 : : QDomElement toOgcFilter( const QgsSQLStatement::Node *node );
509 : :
510 : : //! Returns whether the gml: namespace is used
511 : 0 : bool GMLNamespaceUsed() const { return mGMLUsed; }
512 : :
513 : : //! Returns the error message.
514 : 0 : QString errorMessage() const { return mErrorMessage; }
515 : :
516 : : private:
517 : : QDomDocument &mDoc;
518 : : bool mGMLUsed;
519 : : QgsOgcUtils::GMLVersion mGMLVersion;
520 : : QgsOgcUtils::FilterVersion mFilterVersion;
521 : : const QList<QgsOgcUtils::LayerProperties> &mLayerProperties;
522 : : bool mHonourAxisOrientation;
523 : : bool mInvertAxisOrientation;
524 : : QString mErrorMessage;
525 : : QString mFilterPrefix;
526 : : QString mPropertyName;
527 : : int mGeomId;
528 : : QString mCurrentSRSName;
529 : : QMap<QString, QString> mMapTableAliasToNames;
530 : : const QMap< QString, QString> &mMapUnprefixedTypenameToPrefixedTypename;
531 : :
532 : : QDomElement toOgcFilter( const QgsSQLStatement::NodeUnaryOperator *node );
533 : : QDomElement toOgcFilter( const QgsSQLStatement::NodeBinaryOperator *node );
534 : : QDomElement toOgcFilter( const QgsSQLStatement::NodeLiteral *node );
535 : : QDomElement toOgcFilter( const QgsSQLStatement::NodeColumnRef *node );
536 : : QDomElement toOgcFilter( const QgsSQLStatement::NodeInOperator *node );
537 : : QDomElement toOgcFilter( const QgsSQLStatement::NodeBetweenOperator *node );
538 : : QDomElement toOgcFilter( const QgsSQLStatement::NodeFunction *node );
539 : : QDomElement toOgcFilter( const QgsSQLStatement::NodeJoin *node, const QString &leftTable );
540 : : QDomElement toOgcFilter( const QgsSQLStatement::NodeSelect *node );
541 : :
542 : : void visit( const QgsSQLStatement::NodeTableDef *node );
543 : : QString getGeometryColumnSRSName( const QgsSQLStatement::Node *node );
544 : : bool processSRSName( const QgsSQLStatement::NodeFunction *mainNode,
545 : : QList<QgsSQLStatement::Node *> args,
546 : : bool lastArgIsSRSName,
547 : : QString &srsName,
548 : : bool &axisInversion );
549 : : };
550 : : #endif // #ifndef SIP_RUN
551 : :
552 : : #endif // QGSOGCUTILS_H
|