QgsGeometry* QgsDelimitedTextFeatureIterator::loadGeometryWkt( const QStringList& tokens, bool &isNull )
{
  QgsGeometry* geom = nullptr;
  QString sWkt = tokens[mSource->mWktFieldIndex];
  if ( sWkt.isEmpty() )
  {
    isNull = true;
    return nullptr;
  }

  isNull = false;
  geom = QgsDelimitedTextProvider::geomFromWkt( sWkt, mSource->mWktHasPrefix );

  if ( geom && geom->type() != mSource->mGeometryType )
  {
    delete geom;
    geom = nullptr;
  }
  if ( geom && ! wantGeometry( geom ) )
  {
    delete geom;
    geom = nullptr;
  }
  return geom;
}
QgsGeometry* QgsDelimitedTextFeatureIterator::loadGeometryXY( const QStringList& tokens )
{
  QString sX = tokens[mSource->mXFieldIndex];
  QString sY = tokens[mSource->mYFieldIndex];
  QgsPoint pt;
  bool ok = QgsDelimitedTextProvider::pointFromXY( sX, sY, pt, mSource->mDecimalPoint, mSource->mXyDms );

  if ( ok && wantGeometry( pt ) )
  {
    return QgsGeometry::fromPoint( pt );
  }
  return 0;
}
QgsGeometry* QgsDelimitedTextFeatureIterator::loadGeometryWkt( const QStringList& tokens )
{
  QgsGeometry* geom = 0;
  QString sWkt = tokens[mSource->mWktFieldIndex];

  geom = QgsDelimitedTextProvider::geomFromWkt( sWkt, mSource->mWktHasPrefix, mSource->mWktHasZM );

  if ( geom && geom->type() != mSource->mGeometryType )
  {
    delete geom;
    geom = 0;
  }
  if ( geom && ! wantGeometry( geom ) )
  {
    delete geom;
    geom = 0;
  }
  return geom;
}
QgsGeometry* QgsDelimitedTextFeatureIterator::loadGeometryXY( const QStringList& tokens, bool &isNull )
{
  QString sX = tokens[mSource->mXFieldIndex];
  QString sY = tokens[mSource->mYFieldIndex];
  if ( sX.isEmpty() && sY.isEmpty() )
  {
    isNull = true;
    return nullptr;
  }
  isNull = false;
  QgsPoint pt;
  bool ok = QgsDelimitedTextProvider::pointFromXY( sX, sY, pt, mSource->mDecimalPoint, mSource->mXyDms );

  if ( ok && wantGeometry( pt ) )
  {
    return QgsGeometry::fromPoint( pt );
  }
  return nullptr;
}