83 } AxisOrientationLogic;
87 const QString &typeName,
const QString &geometryAttribute,
const QgsFields &fields, AxisOrientationLogic axisOrientationLogic = Honour_EPSG_if_urn,
bool invertAxisOrientation =
false
92 const QList<LayerProperties> &layerProperties,
94 const QMap< QString, QPair<QString, QString> > &fieldNameToSrcLayerNameFieldNameMap,
95 AxisOrientationLogic axisOrientationLogic = Honour_EPSG_if_urn,
96 bool invertAxisOrientation =
false
108 void setFieldsXPath(
const QMap<QString, QPair<QString, bool>> &fieldNameToSrcLayerNameFieldNameMap,
const QMap<QString, QString> &namespacePrefixToURIMap );
114 bool processData(
const QByteArray &data,
bool atEnd, QString &errorMsg );
120 bool processData(
const QByteArray &data,
bool atEnd );
179 void startElement(
const XML_Char *el,
const XML_Char **attr );
180 void endElement(
const XML_Char *el );
181 void characters(
const XML_Char *chars,
int len );
182 static void start(
void *data,
const XML_Char *el,
const XML_Char **attr ) {
static_cast<QgsGmlStreamingParser *
>( data )->startElement( el, attr ); }
183 static void end(
void *data,
const XML_Char *el ) {
static_cast<QgsGmlStreamingParser *
>( data )->endElement( el ); }
184 static void chars(
void *data,
const XML_Char *chars,
int len ) {
static_cast<QgsGmlStreamingParser *
>( data )->characters( chars, len ); }
187 void addStringContentToJson();
190 void setAttribute(
const QString &name,
const QString &value );
199 int readSrsNameAndDimensionAttributes(
const XML_Char **attr );
207 QString readAttribute(
const QString &attributeName,
const XML_Char **attr )
const;
209 bool createBBoxFromCoordinateString( QgsRectangle &bb,
const QString &coordString )
const;
218 int pointsFromCoordinateString( QList<QgsPoint> &points,
const QString &coordString,
int *dimension =
nullptr )
const;
227 int pointsFromPosListString( QList<QgsPoint> &points,
const QString &coordString,
int dimension )
const;
229 int pointsFromString( QList<QgsPoint> &points,
const QString &coordString,
int *dimension =
nullptr )
const;
230 int getPointWKB( QByteArray &wkbPtr,
const QgsPoint &,
int dimension )
const;
231 int getLineWKB( QByteArray &wkbPtr,
const QList<QgsPoint> &lineCoordinates,
int dimension )
const;
232 int getRingWKB( QByteArray &wkbPtr,
const QList<QgsPoint> &ringCoordinates,
int dimension )
const;
240 int createMultiLineFromFragments();
241 int createMultiPointFromFragments();
242 int createPolygonFromFragments();
243 int createMultiPolygonFromFragments();
245 int totalWKBFragmentSize()
const;
248 ParseMode modeStackTop() {
return mParseModeStack.isEmpty() ?
None : mParseModeStack.top(); }
251 ParseMode modeStackPop() {
return mParseModeStack.isEmpty() ?
None : mParseModeStack.pop(); }
254 void createParser(
const QByteArray &encoding = QByteArray() );
257 XML_Parser mParser =
nullptr;
260 QVector<QgsGmlFeaturePtrGmlIdPair> mFeatureList;
263 QList<LayerProperties> mLayerProperties;
264 QMap< QString, LayerProperties > mMapTypeNameToProperties;
268 QByteArray mTypeNameBA;
269 const char *mTypeNamePtr =
nullptr;
270 size_t mTypeNameUTF8Len;
277 QString mGeometryAttribute;
278 QByteArray mGeometryAttributeBA;
279 const char *mGeometryAttributePtr =
nullptr;
280 size_t mGeometryAttributeUTF8Len;
283 QMap<QString, QPair<int, QgsField> > mThematicAttributes;
284 QMap<QString, QPair<QString, bool>> mMapXPathToFieldNameAndIsNestedContent;
285 QMap<QString, QString> mMapNamespaceURIToNamespacePrefix;
288 QString mExceptionText;
289 bool mTruncatedResponse;
292 int mFeatureTupleDepth;
293 QString mCurrentTypename;
295 QStack<ParseMode> mParseModeStack;
296 QString mCurrentXPathWithinFeature;
299 QgsFeature *mCurrentFeature =
nullptr;
300 QVector<QVariant> mCurrentAttributes;
301 QString mCurrentFeatureId;
304 QByteArray mCurrentWKB;
305 QgsRectangle mCurrentExtent;
306 bool mBoundedByNullFound;
314 QList< QList< QByteArray > > mCurrentWKBFragments;
315 QString mAttributeName;
316 int mAttributeDepth = -1;
317 bool mAttributeValIsNested =
false;
319 QMap< QString, QString > mMapFieldNameToJSONContent;
320 nlohmann::json mAttributeJson;
321 QStack<nlohmann::json *> mAttributeJsonCurrentStack;
324 QString mCoordinateSeparator;
326 QString mTupleSeparator;
328 QStack<int> mDimensionStack;
336 int mDimensionForCurSrsName = 0;
338 QgsRectangle mLayerExtent;
340 QString mGMLNameSpaceURI;
341 const char *mGMLNameSpaceURIPtr =
nullptr;
343 AxisOrientationLogic mAxisOrientationLogic;
345 bool mInvertAxisOrientationRequest;
347 bool mInvertAxisOrientation;
353 std::string mGeometryString;
355 bool mFoundUnhandledGeometryElement;
357 QTextCodec *mCodec =
nullptr;