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 );
132 QVector<QgsGmlFeaturePtrGmlIdPair> getAndStealReadyFeatures();
187 void startElement(
const XML_Char *el,
const XML_Char **attr );
188 void endElement(
const XML_Char *el );
189 void characters(
const XML_Char *chars,
int len );
190 static void start(
void *data,
const XML_Char *el,
const XML_Char **attr )
194 static void end(
void *data,
const XML_Char *el )
198 static void chars(
void *data,
const XML_Char *chars,
int len )
204 void addStringContentToJson();
207 void setAttribute(
const QString &name,
const QString &value );
217 int readEpsgFromAttribute(
int &epsgNr,
const XML_Char **attr );
225 QString readAttribute(
const QString &attributeName,
const XML_Char **attr )
const;
227 bool createBBoxFromCoordinateString(
QgsRectangle &bb,
const QString &coordString )
const;
236 int pointsFromCoordinateString( QList<QgsPoint> &points,
const QString &coordString,
int *dimension =
nullptr )
const;
245 int pointsFromPosListString( QList<QgsPoint> &points,
const QString &coordString,
int dimension )
const;
247 int pointsFromString( QList<QgsPoint> &points,
const QString &coordString,
int *dimension =
nullptr )
const;
248 int getPointWKB( QByteArray &wkbPtr,
const QgsPoint &,
int dimension )
const;
249 int getLineWKB( QByteArray &wkbPtr,
const QList<QgsPoint> &lineCoordinates,
int dimension )
const;
250 int getRingWKB( QByteArray &wkbPtr,
const QList<QgsPoint> &ringCoordinates,
int dimension )
const;
258 int createMultiLineFromFragments();
259 int createMultiPointFromFragments();
260 int createPolygonFromFragments();
261 int createMultiPolygonFromFragments();
263 int totalWKBFragmentSize()
const;
266 ParseMode modeStackTop() {
return mParseModeStack.isEmpty() ?
None : mParseModeStack.top(); }
269 ParseMode modeStackPop() {
return mParseModeStack.isEmpty() ?
None : mParseModeStack.pop(); }
272 void createParser(
const QByteArray &encoding = QByteArray() );
275 XML_Parser mParser =
nullptr;
278 QVector<QgsGmlFeaturePtrGmlIdPair> mFeatureList;
281 QList<LayerProperties> mLayerProperties;
282 QMap< QString, LayerProperties > mMapTypeNameToProperties;
286 QByteArray mTypeNameBA;
287 const char *mTypeNamePtr =
nullptr;
288 size_t mTypeNameUTF8Len;
295 QString mGeometryAttribute;
296 QByteArray mGeometryAttributeBA;
297 const char *mGeometryAttributePtr =
nullptr;
298 size_t mGeometryAttributeUTF8Len;
301 QMap<QString, QPair<int, QgsField> > mThematicAttributes;
302 QMap<QString, QPair<QString, bool>> mMapXPathToFieldNameAndIsNestedContent;
303 QMap<QString, QString> mMapNamespaceURIToNamespacePrefix;
306 QString mExceptionText;
307 bool mTruncatedResponse;
310 int mFeatureTupleDepth;
311 QString mCurrentTypename;
313 QStack<ParseMode> mParseModeStack;
314 QString mCurrentXPathWithinFeature;
318 QVector<QVariant> mCurrentAttributes;
319 QString mCurrentFeatureId;
322 QByteArray mCurrentWKB;
324 bool mBoundedByNullFound;
332 QList< QList< QByteArray > > mCurrentWKBFragments;
333 QString mAttributeName;
334 int mAttributeDepth = -1;
335 bool mAttributeValIsNested =
false;
337 QMap< QString, QString > mMapFieldNameToJSONContent;
338 nlohmann::json mAttributeJson;
339 QStack<nlohmann::json *> mAttributeJsonCurrentStack;
342 QString mCoordinateSeparator;
344 QString mTupleSeparator;
346 QStack<int> mDimensionStack;
358 QString mGMLNameSpaceURI;
359 const char *mGMLNameSpaceURIPtr =
nullptr;
361 AxisOrientationLogic mAxisOrientationLogic;
363 bool mInvertAxisOrientationRequest;
365 bool mInvertAxisOrientation;
371 std::string mGeometryString;
373 bool mFoundUnhandledGeometryElement;
375 QTextCodec *mCodec =
nullptr;
394 const QString &geometryAttribute,
409 int getFeatures(
const QString &uri,
412 const QString &userName = QString(),
413 const QString &password = QString(),
414 const QString &authcfg = QString() )
SIP_PYNAME( getFeaturesUri );
424 QMap<QgsFeatureId, QgsFeature * >
featuresMap()
const {
return mFeatures; }
427 QMap<QgsFeatureId, QString >
idsMap()
const {
return mIdMap; }
463 void handleProgressEvent( qint64 progress, qint64 totalSteps );
473 void calculateExtentFromFeatures();
475 void fillMapsFromParser();
487 QMap<QgsFeatureId, QgsFeature * > mFeatures;
492 QMap<QgsFeatureId, QString > mIdMap;