85 } AxisOrientationLogic;
89 const QString &geometryAttribute,
91 AxisOrientationLogic axisOrientationLogic = Honour_EPSG_if_urn,
92 bool invertAxisOrientation =
false );
97 const QMap< QString, QPair<QString, QString> > &fieldNameToSrcLayerNameFieldNameMap,
98 AxisOrientationLogic axisOrientationLogic = Honour_EPSG_if_urn,
99 bool invertAxisOrientation =
false );
111 const QMap<QString, QPair<QString, bool>> &fieldNameToSrcLayerNameFieldNameMap,
112 const QMap<QString, QString> &namespacePrefixToURIMap );
118 bool processData(
const QByteArray &data,
bool atEnd, QString &errorMsg );
124 bool processData(
const QByteArray &data,
bool atEnd );
184 void startElement(
const XML_Char *el,
const XML_Char **attr );
185 void endElement(
const XML_Char *el );
186 void characters(
const XML_Char *chars,
int len );
187 static void start(
void *data,
const XML_Char *el,
const XML_Char **attr )
189 static_cast<QgsGmlStreamingParser *
>( data )->startElement( el, attr );
191 static void end(
void *data,
const XML_Char *el )
193 static_cast<QgsGmlStreamingParser *
>( data )->endElement( el );
195 static void chars(
void *data,
const XML_Char *chars,
int len )
197 static_cast<QgsGmlStreamingParser *
>( data )->characters( chars, len );
201 void addStringContentToJson();
204 void setAttribute(
const QString &name,
const QString &value );
213 int readSrsNameAndDimensionAttributes(
const XML_Char **attr );
221 QString readAttribute(
const QString &attributeName,
const XML_Char **attr )
const;
223 bool createBBoxFromCoordinateString( QgsRectangle &bb,
const QString &coordString )
const;
232 int pointsFromCoordinateString( QList<QgsPoint> &points,
const QString &coordString,
int *dimension =
nullptr )
const;
241 int pointsFromPosListString( QList<QgsPoint> &points,
const QString &coordString,
int dimension )
const;
243 int pointsFromString( QList<QgsPoint> &points,
const QString &coordString,
int *dimension =
nullptr )
const;
244 int getPointWKB( QByteArray &wkbPtr,
const QgsPoint &,
int dimension )
const;
245 int getLineWKB( QByteArray &wkbPtr,
const QList<QgsPoint> &lineCoordinates,
int dimension )
const;
246 int getRingWKB( QByteArray &wkbPtr,
const QList<QgsPoint> &ringCoordinates,
int dimension )
const;
254 int createMultiLineFromFragments();
255 int createMultiPointFromFragments();
256 int createPolygonFromFragments();
257 int createMultiPolygonFromFragments();
259 int totalWKBFragmentSize()
const;
262 ParseMode modeStackTop() {
return mParseModeStack.isEmpty() ?
None : mParseModeStack.top(); }
265 ParseMode modeStackPop() {
return mParseModeStack.isEmpty() ?
None : mParseModeStack.pop(); }
268 void createParser(
const QByteArray &encoding = QByteArray() );
271 XML_Parser mParser =
nullptr;
274 QVector<QgsGmlFeaturePtrGmlIdPair> mFeatureList;
277 QList<LayerProperties> mLayerProperties;
278 QMap< QString, LayerProperties > mMapTypeNameToProperties;
282 QByteArray mTypeNameBA;
283 const char *mTypeNamePtr =
nullptr;
284 size_t mTypeNameUTF8Len;
291 QString mGeometryAttribute;
292 QByteArray mGeometryAttributeBA;
293 const char *mGeometryAttributePtr =
nullptr;
294 size_t mGeometryAttributeUTF8Len;
297 QMap<QString, QPair<int, QgsField> > mThematicAttributes;
298 QMap<QString, QPair<QString, bool>> mMapXPathToFieldNameAndIsNestedContent;
299 QMap<QString, QString> mMapNamespaceURIToNamespacePrefix;
302 QString mExceptionText;
303 bool mTruncatedResponse;
306 int mFeatureTupleDepth;
307 QString mCurrentTypename;
309 QStack<ParseMode> mParseModeStack;
310 QString mCurrentXPathWithinFeature;
313 QgsFeature *mCurrentFeature =
nullptr;
314 QVector<QVariant> mCurrentAttributes;
315 QString mCurrentFeatureId;
318 QByteArray mCurrentWKB;
319 QgsRectangle mCurrentExtent;
320 bool mBoundedByNullFound;
328 QList< QList< QByteArray > > mCurrentWKBFragments;
329 QString mAttributeName;
330 int mAttributeDepth = -1;
331 bool mAttributeValIsNested =
false;
333 QMap< QString, QString > mMapFieldNameToJSONContent;
334 nlohmann::json mAttributeJson;
335 QStack<nlohmann::json *> mAttributeJsonCurrentStack;
338 QString mCoordinateSeparator;
340 QString mTupleSeparator;
342 QStack<int> mDimensionStack;
350 int mDimensionForCurSrsName = 0;
352 QgsRectangle mLayerExtent;
354 QString mGMLNameSpaceURI;
355 const char *mGMLNameSpaceURIPtr =
nullptr;
357 AxisOrientationLogic mAxisOrientationLogic;
359 bool mInvertAxisOrientationRequest;
361 bool mInvertAxisOrientation;
367 std::string mGeometryString;
369 bool mFoundUnhandledGeometryElement;
371 QTextCodec *mCodec =
nullptr;