update calls to new api

This commit is contained in:
Juergen E. Fischer 2013-01-29 01:18:42 +01:00
parent 94491b8479
commit dc728f6c39
65 changed files with 338 additions and 284 deletions

View File

@ -67,13 +67,14 @@ int QgsInterpolator::cacheBaseData()
attList.push_back( v_it->interpolationAttribute );
}
vlayer->select( attList );
QgsFeature theFeature;
double attributeValue = 0.0;
bool attributeConversionOk = false;
while ( vlayer->nextFeature( theFeature ) )
QgsFeatureIterator fit = vlayer->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( attList ) );
QgsFeature theFeature;
while ( fit.nextFeature( theFeature ) )
{
if ( !v_it->zCoordInterpolation )
{

View File

@ -113,8 +113,10 @@ void QgsTINInterpolator::initialize()
{
attList.push_back( layerDataIt->interpolationAttribute );
}
layerDataIt->vectorLayer->select( attList );
while ( layerDataIt->vectorLayer->nextFeature( f ) )
QgsFeatureIterator fit = layerDataIt->vectorLayer->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( attList ) );
while ( fit.nextFeature( f ) )
{
if ( mShowProgressDialog )
{

View File

@ -158,11 +158,12 @@ void QgsLineVectorLayerDirector::makeGraph( QgsGraphBuilderInterface *builder, c
//Graph's points;
QVector< QgsPoint > points;
QgsFeatureIterator fit = vl->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( QgsAttributeList() ) );
// begin: tie points to the graph
QgsAttributeList la;
vl->select( la );
QgsFeature feature;
while ( vl->nextFeature( feature ) )
while ( fit.nextFeature( feature ) )
{
QgsMultiPolyline mpl;
if ( feature.geometry()->wkbType() == QGis::WKBMultiLineString )
@ -233,7 +234,6 @@ void QgsLineVectorLayerDirector::makeGraph( QgsGraphBuilderInterface *builder, c
QVector< QgsPoint >::iterator tmp = std::unique( points.begin(), points.end() );
points.resize( tmp - points.begin() );
for ( i = 0;i < points.size();++i )
builder->addVertex( i, points[ i ] );
@ -242,7 +242,8 @@ void QgsLineVectorLayerDirector::makeGraph( QgsGraphBuilderInterface *builder, c
qSort( pointLengthMap.begin(), pointLengthMap.end(), TiePointInfoCompare );
{ // fill attribute list 'la'
{
// fill attribute list 'la'
QgsAttributeList tmpAttr;
if ( mDirectionFieldId != -1 )
{
@ -277,8 +278,8 @@ void QgsLineVectorLayerDirector::makeGraph( QgsGraphBuilderInterface *builder, c
} // end fill attribute list 'la'
// begin graph construction
vl->select( la );
while ( vl->nextFeature( feature ) )
fit = vl->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( la ) );
while ( fit.nextFeature( feature ) )
{
int directionType = mDefaultDirection;

View File

@ -73,7 +73,7 @@ bool QgsGeometryAnalyzer::simplify( QgsVectorLayer* layer,
{
break;
}
if ( !layer->featureAtId( *it, currentFeature, true, true ) )
if ( !layer->getFeatures( QgsFeatureRequest().setFilterFid( *it ) ).nextFeature( currentFeature ) )
{
continue;
}
@ -89,8 +89,7 @@ bool QgsGeometryAnalyzer::simplify( QgsVectorLayer* layer,
//take all features
else
{
layer->select( layer->pendingAllAttributesList(), QgsRectangle(), true, false );
QgsFeatureIterator fit = layer->getFeatures();
int featureCount = layer->featureCount();
if ( p )
@ -99,7 +98,7 @@ bool QgsGeometryAnalyzer::simplify( QgsVectorLayer* layer,
}
int processedFeatures = 0;
while ( layer->nextFeature( currentFeature ) )
while ( fit.nextFeature( currentFeature ) )
{
if ( p )
{
@ -189,7 +188,7 @@ bool QgsGeometryAnalyzer::centroids( QgsVectorLayer* layer, const QString& shape
{
break;
}
if ( !layer->featureAtId( *it, currentFeature, true, true ) )
if ( !layer->getFeatures( QgsFeatureRequest().setFilterFid( *it ) ).nextFeature( currentFeature ) )
{
continue;
}
@ -205,7 +204,7 @@ bool QgsGeometryAnalyzer::centroids( QgsVectorLayer* layer, const QString& shape
//take all features
else
{
layer->select( layer->pendingAllAttributesList(), QgsRectangle(), true, false );
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( QgsAttributeList() ) );
int featureCount = layer->featureCount();
if ( p )
@ -214,7 +213,7 @@ bool QgsGeometryAnalyzer::centroids( QgsVectorLayer* layer, const QString& shape
}
int processedFeatures = 0;
while ( layer->nextFeature( currentFeature ) )
while ( fit.nextFeature( currentFeature ) )
{
if ( p )
{
@ -435,7 +434,7 @@ bool QgsGeometryAnalyzer::convexHull( QgsVectorLayer* layer, const QString& shap
return false;
}
#endif
if ( !layer->featureAtId( *it, currentFeature, true, true ) )
if ( !layer->getFeatures( QgsFeatureRequest().setFilterFid( *it ) ).nextFeature( currentFeature ) )
{
continue;
}
@ -444,8 +443,8 @@ bool QgsGeometryAnalyzer::convexHull( QgsVectorLayer* layer, const QString& shap
}
else
{
layer->select( layer->pendingAllAttributesList(), QgsRectangle(), true, false );
while ( layer->nextFeature( currentFeature ) )
QgsFeatureIterator fit = layer->getFeatures();
while ( fit.nextFeature( currentFeature ) )
{
#if 0
if ( p )
@ -489,7 +488,7 @@ bool QgsGeometryAnalyzer::convexHull( QgsVectorLayer* layer, const QString& shap
{
p->setValue( processedFeatures );
}
if ( !layer->featureAtId( jt.value(), currentFeature, true, true ) )
if ( !layer->getFeatures( QgsFeatureRequest().setFilterFid( jt.value() ) ).nextFeature( currentFeature ) )
{
continue;
}
@ -535,7 +534,7 @@ bool QgsGeometryAnalyzer::convexHull( QgsVectorLayer* layer, const QString& shap
{
break;
}
if ( !layer->featureAtId( jt.value(), currentFeature, true, true ) )
if ( !layer->getFeatures( QgsFeatureRequest().setFilterFid( jt.value() ) ).nextFeature( currentFeature ) )
{
continue;
}
@ -629,7 +628,7 @@ bool QgsGeometryAnalyzer::dissolve( QgsVectorLayer* layer, const QString& shapef
QgsFeatureIds::const_iterator it = selection.constBegin();
for ( ; it != selection.constEnd(); ++it )
{
if ( !layer->featureAtId( *it, currentFeature, true, true ) )
if ( !layer->getFeatures( QgsFeatureRequest().setFilterFid( *it ) ).nextFeature( currentFeature ) )
{
continue;
}
@ -638,8 +637,8 @@ bool QgsGeometryAnalyzer::dissolve( QgsVectorLayer* layer, const QString& shapef
}
else
{
layer->select( layer->pendingAllAttributesList(), QgsRectangle(), true, false );
while ( layer->nextFeature( currentFeature ) )
QgsFeatureIterator fit = layer->getFeatures();
while ( fit.nextFeature( currentFeature ) )
{
map.insert( currentFeature.attribute( uniqueIdField ).toString(), currentFeature.id() );
}
@ -674,7 +673,7 @@ bool QgsGeometryAnalyzer::dissolve( QgsVectorLayer* layer, const QString& shapef
{
p->setValue( processedFeatures );
}
if ( !layer->featureAtId( jt.value(), currentFeature, true, true ) )
if ( !layer->getFeatures( QgsFeatureRequest().setFilterFid( jt.value() ) ).nextFeature( currentFeature ) )
{
continue;
}
@ -708,7 +707,7 @@ bool QgsGeometryAnalyzer::dissolve( QgsVectorLayer* layer, const QString& shapef
{
break;
}
if ( !layer->featureAtId( jt.value(), currentFeature, true, true ) )
if ( !layer->getFeatures( QgsFeatureRequest().setFilterFid( jt.value() ) ).nextFeature( currentFeature ) )
{
continue;
}
@ -798,7 +797,7 @@ bool QgsGeometryAnalyzer::buffer( QgsVectorLayer* layer, const QString& shapefil
{
break;
}
if ( !layer->featureAtId( *it, currentFeature, true, true ) )
if ( !layer->getFeatures( QgsFeatureRequest().setFilterFid( *it ) ).nextFeature( currentFeature ) )
{
continue;
}
@ -814,8 +813,7 @@ bool QgsGeometryAnalyzer::buffer( QgsVectorLayer* layer, const QString& shapefil
//take all features
else
{
layer->select( layer->pendingAllAttributesList(), QgsRectangle(), true, false );
QgsFeatureIterator fit = layer->getFeatures();
int featureCount = layer->featureCount();
if ( p )
@ -824,7 +822,7 @@ bool QgsGeometryAnalyzer::buffer( QgsVectorLayer* layer, const QString& shapefil
}
int processedFeatures = 0;
while ( layer->nextFeature( currentFeature ) )
while ( fit.nextFeature( currentFeature ) )
{
if ( p )
{
@ -920,10 +918,9 @@ bool QgsGeometryAnalyzer::eventLayer( QgsVectorLayer* lineLayer, QgsVectorLayer*
//create line field / id map for line layer
QMultiHash< QString, QgsFeatureId > lineLayerIdMap; //1:n possible (e.g. several linear reference geometries for one feature in the event layer)
lineLayer->select( QgsAttributeList() << lineField,
QgsRectangle(), false, false );
QgsFeatureIterator fit = lineLayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( QgsAttributeList() << lineField ) );
QgsFeature fet;
while ( lineLayer->nextFeature( fet ) )
while ( fit.nextFeature( fet ) )
{
lineLayerIdMap.insert( fet.attribute( lineField ).toString(), fet.id() );
}
@ -955,7 +952,7 @@ bool QgsGeometryAnalyzer::eventLayer( QgsVectorLayer* lineLayer, QgsVectorLayer*
}
//iterate over eventLayer and write new features to output file or layer
eventLayer->select( eventLayer->pendingAllAttributesList(), QgsRectangle(), false, false );
fit = eventLayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ) );
QgsGeometry* lrsGeom = 0;
QgsFeature lineFeature;
double measure1, measure2 = 0.0;
@ -971,7 +968,7 @@ bool QgsGeometryAnalyzer::eventLayer( QgsVectorLayer* lineLayer, QgsVectorLayer*
p->show();
}
while ( eventLayer->nextFeature( fet ) )
while ( fit.nextFeature( fet ) )
{
nOutputFeatures = 0;
@ -996,7 +993,7 @@ bool QgsGeometryAnalyzer::eventLayer( QgsVectorLayer* lineLayer, QgsVectorLayer*
QList<QgsFeatureId>::const_iterator featureIdIt = featureIdList.constBegin();
for ( ; featureIdIt != featureIdList.constEnd(); ++featureIdIt )
{
if ( !lineLayer->featureAtId( *featureIdIt, lineFeature, true, false ) )
if ( !lineLayer->getFeatures( QgsFeatureRequest().setFilterFid( *featureIdIt ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( lineFeature ) )
{
continue;
}

View File

@ -60,7 +60,7 @@ bool QgsOverlayAnalyzer::intersection( QgsVectorLayer* layerA, QgsVectorLayer* l
QgsFeatureIds::const_iterator it = selectionB.constBegin();
for ( ; it != selectionB.constEnd(); ++it )
{
if ( !layerB->featureAtId( *it, currentFeature, true, true ) )
if ( !layerB->getFeatures( QgsFeatureRequest().setFilterFid( *it ) ).nextFeature( currentFeature ) )
{
continue;
}
@ -86,7 +86,7 @@ bool QgsOverlayAnalyzer::intersection( QgsVectorLayer* layerA, QgsVectorLayer* l
{
break;
}
if ( !layerA->featureAtId( *it, currentFeature, true, true ) )
if ( !layerA->getFeatures( QgsFeatureRequest().setFilterFid( *it ) ).nextFeature( currentFeature ) )
{
continue;
}
@ -102,13 +102,11 @@ bool QgsOverlayAnalyzer::intersection( QgsVectorLayer* layerA, QgsVectorLayer* l
//take all features
else
{
layerB->select( layerB->pendingAllAttributesList(), QgsRectangle(), true, false );
while ( layerB->nextFeature( currentFeature ) )
QgsFeatureIterator fit = layerB->getFeatures();
while ( fit.nextFeature( currentFeature ) )
{
index.insertFeature( currentFeature );
}
QgsFeature currentFeature;
layerA->select( layerA->pendingAllAttributesList(), QgsRectangle(), true, false );
int featureCount = layerA->featureCount();
if ( p )
@ -117,7 +115,10 @@ bool QgsOverlayAnalyzer::intersection( QgsVectorLayer* layerA, QgsVectorLayer* l
}
int processedFeatures = 0;
while ( layerA->nextFeature( currentFeature ) )
fit = layerA->getFeatures();
QgsFeature currentFeature;
while ( fit.nextFeature( currentFeature ) )
{
if ( p )
{
@ -156,7 +157,7 @@ void QgsOverlayAnalyzer::intersectFeature( QgsFeature& f, QgsVectorFileWriter* v
QgsFeature outFeature;
for ( ; it != intersects.constEnd(); ++it )
{
if ( !vl->featureAtId( *it, overlayFeature, true, true ) )
if ( !vl->getFeatures( QgsFeatureRequest().setFilterFid( *it ) ).nextFeature( overlayFeature ) )
{
continue;
}
@ -192,7 +193,7 @@ void QgsOverlayAnalyzer::combineFieldLists( QgsFields& fieldListA, const QgsFiel
int count = 0;
while ( names.contains( field.name() ) )
{
QString name = QString("%1_%2").arg( field.name() ).arg( count );
QString name = QString( "%1_%2" ).arg( field.name() ).arg( count );
field = QgsField( name, field.type() );
++count;
}

View File

@ -140,7 +140,6 @@ int QgsZonalStatistics::calculateStatistics( QProgressDialog* p )
QgsFeatureRequest request;
request.setSubsetOfAttributes( QgsAttributeList() );
QgsFeatureIterator fi = vectorProvider->getFeatures( request );
//vectorProvider->select( QgsAttributeList(), QgsRectangle(), true, false );
QgsFeature f;
double count = 0;
double sum = 0;

View File

@ -687,11 +687,11 @@ void QgsLegendLayer::updateItemListCount( QgsVectorLayer* layer, const QList<Qgs
p.setWindowModality( Qt::WindowModal );
int featuresCounted = 0;
layer->select( layer->pendingAllAttributesList(), QgsRectangle(), false, false );
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ) );
QgsFeature f;
QgsSymbol* currentSymbol = 0;
while ( layer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
currentSymbol = renderer->symbolForFeature( &f );
if ( currentSymbol )

View File

@ -148,7 +148,7 @@ void QgsMapToolNodeTool::createTopologyRubberBands( QgsVectorLayer* vlayer, cons
int tVertexFirst = tVertex; // vertex number to check for cycling
QgsFeature topolFeature;
vlayer->featureAtId( resultIt.value().snappedAtGeometry, topolFeature, true, false );
vlayer->getFeatures( QgsFeatureRequest().setFilterFid( resultIt.value().snappedAtGeometry ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( topolFeature );
QgsGeometry* topolGeometry = topolFeature.geometry();
while ( tVertex != -1 ) // looking for first vertex to rubberband

View File

@ -75,7 +75,7 @@ void QgsSelectedFeature::updateGeometry( QgsGeometry *geom )
if ( !geom )
{
QgsFeature f;
mVlayer->featureAtId( mFeatureId, f );
mVlayer->getFeatures( QgsFeatureRequest().setFilterFid( mFeatureId ) ).nextFeature( f );
mGeometry = new QgsGeometry( *f.geometry() );
}
else

View File

@ -261,7 +261,7 @@ QgsAttributeDialog::QgsAttributeDialog( QgsVectorLayer *vl, QgsFeature *thepFeat
if ( !mFeature->geometry() && exp.needsGeometry() )
{
QgsFeature f;
if ( vl->featureAtId( mFeature->id(), f, true, false ) && f.geometry() )
if ( vl->getFeatures( QgsFeatureRequest().setFilterFid( mFeature->id() ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) && f.geometry() )
{
mFeature->setGeometry( *f.geometry() );
}

View File

@ -577,10 +577,13 @@ void QgsAttributeTableDialog::doSearch( QString searchString )
}
else
{
mLayer->select( mLayer->pendingAllAttributesList(), QgsRectangle(), fetchGeom );
QgsFeature f;
QgsFeatureRequest r;
if ( !fetchGeom )
r.setFlags( QgsFeatureRequest::NoGeometry );
QgsFeatureIterator fit = mLayer->getFeatures( r );
while ( mLayer->nextFeature( f ) )
QgsFeature f;
while ( fit.nextFeature( f ) )
{
if ( search.evaluate( &f ).toInt() != 0 )
mSelectedFeatures << f.id();

View File

@ -310,9 +310,11 @@ void QgsAttributeTypeDialog::setIndex( int index, QgsVectorLayer::EditType editT
setWindowTitle( defaultWindowTitle() + " \"" + mLayer->pendingFields()[index].name() + "\"" );
QgsAttributeList attributeList = QgsAttributeList();
attributeList.append( index );
mLayer->select( attributeList, QgsRectangle(), false );
QgsFeatureIterator fit = mLayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( attributeList ) );
QgsFeature f;
QString text;
//calculate min and max for range for this field
if ( mLayer->pendingFields()[index].type() == QVariant::Int )
@ -321,7 +323,7 @@ void QgsAttributeTypeDialog::setIndex( int index, QgsVectorLayer::EditType editT
rangeWidget->addItems( QStringList() << tr( "Editable" ) << tr( "Slider" ) << tr( "Dial" ) );
int min = INT_MIN;
int max = INT_MAX;
while ( mLayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
QVariant val = f.attribute( index );
if ( val.isValid() && !val.isNull() )
@ -342,7 +344,7 @@ void QgsAttributeTypeDialog::setIndex( int index, QgsVectorLayer::EditType editT
rangeWidget->clear();
rangeWidget->addItems( QStringList() << tr( "Editable" ) << tr( "Slider" ) );
while ( mLayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
QVariant val = f.attribute( index );
if ( val.isValid() && !val.isNull() )

View File

@ -133,11 +133,12 @@ void QgsAttributeTypeLoadDialog::createPreview( int fieldIndex, bool full )
QgsAttributeList attributeList = QgsAttributeList();
attributeList.append( idx );
attributeList.append( idx2 );
vLayer->select( attributeList, QgsRectangle(), false );
QgsFeatureIterator fit = vLayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( attributeList ) );
QgsFeature f;
QMap<QString, QVariant> valueMap;
while ( vLayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
QVariant val1 = f.attribute( idx );
QVariant val2 = f.attribute( idx2 );
@ -183,10 +184,11 @@ void QgsAttributeTypeLoadDialog::loadDataToValueMap()
QgsAttributeList attributeList = QgsAttributeList();
attributeList.append( idx );
attributeList.append( idx2 );
vLayer->select( attributeList, QgsRectangle(), false );
QgsFeatureIterator fit = vLayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( attributeList ) );
QgsFeature f;
while ( vLayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
QVariant val = f.attribute( idx );
if ( val.isValid() && !val.isNull() && !val.toString().isEmpty() )

View File

@ -161,8 +161,8 @@ void QgsFieldCalculator::accept()
bool useGeometry = exp.needsGeometry();
int rownum = 1;
mVectorLayer->select( mVectorLayer->pendingAllAttributesList(), QgsRectangle(), useGeometry, false );
while ( mVectorLayer->nextFeature( feature ) )
QgsFeatureIterator fit = mVectorLayer->getFeatures( QgsFeatureRequest().setFlags( useGeometry ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) );
while ( fit.nextFeature( feature ) )
{
if ( onlySelected )
{

View File

@ -500,8 +500,8 @@ int QgsGraduatedSymbolDialog::quantilesFromVectorLayer( std::list<double>& resul
double currentValue;
int index = 0;
mVectorLayer->select( attList, QgsRectangle(), false );
while ( mVectorLayer->nextFeature( currentFeature ) )
QgsFeatureIterator fit = mVectorLayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( attList ) );
while ( fit.nextFeature( currentFeature ) )
{
currentValue = currentFeature.attribute( attributeIndex ).toDouble();
attributeValues[index] = currentValue;

View File

@ -871,7 +871,7 @@ void QgsIdentifyResults::highlightFeature( QTreeWidgetItem *item )
QgsFeatureId fid = STRING_TO_FID( featItem->data( 0, Qt::UserRole ) );
QgsFeature feat;
if ( !layer->featureAtId( fid, feat, true, false ) )
if ( !layer->getFeatures( QgsFeatureRequest().setFilterFid( fid ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( feat ) )
{
return;
}
@ -906,7 +906,7 @@ void QgsIdentifyResults::zoomToFeature()
int fid = STRING_TO_FID( featItem->data( 0, Qt::UserRole ) );
QgsFeature feat;
if ( ! layer->featureAtId( fid, feat, true, false ) )
if ( ! layer->getFeatures( QgsFeatureRequest().setFilterFid( fid ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( feat ) )
{
return;
}
@ -945,7 +945,7 @@ void QgsIdentifyResults::featureForm()
int idx = featItem->data( 0, Qt::UserRole + 1 ).toInt();
QgsFeature f;
if ( !vlayer->featureAtId( fid, f ) )
if ( !vlayer->getFeatures( QgsFeatureRequest().setFilterFid( fid ) ).nextFeature( f ) )
return;
QgsFeatureAction action( tr( "Attribute changes" ), f, vlayer, idx, -1, this );

View File

@ -50,7 +50,7 @@ void QgsLabelPropertyDialog::init( const QString& layerId, int featureId, const
}
QgsFeature f;
if ( !vlayer->featureAtId( featureId, f, false, true ) )
if ( !vlayer->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setFlags( QgsFeatureRequest::NoGeometry ) ).nextFeature( f ) )
{
return;
}

View File

@ -94,7 +94,7 @@ void QgsMapToolDeletePart::canvasReleaseEvent( QMouseEvent *e )
void QgsMapToolDeletePart::deletePart( QgsFeatureId fId, int beforeVertexNr, QgsVectorLayer* vlayer )
{
QgsFeature f;
vlayer->featureAtId( fId, f );
vlayer->getFeatures( QgsFeatureRequest().setFilterFid( fId ) ).nextFeature( f );
// find out the part number
QgsGeometry* g = f.geometry();

View File

@ -94,7 +94,7 @@ void QgsMapToolDeleteRing::canvasReleaseEvent( QMouseEvent *e )
void QgsMapToolDeleteRing::deleteRing( QgsFeatureId fId, int beforeVertexNr, QgsVectorLayer* vlayer )
{
QgsFeature f;
vlayer->featureAtId( fId, f );
vlayer->getFeatures( QgsFeatureRequest().setFilterFid( fId ) ).nextFeature( f );
QgsGeometry* g = f.geometry();
QGis::WkbType wkbtype = g->wkbType();

View File

@ -132,9 +132,9 @@ bool QgsMapToolFeatureAction::doAction( QgsVectorLayer *layer, int x, int y )
r = toLayerCoordinates( layer, r );
layer->select( layer->pendingAllAttributesList(), r, true, true );
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest().setFilterRect( r ).setFlags( QgsFeatureRequest::ExactIntersect ) );
QgsFeature f;
while ( layer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
featList << QgsFeature( f );
}
catch ( QgsCsException & cse )

View File

@ -240,9 +240,9 @@ bool QgsMapToolIdentify::identifyVectorLayer( QgsVectorLayer *layer, int x, int
r = toLayerCoordinates( layer, r );
layer->select( layer->pendingAllAttributesList(), r, true, true );
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest().setFilterRect( r ).setFlags( QgsFeatureRequest::ExactIntersect ) );
QgsFeature f;
while ( layer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
featureList << QgsFeature( f );
}
catch ( QgsCsException & cse )

View File

@ -178,7 +178,7 @@ QString QgsMapToolLabel::currentLabelText( int trunc )
{
int labelFieldId = vlayer->fieldNameIndex( labelField );
QgsFeature f;
if ( vlayer->featureAtId( mCurrentLabelPos.featureId, f, false, true ) )
if ( vlayer->getFeatures( QgsFeatureRequest().setFilterFid( mCurrentLabelPos.featureId ).setFlags( QgsFeatureRequest::NoGeometry ) ).nextFeature( f ) )
{
QString labelText = f.attribute( labelFieldId ).toString();
if ( trunc > 0 && labelText.length() > trunc )
@ -231,7 +231,10 @@ bool QgsMapToolLabel::currentFeature( QgsFeature& f, bool fetchGeom )
{
return false;
}
return vlayer->featureAtId( mCurrentLabelPos.featureId, f, fetchGeom, true );
return vlayer->getFeatures( QgsFeatureRequest()
.setFilterFid( mCurrentLabelPos.featureId )
.setFlags( fetchGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry )
).nextFeature( f );
}
QFont QgsMapToolLabel::labelFontCurrentFeature()
@ -247,7 +250,7 @@ QFont QgsMapToolLabel::labelFontCurrentFeature()
font = layerSettings.textFont;
QgsFeature f;
if ( vlayer->featureAtId( mCurrentLabelPos.featureId, f, false, true ) )
if ( vlayer->getFeatures( QgsFeatureRequest().setFilterFid( mCurrentLabelPos.featureId ).setFlags( QgsFeatureRequest::NoGeometry ) ).nextFeature( f ) )
{
const QgsAttributes& attributes = f.attributes();
QMap< QgsPalLayerSettings::DataDefinedProperties, int > ddProperties = layerSettings.dataDefinedProperties;
@ -440,7 +443,7 @@ bool QgsMapToolLabel::dataDefinedPosition( QgsVectorLayer* vlayer, int featureId
}
QgsFeature f;
if ( !vlayer->featureAtId( featureId, f, false, true ) )
if ( !vlayer->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setFlags( QgsFeatureRequest::NoGeometry ) ).nextFeature( f ) )
{
return false;
}
@ -490,7 +493,7 @@ bool QgsMapToolLabel::dataDefinedRotation( QgsVectorLayer* vlayer, int featureId
}
QgsFeature f;
if ( !vlayer->featureAtId( featureId, f, false, true ) )
if ( !vlayer->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setFlags( QgsFeatureRequest::NoGeometry ) ).nextFeature( f ) )
{
return false;
}
@ -525,7 +528,7 @@ bool QgsMapToolLabel::dataDefinedShowHide( QgsVectorLayer* vlayer, int featureId
}
QgsFeature f;
if ( !vlayer->featureAtId( featureId, f, false, true ) )
if ( !vlayer->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setFlags( QgsFeatureRequest::NoGeometry ) ).nextFeature( f ) )
{
return false;
}

View File

@ -75,7 +75,7 @@ void QgsMapToolMoveFeature::canvasPressEvent( QMouseEvent * e )
if ( vlayer->selectedFeatureCount() == 0 )
{
vlayer->select( QgsAttributeList(), selectRect, true );
QgsFeatureIterator fit = vlayer->getFeatures( QgsFeatureRequest().setFilterRect( selectRect ).setSubsetOfAttributes( QgsAttributeList() ) );
//find the closest feature
QgsGeometry* pointGeometry = QgsGeometry::fromPoint( layerCoords );
@ -88,7 +88,7 @@ void QgsMapToolMoveFeature::canvasPressEvent( QMouseEvent * e )
QgsFeature cf;
QgsFeature f;
while ( vlayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
if ( f.geometry() )
{

View File

@ -71,7 +71,7 @@ void QgsMapToolOffsetCurve::canvasPressEvent( QMouseEvent* e )
mSourceLayerId = snapResult.layer->id();
QgsVectorLayer* vl = dynamic_cast<QgsVectorLayer*>( QgsMapLayerRegistry::instance()->mapLayer( mSourceLayerId ) );
if ( vl && vl->featureAtId( snapResult.snappedAtGeometry, fet ) )
if ( vl && vl->getFeatures( QgsFeatureRequest().setFilterFid( snapResult.snappedAtGeometry ) ).nextFeature( fet ) )
{
mForceCopy = ( e->modifiers() & Qt::ControlModifier ); //no geometry modification if ctrl is pressed
mOriginalGeometry = createOriginGeometry( vl, snapResult, fet );

View File

@ -83,13 +83,13 @@ void QgsMapToolReshape::canvasReleaseEvent( QMouseEvent * e )
}
//query all the features that intersect bounding box of capture line
vlayer->select( QgsAttributeList(), bbox, true, false );
QgsFeatureIterator fit = vlayer->getFeatures( QgsFeatureRequest().setFilterRect( bbox ).setSubsetOfAttributes( QgsAttributeList() ) );
QgsFeature f;
int reshapeReturn;
bool reshapeDone = false;
vlayer->beginEditCommand( tr( "Reshape" ) );
while ( vlayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
//query geometry
//call geometry->reshape(mCaptureList)

View File

@ -106,7 +106,7 @@ void QgsMapToolRotateFeature::canvasPressEvent( QMouseEvent * e )
if ( vlayer->selectedFeatureCount() == 0 )
{
vlayer->select( QgsAttributeList(), selectRect, true );
QgsFeatureIterator fit = vlayer->getFeatures( QgsFeatureRequest().setFilterRect( selectRect ).setSubsetOfAttributes( QgsAttributeList() ) );
//find the closest feature
QgsGeometry* pointGeometry = QgsGeometry::fromPoint( layerCoords );
@ -119,7 +119,7 @@ void QgsMapToolRotateFeature::canvasPressEvent( QMouseEvent * e )
QgsFeature cf;
QgsFeature f;
while ( vlayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
if ( f.geometry() )
{
@ -215,7 +215,7 @@ void QgsMapToolRotateFeature::canvasReleaseEvent( QMouseEvent * e )
foreach ( QgsFeatureId id, mRotatedFeatures )
{
QgsFeature feat;
vlayer->featureAtId( id, feat );
vlayer->getFeatures( QgsFeatureRequest().setFilterFid( id ) ).nextFeature( feat );
QgsGeometry* geom = feat.geometry();
i = start;

View File

@ -120,7 +120,7 @@ void QgsMapToolRotatePointSymbols::canvasPressEvent( QMouseEvent *e )
//find out initial arrow direction
QgsFeature pointFeature;
if ( !mActiveLayer->featureAtId( mFeatureNumber, pointFeature, false, true ) )
if ( !mActiveLayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ).setFilterFid( mFeatureNumber ) ).nextFeature( pointFeature ) )
{
return;
}

View File

@ -131,14 +131,14 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
QgsDebugMsg( "doContains: " + QString( doContains ? "T" : "F" ) );
QgsDebugMsg( "doDifference: " + QString( doDifference ? "T" : "F" ) );
vlayer->select( QgsAttributeList(), selectGeomTrans.boundingBox(), true, true );
QgsFeatureIterator fit = vlayer->getFeatures( QgsFeatureRequest().setFilterRect( selectGeomTrans.boundingBox() ).setFlags( QgsFeatureRequest::ExactIntersect ).setSubsetOfAttributes( QgsAttributeList() ) );
QgsFeatureIds newSelectedFeatures;
QgsFeature f;
QgsFeatureId closestFeatureId = 0;
bool foundSingleFeature = false;
double closestFeatureDist = std::numeric_limits<double>::max();
while ( vlayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
QgsGeometry* g = f.geometry();
if ( doContains )

View File

@ -210,10 +210,10 @@ bool QgsMapToolShowHideLabels::selectedFeatures( QgsVectorLayer* vlayer,
QgsDebugMsg( "Selection layer: " + vlayer->name() );
QgsDebugMsg( "Selection polygon: " + selectGeomTrans.exportToWkt() );
vlayer->select( QgsAttributeList(), selectGeomTrans.boundingBox(), false, true );
QgsFeatureIterator fit = vlayer->getFeatures( QgsFeatureRequest().setFilterRect( selectGeomTrans.boundingBox() ).setFlags( QgsFeatureRequest::NoGeometry | QgsFeatureRequest::ExactIntersect ).setSubsetOfAttributes( QgsAttributeList() ) );
QgsFeature f;
while ( vlayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
QgsGeometry* g = f.geometry();
@ -282,7 +282,7 @@ bool QgsMapToolShowHideLabels::showHideLabel( QgsVectorLayer* vlayer,
// check if attribute value is already the same
QgsFeature f;
if ( !vlayer->featureAtId( fid, f, false, true ) )
if ( !vlayer->getFeatures( QgsFeatureRequest().setFilterFid( fid ).setFlags( QgsFeatureRequest::NoGeometry ) ).nextFeature( f ) )
{
return false;
}

View File

@ -263,16 +263,16 @@ void QgsMapToolSimplify::canvasPressEvent( QMouseEvent * e )
double r = QgsTolerance::vertexSearchRadius( vlayer, mCanvas->mapRenderer() );
QgsRectangle selectRect = QgsRectangle( layerCoords.x() - r, layerCoords.y() - r,
layerCoords.x() + r, layerCoords.y() + r );
vlayer->select( QgsAttributeList(), selectRect, true );
QgsFeatureIterator fit = vlayer->getFeatures( QgsFeatureRequest().setFilterRect( selectRect ).setSubsetOfAttributes( QgsAttributeList() ) );
QgsGeometry* geometry = QgsGeometry::fromPoint( layerCoords );
double minDistance = DBL_MAX;
double currentDistance;
QgsFeature f;
mSelectedFeature.setValid( false );
while ( vlayer->nextFeature( f ) )
QgsFeature f;
while ( fit.nextFeature( f ) )
{
currentDistance = geometry->distance( *( f.geometry() ) );
if ( currentDistance < minDistance )

View File

@ -551,7 +551,7 @@ void QgsMergeAttributesDialog::createRubberBandForFeature( int featureId )
mSelectionRubberBand = new QgsRubberBand( mMapCanvas, mVectorLayer->geometryType() == QGis::Polygon );
mSelectionRubberBand->setColor( QColor( 255, 0, 0 ) );
QgsFeature featureToSelect;
mVectorLayer->featureAtId( featureId, featureToSelect, true, false );
mVectorLayer->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( featureToSelect );
mSelectionRubberBand->setToGeometry( featureToSelect.geometry(), mVectorLayer );
}

View File

@ -49,7 +49,7 @@ void QgsAtlasComposition::setCoverageLayer( QgsVectorLayer* layer )
mCoverageLayer = layer;
// update the number of features
QgsExpression::setSpecialColumn( "$numfeatures", QVariant( (int)mFeatureIds.size() ) );
QgsExpression::setSpecialColumn( "$numfeatures", QVariant(( int )mFeatureIds.size() ) );
}
void QgsAtlasComposition::beginRender()
@ -82,13 +82,13 @@ void QgsAtlasComposition::beginRender()
}
// select all features with all attributes
mCoverageLayer->select( mCoverageLayer->pendingAllAttributesList() );
QgsFeatureIterator fit = mCoverageLayer->getFeatures();
// We cannot use nextFeature() directly since the feature pointer is rewinded by the rendering process
// We thus store the feature ids for future extraction
QgsFeature feat;
mFeatureIds.clear();
while ( mCoverageLayer->nextFeature( feat ) )
while ( fit.nextFeature( feat ) )
{
mFeatureIds.push_back( feat.id() );
}
@ -153,7 +153,7 @@ void QgsAtlasComposition::prepareForFeature( size_t featureI )
}
// retrieve the next feature, based on its id
mCoverageLayer->featureAtId( mFeatureIds[ featureI ], mCurrentFeature, /* fetchGeometry = */ true, /* fetchAttributes = */ true );
mCoverageLayer->getFeatures( QgsFeatureRequest().setFilterFid( mFeatureIds[ featureI ] ) ).nextFeature( mCurrentFeature );
if ( mFilenamePattern.size() > 0 )
{
@ -213,18 +213,18 @@ void QgsAtlasComposition::prepareForFeature( size_t featureI )
// geometry height is too big
if ( geom_ratio < map_ratio )
{
// extent the bbox's width
double adj_width = ( map_ratio * geom_rect.height() - geom_rect.width() ) / 2.0;
xa1 -= adj_width;
xa2 += adj_width;
// extent the bbox's width
double adj_width = ( map_ratio * geom_rect.height() - geom_rect.width() ) / 2.0;
xa1 -= adj_width;
xa2 += adj_width;
}
// geometry width is too big
else if ( geom_ratio > map_ratio )
{
// extent the bbox's height
double adj_height = (geom_rect.width() / map_ratio - geom_rect.height() ) / 2.0;
ya1 -= adj_height;
ya2 += adj_height;
// extent the bbox's height
double adj_height = ( geom_rect.width() / map_ratio - geom_rect.height() ) / 2.0;
ya1 -= adj_height;
ya2 += adj_height;
}
new_extent = QgsRectangle( xa1, ya1, xa2, ya2 );

View File

@ -145,17 +145,16 @@ bool QgsComposerAttributeTable::getFeatureAttributes( QList<QgsAttributes>& attr
}
}
if ( mDisplayAttributes.size() < 1 )
{
mVectorLayer->select( mVectorLayer->pendingAllAttributesList(), selectionRect, mShowOnlyVisibleFeatures, mShowOnlyVisibleFeatures );
}
else
{
mVectorLayer->select( mDisplayAttributes.toList(), selectionRect, mShowOnlyVisibleFeatures, mShowOnlyVisibleFeatures );
}
QgsFeatureRequest req;
req.setFilterRect( selectionRect );
req.setFlags( mShowOnlyVisibleFeatures ? QgsFeatureRequest::ExactIntersect : QgsFeatureRequest::NoGeometry );
if ( mDisplayAttributes.size() >= 0 )
req.setSubsetOfAttributes( mDisplayAttributes.toList() );
QgsFeature f;
int counter = 0;
while ( mVectorLayer->nextFeature( f ) && counter < mMaximumNumberOfFeatures )
QgsFeatureIterator fit = mVectorLayer->getFeatures( req );
while ( fit.nextFeature( f ) && counter < mMaximumNumberOfFeatures )
{
attributes.push_back( f.attributes() );
++counter;

View File

@ -57,9 +57,10 @@ class CORE_EXPORT QgsFeatureRequest
public:
enum Flag
{
NoGeometry = 0x01, //!< Do not fetch geometry
SubsetOfAttributes = 0x02, //!< Fetch only a subset of attributes (setSubsetOfAttributes sets this flag)
ExactIntersect = 0x04 //!< Use exact geometry intersection (slower) instead of bounding boxes
NoFlags = 0,
NoGeometry = 1, //!< Do not fetch geometry
SubsetOfAttributes = 2, //!< Fetch only a subset of attributes (setSubsetOfAttributes sets this flag)
ExactIntersect = 4 //!< Use exact geometry intersection (slower) instead of bounding boxes
};
Q_DECLARE_FLAGS( Flags, Flag )

View File

@ -509,13 +509,13 @@ void QgsOfflineEditing::copyVectorLayer( QgsVectorLayer* layer, sqlite3* db, con
// NOTE: force feature recount for PostGIS layer, else only visible features are counted, before iterating over all features (WORKAROUND)
layer->setSubsetString( "" );
layer->select( layer->pendingAllAttributesList(), QgsRectangle(), true, false );
QgsFeatureIterator fit = layer->getFeatures();
emit progressModeSet( QgsOfflineEditing::CopyFeatures, layer->featureCount() );
int featureCount = 1;
QList<QgsFeatureId> remoteFeatureIds;
while ( layer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
remoteFeatureIds << f.id();
@ -542,8 +542,9 @@ void QgsOfflineEditing::copyVectorLayer( QgsVectorLayer* layer, sqlite3* db, con
// update feature id lookup
int layerId = getOrCreateLayerId( db, newLayer->id() );
QList<QgsFeatureId> offlineFeatureIds;
newLayer->select( QgsAttributeList(), QgsRectangle(), false, false );
while ( newLayer->nextFeature( f ) )
QgsFeatureIterator fit = newLayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( QgsAttributeList() ) );
while ( fit.nextFeature( f ) )
{
offlineFeatureIds << f.id();
}
@ -617,7 +618,7 @@ void QgsOfflineEditing::applyFeaturesAdded( QgsVectorLayer* offlineLayer, QgsVec
for ( int i = 0; i < newFeatureIds.size(); i++ )
{
QgsFeature feature;
if ( offlineLayer->featureAtId( newFeatureIds.at( i ), feature, true, true ) )
if ( offlineLayer->getFeatures( QgsFeatureRequest().setFilterFid( newFeatureIds.at( i ) ) ).nextFeature( feature ) )
{
features << feature;
}
@ -709,12 +710,13 @@ void QgsOfflineEditing::updateFidLookup( QgsVectorLayer* remoteLayer, sqlite3* d
// NOTE: use QMap for sorted fids
QMap < QgsFeatureId, bool /*dummy*/ > newRemoteFids;
QgsFeature f;
remoteLayer->select( QgsAttributeList(), QgsRectangle(), false, false );
QgsFeatureIterator fit = remoteLayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( QgsAttributeList() ) );
emit progressModeSet( QgsOfflineEditing::ProcessFeatures, remoteLayer->featureCount() );
int i = 1;
while ( remoteLayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
if ( offlineFid( db, layerId, f.id() ) == -1 )
{

View File

@ -116,14 +116,13 @@ QgsVectorFileWriter::QgsVectorFileWriter(
#if defined(GDAL_VERSION_NUM) && GDAL_VERSION_NUM < 1700
// check for unique fieldnames
QSet<QString> fieldNames;
QgsFieldMap::const_iterator fldIt;
for ( fldIt = fields.begin(); fldIt != fields.end(); ++fldIt )
for ( int i = 0; i < fields.count(); ++i )
{
QString name = fldIt.value().name().left( 10 );
QString name = fields[i].name().left( 10 );
if ( fieldNames.contains( name ) )
{
mErrorMessage = QObject::tr( "trimming attribute name '%1' to ten significant characters produces duplicate column name." )
.arg( fldIt.value().name() );
.arg( fields[i].name() );
mError = ErrAttributeCreationFailed;
return;
}
@ -643,11 +642,6 @@ QgsVectorFileWriter::writeAsVectorFormat( QgsVectorLayer* layer,
errorMessage->clear();
}
QgsAttributeList allAttr = skipAttributeCreation ? QgsAttributeList() : layer->pendingAllAttributesList();
QgsFeature fet;
layer->select( allAttr, QgsRectangle(), layer->wkbType() != QGis::WKBNoGeometry );
const QgsFeatureIds& ids = layer->selectedFeaturesIds();
// Create our transform
@ -664,8 +658,17 @@ QgsVectorFileWriter::writeAsVectorFormat( QgsVectorLayer* layer,
int n = 0, errors = 0;
QgsFeatureRequest req;
if ( layer->wkbType() == QGis::WKBNoGeometry )
req.setFlags( QgsFeatureRequest::NoGeometry );
if ( skipAttributeCreation )
req.setSubsetOfAttributes( QgsAttributeList() );
QgsFeatureIterator fit = layer->getFeatures( req );
// write all features
while ( layer->nextFeature( fet ) )
QgsFeature fet;
while ( fit.nextFeature( fet ) )
{
if ( onlySelected && !ids.contains( fet.id() ) )
continue;

View File

@ -26,7 +26,6 @@ QgsVectorLayerEditUtils::QgsVectorLayerEditUtils( QgsVectorLayer* layer )
{
}
bool QgsVectorLayerEditUtils::insertVertex( double x, double y, QgsFeatureId atFeatureId, int beforeVertex )
{
if ( !L->hasGeometryType() )
@ -95,10 +94,10 @@ int QgsVectorLayerEditUtils::addRing( const QList<QgsPoint>& ring )
return 3; //ring not valid
}
L->select( QgsAttributeList(), bBox, true, true );
QgsFeatureIterator fit = L->getFeatures( QgsFeatureRequest().setFilterRect( bBox ).setFlags( QgsFeatureRequest::ExactIntersect ) );
QgsFeature f;
while ( L->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
addRingReturnCode = f.geometry()->addRing( ring );
if ( addRingReturnCode == 0 )
@ -124,7 +123,7 @@ int QgsVectorLayerEditUtils::addPart( const QList<QgsPoint> &points, QgsFeatureI
{
// it's not in cache: let's fetch it from layer
QgsFeature f;
if ( !L->featureAtId( featureId, f, true, false ) || !f.geometry() )
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) || !f.geometry() )
return 6; //geometry not found
geometry = *f.geometry();
@ -150,7 +149,7 @@ int QgsVectorLayerEditUtils::translateFeature( QgsFeatureId featureId, double dx
{
// it's not in cache: let's fetch it from layer
QgsFeature f;
if ( !L->featureAtId( featureId, f, true, false ) || !f.geometry() )
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) || !f.geometry() )
return 1; //geometry not found
geometry = *f.geometry();
@ -215,10 +214,10 @@ int QgsVectorLayerEditUtils::splitFeatures( const QList<QgsPoint>& splitLine, bo
}
}
L->select( L->pendingAllAttributesList(), bBox, true, true );
QgsFeatureIterator fit = L->getFeatures( QgsFeatureRequest().setFilterRect( bBox ).setFlags( QgsFeatureRequest::ExactIntersect ) );
QgsFeature f;
while ( L->nextFeature( f ) )
while ( fit.nextFeature( f ) )
featureList << QgsFeature( f );
}

View File

@ -293,7 +293,13 @@ QgsVectorLayerImport::importLayer( QgsVectorLayer* layer,
QgsAttributeList allAttr = skipAttributeCreation ? QgsAttributeList() : layer->pendingAllAttributesList();
QgsFeature fet;
layer->select( allAttr, QgsRectangle(), wkbType != QGis::WKBNoGeometry );
QgsFeatureRequest req;
if ( wkbType == QGis::WKBNoGeometry )
req.setFlags( QgsFeatureRequest::NoGeometry );
if ( skipAttributeCreation )
req.setSubsetOfAttributes( QgsAttributeList() );
QgsFeatureIterator fit = layer->getFeatures( req );
const QgsFeatureIds& ids = layer->selectedFeaturesIds();
@ -322,7 +328,7 @@ QgsVectorLayerImport::importLayer( QgsVectorLayer* layer,
}
// write all features
while ( layer->nextFeature( fet ) )
while ( fit.nextFeature( fet ) )
{
if ( progress && progress->wasCanceled() )
{

View File

@ -63,12 +63,13 @@ void QgsVectorLayerJoinBuffer::cacheJoinLayer( QgsVectorJoinInfo& joinInfo )
QgsVectorLayer* cacheLayer = dynamic_cast<QgsVectorLayer*>( QgsMapLayerRegistry::instance()->mapLayer( joinInfo.joinLayerId ) );
if ( cacheLayer )
{
int joinFieldIndex = cacheLayer->pendingFields().indexFromName(joinInfo.joinFieldName);
int joinFieldIndex = cacheLayer->pendingFields().indexFromName( joinInfo.joinFieldName );
joinInfo.cachedAttributes.clear();
cacheLayer->select( cacheLayer->pendingAllAttributesList(), QgsRectangle(), false, false );
QgsFeatureIterator fit = cacheLayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ) );
QgsFeature f;
while ( cacheLayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
const QgsAttributes& attrs = f.attributes();
joinInfo.cachedAttributes.insert( attrs[joinFieldIndex].toString(), attrs );
@ -87,10 +88,10 @@ void QgsVectorLayerJoinBuffer::updateFields( QgsFields& fields )
continue;
}
joinIt->tmpTargetField = fields.indexFromName(joinIt->targetFieldName);
joinIt->tmpTargetField = fields.indexFromName( joinIt->targetFieldName );
const QgsFields& joinFields = joinLayer->pendingFields();
joinIt->tmpJoinField = joinFields.indexFromName(joinIt->joinFieldName);
joinIt->tmpJoinField = joinFields.indexFromName( joinIt->joinFieldName );
for ( int idx = 0; idx < joinFields.count(); ++idx )
{
@ -99,7 +100,7 @@ void QgsVectorLayerJoinBuffer::updateFields( QgsFields& fields )
{
QgsField f = joinFields[idx];
f.setName( joinLayer->name() + "_" + f.name() );
fields.append( f, QgsFields::OriginJoin, idx + (joinIdx*1000) );
fields.append( f, QgsFields::OriginJoin, idx + ( joinIdx*1000 ) );
}
}
}
@ -153,10 +154,10 @@ void QgsVectorLayerJoinBuffer::readXml( const QDomNode& layer_node )
const QgsVectorJoinInfo* QgsVectorLayerJoinBuffer::joinForFieldIndex( int index, const QgsFields& fields, int& sourceFieldIndex ) const
{
if ( fields.fieldOrigin(index) != QgsFields::OriginJoin )
if ( fields.fieldOrigin( index ) != QgsFields::OriginJoin )
return 0;
int originIndex = fields.fieldOriginIndex(index);
int originIndex = fields.fieldOriginIndex( index );
int sourceJoinIndex = originIndex / 1000;
sourceFieldIndex = originIndex % 1000;

View File

@ -28,7 +28,7 @@
QgsVectorLayerUndoCommandAddFeature::QgsVectorLayerUndoCommandAddFeature( QgsVectorLayerEditBuffer* buffer, QgsFeature& f )
: QgsVectorLayerUndoCommand(buffer)
: QgsVectorLayerUndoCommand( buffer )
{
static int addedIdLowWaterMark = -1;
@ -47,12 +47,12 @@ QgsVectorLayerUndoCommandAddFeature::QgsVectorLayerUndoCommandAddFeature( QgsVec
void QgsVectorLayerUndoCommandAddFeature::undo()
{
QgsFeatureMap::const_iterator it = mBuffer->mAddedFeatures.find(mFeature.id());
QgsFeatureMap::const_iterator it = mBuffer->mAddedFeatures.find( mFeature.id() );
Q_ASSERT( it != mBuffer->mAddedFeatures.end() );
mBuffer->mAddedFeatures.remove(mFeature.id());
mBuffer->mAddedFeatures.remove( mFeature.id() );
if ( mFeature.geometry() )
cache()->removeGeometry(mFeature.id());
cache()->removeGeometry( mFeature.id() );
emit mBuffer->featureDeleted( mFeature.id() );
}
@ -70,7 +70,7 @@ void QgsVectorLayerUndoCommandAddFeature::redo()
QgsVectorLayerUndoCommandDeleteFeature::QgsVectorLayerUndoCommandDeleteFeature( QgsVectorLayerEditBuffer* buffer, QgsFeatureId fid )
: QgsVectorLayerUndoCommand(buffer)
: QgsVectorLayerUndoCommand( buffer )
{
mFid = fid;
@ -113,8 +113,8 @@ void QgsVectorLayerUndoCommandDeleteFeature::redo()
QgsVectorLayerUndoCommandChangeGeometry::QgsVectorLayerUndoCommandChangeGeometry( QgsVectorLayerEditBuffer* buffer, QgsFeatureId fid, QgsGeometry* newGeom )
: QgsVectorLayerUndoCommand(buffer),
mFid(fid)
: QgsVectorLayerUndoCommand( buffer ),
mFid( fid )
{
if ( FID_IS_NEW( mFid ) )
@ -125,13 +125,13 @@ QgsVectorLayerUndoCommandChangeGeometry::QgsVectorLayerUndoCommandChangeGeometry
}
else
{
bool changedAlready = mBuffer->mChangedGeometries.contains(mFid);
bool changedAlready = mBuffer->mChangedGeometries.contains( mFid );
QgsGeometry geom;
bool cachedGeom = cache()->geometry(mFid, geom);
mOldGeom = (changedAlready && cachedGeom) ? new QgsGeometry( geom ) : 0;
bool cachedGeom = cache()->geometry( mFid, geom );
mOldGeom = ( changedAlready && cachedGeom ) ? new QgsGeometry( geom ) : 0;
}
mNewGeom = new QgsGeometry(*newGeom);
mNewGeom = new QgsGeometry( *newGeom );
}
QgsVectorLayerUndoCommandChangeGeometry::~QgsVectorLayerUndoCommandChangeGeometry()
@ -161,7 +161,7 @@ void QgsVectorLayerUndoCommandChangeGeometry::undo()
mBuffer->mChangedGeometries.remove( mFid );
QgsFeature f;
if ( layer()->featureAtId( mFid, f, true, false ) && f.geometry() )
if ( layer()->getFeatures( QgsFeatureRequest().setFilterFid( mFid ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) && f.geometry() )
{
cache()->cacheGeometry( mFid, *f.geometry() );
emit mBuffer->geometryChanged( mFid, *f.geometry() );
@ -199,11 +199,11 @@ void QgsVectorLayerUndoCommandChangeGeometry::redo()
QgsVectorLayerUndoCommandChangeAttribute::QgsVectorLayerUndoCommandChangeAttribute( QgsVectorLayerEditBuffer* buffer, QgsFeatureId fid, int fieldIndex, const QVariant& newValue )
: QgsVectorLayerUndoCommand(buffer),
mFid(fid),
mFieldIndex(fieldIndex),
mNewValue(newValue),
mFirstChange(true)
: QgsVectorLayerUndoCommand( buffer ),
mFid( fid ),
mFieldIndex( fieldIndex ),
mNewValue( newValue ),
mFirstChange( true )
{
if ( FID_IS_NEW( mFid ) )
@ -296,8 +296,8 @@ void QgsVectorLayerUndoCommandChangeAttribute::redo()
QgsVectorLayerUndoCommandAddAttribute::QgsVectorLayerUndoCommandAddAttribute( QgsVectorLayerEditBuffer* buffer, const QgsField& field )
: QgsVectorLayerUndoCommand(buffer),
mField(field)
: QgsVectorLayerUndoCommand( buffer ),
mField( field )
{
mFieldIndex = layer()->pendingFields().count();
}
@ -327,13 +327,13 @@ void QgsVectorLayerUndoCommandAddAttribute::redo()
QgsVectorLayerUndoCommandDeleteAttribute::QgsVectorLayerUndoCommandDeleteAttribute( QgsVectorLayerEditBuffer* buffer, int fieldIndex )
: QgsVectorLayerUndoCommand(buffer),
: QgsVectorLayerUndoCommand( buffer ),
mFieldIndex( fieldIndex )
{
const QgsFields& fields = layer()->pendingFields();
QgsFields::FieldOrigin origin = fields.fieldOrigin( mFieldIndex );
mOriginIndex = fields.fieldOriginIndex( mFieldIndex );
mProviderField = (origin == QgsFields::OriginProvider);
mProviderField = ( origin == QgsFields::OriginProvider );
if ( !mProviderField )
{
@ -342,18 +342,18 @@ QgsVectorLayerUndoCommandDeleteAttribute::QgsVectorLayerUndoCommandDeleteAttribu
}
// save values of new features
for (QgsFeatureMap::const_iterator it = mBuffer->mAddedFeatures.begin(); it != mBuffer->mAddedFeatures.end(); ++it)
for ( QgsFeatureMap::const_iterator it = mBuffer->mAddedFeatures.begin(); it != mBuffer->mAddedFeatures.end(); ++it )
{
const QgsFeature& f = it.value();
mDeletedValues.insert(f.id(), f.attribute(mFieldIndex));
mDeletedValues.insert( f.id(), f.attribute( mFieldIndex ) );
}
// save changed values
for (QgsChangedAttributesMap::const_iterator it = mBuffer->mChangedAttributeValues.begin(); it != mBuffer->mChangedAttributeValues.end(); ++it)
for ( QgsChangedAttributesMap::const_iterator it = mBuffer->mChangedAttributeValues.begin(); it != mBuffer->mChangedAttributeValues.end(); ++it )
{
const QgsAttributeMap& attrs = it.value();
if (attrs.contains(mFieldIndex))
mDeletedValues.insert(it.key(), attrs[mFieldIndex]);
if ( attrs.contains( mFieldIndex ) )
mDeletedValues.insert( it.key(), attrs[mFieldIndex] );
}
}
@ -373,15 +373,15 @@ void QgsVectorLayerUndoCommandDeleteAttribute::undo()
mBuffer->handleAttributeAdded( mFieldIndex ); // update changed attributes + new features
// set previously used attributes of new features
for (QgsFeatureMap::iterator it = mBuffer->mAddedFeatures.begin(); it != mBuffer->mAddedFeatures.end(); ++it)
for ( QgsFeatureMap::iterator it = mBuffer->mAddedFeatures.begin(); it != mBuffer->mAddedFeatures.end(); ++it )
{
QgsFeature& f = it.value();
f.setAttribute( mFieldIndex, mDeletedValues.value(f.id()) );
f.setAttribute( mFieldIndex, mDeletedValues.value( f.id() ) );
}
// set previously used changed attributes
for (QMap<QgsFeatureId, QVariant>::const_iterator it = mDeletedValues.begin(); it != mDeletedValues.end(); ++it)
for ( QMap<QgsFeatureId, QVariant>::const_iterator it = mDeletedValues.begin(); it != mDeletedValues.end(); ++it )
{
if (!FID_IS_NEW( it.key() ))
if ( !FID_IS_NEW( it.key() ) )
{
QgsAttributeMap& attrs = mBuffer->mChangedAttributeValues[it.key()]; // also adds record if nonexistant
attrs.insert( mFieldIndex, it.value() );

View File

@ -800,8 +800,9 @@ QgsGraduatedSymbolRendererV2* QgsGraduatedSymbolRendererV2::createRenderer(
QgsFeature f;
QgsAttributeList lst;
lst.append( attrNum );
vlayer->select( lst, QgsRectangle(), false );
while ( vlayer->nextFeature( f ) )
QgsFeatureIterator fit = vlayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( QgsAttributeList() ) );
while ( fit.nextFeature( f ) )
values.append( f.attribute( attrNum ).toDouble() );
// calculate the breaks
if ( mode == Quantile )

View File

@ -364,8 +364,8 @@ void QgsPointDisplacementRenderer::createDisplacementGroups( QgsVectorLayer* vla
QgsFeature f;
QList<QgsFeatureId> intersectList;
vlayer->select( attList, viewExtent, true, false );
while ( vlayer->nextFeature( f ) )
QgsFeatureIterator fit = vlayer->getFeatures( QgsFeatureRequest().setFilterRect( viewExtent ).setSubsetOfAttributes( attList ) );
while ( fit.nextFeature( f ) )
{
intersectList.clear();
@ -399,7 +399,7 @@ void QgsPointDisplacementRenderer::createDisplacementGroups( QgsVectorLayer* vla
{
QMap<QgsFeatureId, QgsFeature> newMap;
QgsFeature existingFeature;
vlayer->featureAtId( existingEntry, existingFeature );
vlayer->getFeatures( QgsFeatureRequest().setFilterFid( existingEntry ) ).nextFeature( existingFeature );
newMap.insert( existingEntry, existingFeature );
mDisplacementIds.insert( existingEntry );
newMap.insert( f.id(), f );
@ -409,8 +409,6 @@ void QgsPointDisplacementRenderer::createDisplacementGroups( QgsVectorLayer* vla
}
}
}
//refresh the selection because the vector layer is going to step through all features now
vlayer->select( attList, viewExtent, true, false );
}
QgsRectangle QgsPointDisplacementRenderer::searchRect( const QgsPoint& p ) const

View File

@ -47,7 +47,7 @@ void QgsAttributeTableMemoryModel::loadLayer()
rect = mCurrentExtent;
}
mLayer->select( mLayer->pendingAllAttributesList(), rect, false );
QgsFeatureIterator fit = mLayer->getFeatures( QgsFeatureRequest().setFilterRect( rect ).setFlags( QgsFeatureRequest::NoGeometry ) );
if ( behaviour != 1 )
mFeatureMap.reserve( mLayer->pendingFeatureCount() + 50 );
@ -60,7 +60,7 @@ void QgsAttributeTableMemoryModel::loadLayer()
t.start();
QgsFeature f;
while ( mLayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
if ( behaviour == 1 && !mLayer->selectedFeaturesIds().contains( f.id() ) )
continue;

View File

@ -64,7 +64,7 @@ bool QgsAttributeTableModel::featureAtId( QgsFeatureId fid ) const
mFeat = mFeatureMap[ fid ];
return true;
}
else if ( mLayer->featureAtId( fid, mFeat, false, true ) )
else if ( mLayer->getFeatures( QgsFeatureRequest().setFilterFid( fid ).setFlags( QgsFeatureRequest::NoGeometry ) ).nextFeature( mFeat ) )
{
QSettings settings;
int cacheSize = qMax( 1, settings.value( "/qgis/attributeTableRowCache", "10000" ).toInt() );
@ -334,10 +334,10 @@ void QgsAttributeTableModel::loadLayer()
}
}
mLayer->select( attributeList, rect, false );
QgsFeatureIterator fit = mLayer->getFeatures( QgsFeatureRequest().setFilterRect( rect ).setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( attributeList ) );
QgsFeature f;
for ( i = 0; mLayer->nextFeature( f ); ++i )
for ( i = 0; fit.nextFeature( f ); ++i )
{
if ( !filter || renderer->willRenderFeature( f ) )
{
@ -484,10 +484,10 @@ void QgsAttributeTableModel::sort( int column, Qt::SortOrder order )
mSortList.clear();
int idx = fieldIdx( column );
mLayer->select( QgsAttributeList() << idx, rect, false );
QgsFeatureIterator fit = mLayer->getFeatures( QgsFeatureRequest().setFilterRect( rect ).setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( QgsAttributeList() << idx ) );
QgsFeature f;
while ( mLayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
if ( behaviour == 1 && !mIdRowMap.contains( f.id() ) )
continue;

View File

@ -224,9 +224,10 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
attributes << vi;
if ( fi >= 0 )
attributes << fi;
layer->select( attributes, QgsRectangle(), false );
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( attributes ) );
QgsFeature f;
while ( layer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
if ( fi >= 0 && f.attribute( fi ).toString() != data.mFilterAttributeValue )
continue;

View File

@ -282,8 +282,7 @@ void QgsExpressionBuilderWidget::on_txtExpressionString_textChanged()
if ( !mFeature.isValid() )
{
mLayer->select( mLayer->pendingAllAttributesList(), QgsRectangle(), mLayer->geometryType() != QGis::NoGeometry && exp.needsGeometry() );
mLayer->nextFeature( mFeature );
mLayer->getFeatures( QgsFeatureRequest().setFlags(( mLayer->geometryType() != QGis::NoGeometry && exp.needsGeometry() ) ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) ).nextFeature( mFeature );
}
if ( mFeature.isValid() )

View File

@ -85,7 +85,7 @@ QWidget* QgsFormAnnotationItem::createDesignerWidget( const QString& filePath )
if ( mVectorLayer && mHasAssociatedFeature )
{
QgsFeature f;
if ( mVectorLayer->featureAtId( mFeature, f, false, true ) )
if ( mVectorLayer->getFeatures( QgsFeatureRequest().setFilterFid( mFeature ).setFlags( QgsFeatureRequest::NoGeometry ) ).nextFeature( f ) )
{
const QgsFields& fields = mVectorLayer->pendingFields();
const QgsAttributes& attrs = f.attributes();
@ -224,19 +224,19 @@ void QgsFormAnnotationItem::setFeatureForMapPosition()
return;
}
QgsAttributeList noAttributes;
QSettings settings;
double identifyValue = settings.value( "/Map/identifyRadius", QGis::DEFAULT_IDENTIFY_RADIUS ).toDouble();
double halfIdentifyWidth = mMapCanvas->extent().width() / 100 / 2 * identifyValue;
QgsRectangle searchRect( mMapPosition.x() - halfIdentifyWidth, mMapPosition.y() - halfIdentifyWidth,
mMapPosition.x() + halfIdentifyWidth, mMapPosition.y() + halfIdentifyWidth );
mVectorLayer->select( noAttributes, searchRect, false, true );
QgsFeatureIterator fit = mVectorLayer->getFeatures( QgsFeatureRequest().setFilterRect( searchRect ).setFlags( QgsFeatureRequest::NoGeometry | QgsFeatureRequest::ExactIntersect ).setSubsetOfAttributes( QgsAttributeList() ) );
QgsFeature currentFeature;
QgsFeatureId currentFeatureId = 0;
bool featureFound = false;
while ( mVectorLayer->nextFeature( currentFeature ) )
while ( fit.nextFeature( currentFeature ) )
{
currentFeatureId = currentFeature.id();
featureFound = true;

View File

@ -193,13 +193,14 @@ void QgsHtmlAnnotationItem::setFeatureForMapPosition()
double halfIdentifyWidth = mMapCanvas->extent().width() / 100 / 2 * identifyValue;
QgsRectangle searchRect( mMapPosition.x() - halfIdentifyWidth, mMapPosition.y() - halfIdentifyWidth,
mMapPosition.x() + halfIdentifyWidth, mMapPosition.y() + halfIdentifyWidth );
mVectorLayer->select( mVectorLayer->pendingAllAttributesList() , searchRect, false, true );
QgsFeatureIterator fit = mVectorLayer->getFeatures( QgsFeatureRequest().setFilterRect( searchRect ).setFlags( QgsFeatureRequest::NoGeometry | QgsFeatureRequest::ExactIntersect ) );
QgsFeature currentFeature;
QgsFeatureId currentFeatureId = 0;
bool featureFound = false;
while ( mVectorLayer->nextFeature( currentFeature ) )
while ( fit.nextFeature( currentFeature ) )
{
currentFeatureId = currentFeature.id();
featureFound = true;
@ -212,7 +213,6 @@ void QgsHtmlAnnotationItem::setFeatureForMapPosition()
QString newtext = QgsExpression::replaceExpressionText( mHtmlSource, mFeature, vectorLayer() );
mWebView->setHtml( newtext );
}
void QgsHtmlAnnotationItem::updateVisibility()

View File

@ -95,8 +95,7 @@ QString QgsMapTip::fetchFeature( QgsMapLayer *layer, QgsPoint &mapPosition, QgsM
QgsFeature feature;
vlayer->select( vlayer->pendingAllAttributesList() , r, true, true );
if ( !vlayer->nextFeature( feature ) )
if ( !vlayer->getFeatures( QgsFeatureRequest().setFilterRect( r ).setFlags( QgsFeatureRequest::ExactIntersect ) ).nextFeature( feature ) )
return "";
int idx = vlayer->fieldNameIndex( vlayer->displayField() );

View File

@ -123,7 +123,7 @@ void QgsSearchQueryBuilder::getFieldValues( int limit )
QgsAttributeList attrs;
attrs.append( fieldIndex );
mLayer->select( attrs, QgsRectangle(), false );
QgsFeatureIterator fit = mLayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( attrs ) );
lstValues->setCursor( Qt::WaitCursor );
// Block for better performance
@ -133,7 +133,7 @@ void QgsSearchQueryBuilder::getFieldValues( int limit )
/**MH: keep already inserted values in a set. Querying is much faster compared to QStandardItemModel::findItems*/
QSet<QString> insertedValues;
while ( mLayer->nextFeature( feat ) &&
while ( fit.nextFeature( feat ) &&
( limit == 0 || mModelValues->rowCount() != limit ) )
{
value = feat.attribute( fieldIndex ).toString();
@ -209,10 +209,9 @@ long QgsSearchQueryBuilder::countRecords( QString searchString )
QApplication::setOverrideCursor( Qt::WaitCursor );
QgsAttributeList allAttributes = mLayer->pendingAllAttributesList();
mLayer->select( allAttributes, QgsRectangle(), fetchGeom );
QgsFeatureIterator fit = mLayer->getFeatures( QgsFeatureRequest().setFlags( fetchGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) );
while ( mLayer->nextFeature( feat ) )
while ( fit.nextFeature( feat ) )
{
QVariant value = search.evaluate( &feat );
if ( value.toInt() != 0 )

View File

@ -419,7 +419,7 @@ void QgsRuleBasedRendererV2Widget::countFeatures()
countMap[rule].duplicateCount = 0;
}
mLayer->select( mLayer->pendingAllAttributesList(), QgsRectangle(), false, false );
QgsFeatureIterator fit = mLayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ) );
QgsRenderContext renderContext;
renderContext.setRendererScale( 0 ); // ignore scale
@ -431,7 +431,7 @@ void QgsRuleBasedRendererV2Widget::countFeatures()
int featuresCounted = 0;
QgsFeature f;
while ( mLayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
QgsRuleBasedRendererV2::RuleList featureRuleList = mRenderer->rootRule()->rulesForFeature( f );
@ -551,11 +551,11 @@ void QgsRendererRulePropsDialog::testFilter()
QApplication::setOverrideCursor( Qt::WaitCursor );
mLayer->select( mLayer->pendingAllAttributesList(), QgsRectangle(), false );
QgsFeatureIterator fit = mLayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ) );
int count = 0;
QgsFeature f;
while ( mLayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
QVariant value = filter.evaluate( &f );
if ( value.toInt() != 0 )

View File

@ -453,7 +453,11 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
if ( maxFeatures == -1 )
maxFeat += layer->featureCount();
layer->select( attrIndexes, searchRect, mWithGeom, true );
QgsFeatureIterator fit = layer->getFeatures(
QgsFeatureRequest()
.setFilterRect( searchRect )
.setFlags( QgsFeatureRequest::ExactIntersect | ( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) )
.setSubsetOfAttributes( attrIndexes ) );
long featCounter = 0;
QDomNodeList filterNodes = queryElem.elementsByTagName( "Filter" );
@ -477,7 +481,10 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
}
//Need to be test for propertyname
layer->featureAtId( fid.toInt(), feature, mWithGeom, true );
layer->getFeatures( QgsFeatureRequest()
.setFilterFid( fid.toInt() )
.setFlags( QgsFeatureRequest::ExactIntersect | ( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) )
).nextFeature( feature );
if ( featureCounter == 0 )
startGetFeature( request, format, layerCrs, &searchRect );
@ -493,21 +500,28 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
{
QDomElement bboxElem = filterElem.firstChildElement();
QDomElement childElem = bboxElem.firstChildElement();
QgsFeatureRequest req;
req.setSubsetOfAttributes( attrIndexes );
req.setFlags( QgsFeatureRequest::ExactIntersect | ( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) );
while ( !childElem.isNull() )
{
if ( childElem.tagName() == "Box" )
{
QgsRectangle* rect = new QgsRectangle( childElem );
layer->select( attrIndexes, *rect, mWithGeom, true );
req.setFilterRect( QgsRectangle( childElem ) );
}
else if ( childElem.tagName() != "PropertyName" )
{
QgsGeometry* geom = QgsGeometry::fromGML2( childElem );
layer->select( attrIndexes, geom->boundingBox(), mWithGeom, true );
QgsGeometry *geom = QgsGeometry::fromGML2( childElem );
req.setFilterRect( geom->boundingBox() );
delete geom;
}
childElem = childElem.nextSiblingElement();
}
while ( layer->nextFeature( feature ) && featureCounter < maxFeat )
QgsFeatureIterator fit = layer->getFeatures( req );
while ( fit.nextFeature( feature ) && featureCounter < maxFeat )
{
if ( featureCounter == 0 )
startGetFeature( request, format, layerCrs, &searchRect );
@ -526,7 +540,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
}
if ( mFilter )
{
while ( layer->nextFeature( feature ) && featureCounter < maxFeat )
while ( fit.nextFeature( feature ) && featureCounter < maxFeat )
{
QVariant res = mFilter->evaluate( &feature, fields );
if ( mFilter->hasEvalError() )
@ -548,7 +562,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
}
else
{
while ( layer->nextFeature( feature ) && featureCounter < maxFeat )
while ( fit.nextFeature( feature ) && featureCounter < maxFeat )
{
if ( featureCounter == 0 )
startGetFeature( request, format, layerCrs, &searchRect );
@ -784,7 +798,10 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
if ( !fidStr.startsWith( tnStr ) )
continue;
//Need to be test for propertyname
layer->featureAtId( fidStr.section( ".", 1, 1 ).toInt(), feature, mWithGeom, true );
layer->getFeatures( QgsFeatureRequest()
.setFilterFid( fidStr.section( ".", 1, 1 ).toInt() )
.setFlags( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry )
).nextFeature( feature );
if ( featureCounter == 0 )
startGetFeature( request, format, layerCrs, &searchRect );
@ -796,7 +813,10 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
}
else if ( expFilterOk )
{
layer->select( attrIndexes, searchRect, mWithGeom, true );
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest()
.setFilterRect( searchRect )
.setFlags( QgsFeatureRequest::ExactIntersect | ( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) )
.setSubsetOfAttributes( attrIndexes ) );
QgsExpression *mFilter = new QgsExpression( expFilter );
if ( mFilter->hasParserError() )
{
@ -804,7 +824,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
}
if ( mFilter )
{
while ( layer->nextFeature( feature ) && featureCounter < maxFeat )
while ( fit.nextFeature( feature ) && featureCounter < maxFeat )
{
QVariant res = mFilter->evaluate( &feature, fields );
if ( mFilter->hasEvalError() )
@ -826,7 +846,6 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
}
else if ( filterOk )
{
layer->select( attrIndexes, searchRect, mWithGeom, true );
QDomElement filterElem = filter.firstChildElement();
QDomNodeList fidNodes = filterElem.elementsByTagName( "FeatureId" );
if ( fidNodes.size() > 0 )
@ -845,7 +864,10 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
}
//Need to be test for propertyname
layer->featureAtId( fid.toInt(), feature, mWithGeom, true );
layer->getFeatures( QgsFeatureRequest()
.setFilterFid( fid.toInt() )
.setFlags( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry )
).nextFeature( feature );
if ( featureCounter == 0 )
startGetFeature( request, format, layerCrs, &searchRect );
@ -861,21 +883,28 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
{
QDomElement bboxElem = filterElem.firstChildElement();
QDomElement childElem = bboxElem.firstChildElement();
QgsFeatureRequest req;
req.setSubsetOfAttributes( attrIndexes );
req.setFlags( QgsFeatureRequest::ExactIntersect | ( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) );
while ( !childElem.isNull() )
{
if ( childElem.tagName() == "Box" )
{
QgsRectangle* rect = new QgsRectangle( childElem );
layer->select( attrIndexes, *rect, mWithGeom, true );
req.setFilterRect( QgsRectangle( childElem ) );
}
else if ( childElem.tagName() != "PropertyName" )
{
QgsGeometry* geom = QgsGeometry::fromGML2( childElem );
layer->select( attrIndexes, geom->boundingBox(), mWithGeom, true );
req.setFilterRect( geom->boundingBox() );
delete geom;
}
childElem = childElem.nextSiblingElement();
}
while ( layer->nextFeature( feature ) && featureCounter < maxFeat )
QgsFeatureIterator fit = layer->getFeatures( req );
while ( fit.nextFeature( feature ) && featureCounter < maxFeat )
{
if ( featureCounter == 0 )
startGetFeature( request, format, layerCrs, &searchRect );
@ -894,7 +923,11 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
}
if ( mFilter )
{
while ( layer->nextFeature( feature ) && featureCounter < maxFeat )
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest()
.setFilterRect( searchRect )
.setFlags( QgsFeatureRequest::ExactIntersect | ( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) )
.setSubsetOfAttributes( attrIndexes ) );
while ( fit.nextFeature( feature ) && featureCounter < maxFeat )
{
QVariant res = mFilter->evaluate( &feature, fields );
if ( mFilter->hasEvalError() )
@ -917,8 +950,11 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
}
else
{
layer->select( attrIndexes, searchRect, mWithGeom, true );
while ( layer->nextFeature( feature ) && featureCounter < maxFeat )
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest()
.setFilterRect( searchRect )
.setFlags( QgsFeatureRequest::ExactIntersect | ( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) )
.setSubsetOfAttributes( attrIndexes ) );
while ( fit.nextFeature( feature ) && featureCounter < maxFeat )
{
if ( featureCounter == 0 )
startGetFeature( request, format, layerCrs, &searchRect );
@ -1489,7 +1525,7 @@ QgsFeatureIds QgsWFSServer::getFeatureIdsFromFilter( QDomElement filterElem, Qgs
{
QgsFeatureIds fids;
QgsVectorDataProvider* provider = layer->dataProvider();
QgsVectorDataProvider *provider = layer->dataProvider();
QDomNodeList fidNodes = filterElem.elementsByTagName( "FeatureId" );
if ( fidNodes.size() != 0 )
@ -1517,7 +1553,8 @@ QgsFeatureIds QgsWFSServer::getFeatureIdsFromFilter( QDomElement filterElem, Qgs
{
QgsFeature feature;
const QgsFields& fields = provider->fields();
while ( layer->nextFeature( feature ) )
QgsFeatureIterator fit = layer->getFeatures();
while ( fit.nextFeature( feature ) )
{
QVariant res = mFilter->evaluate( &feature, fields );
if ( mFilter->hasEvalError() )

View File

@ -1265,8 +1265,11 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
bool addWktGeometry = mConfigParser && mConfigParser->featureInfoWithWktGeometry();
const QSet<QString>& excludedAttributes = layer->excludeAttributesWMS();
layer->select( layer->pendingAllAttributesList(), searchRect, addWktGeometry || featureBBox, true );
while ( layer->nextFeature( feature ) )
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest()
.setFilterRect( searchRect )
.setFlags((( addWktGeometry || featureBBox ) ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) | QgsFeatureRequest::ExactIntersect )
);
while ( fit.nextFeature( feature ) )
{
++featureCounter;
if ( featureCounter > nFeatures )

View File

@ -80,7 +80,7 @@ void QgsDiagramOverlay::createOverlayObjects( const QgsRenderContext& renderCont
if ( mVectorLayer && mDiagramRenderer )
{
//set spatial filter on data provider
mVectorLayer->select( mAttributes, renderContext.extent() );
QgsFeatureIterator fit = mVectorLayer->getFeatures( QgsFeatureRequest().setFilterRect( renderContext.extent() ).setSubsetOfAttributes( mAttributes ) );
QgsFeature currentFeature;
QgsGeometry* currentGeometry = 0;
@ -93,7 +93,7 @@ void QgsDiagramOverlay::createOverlayObjects( const QgsRenderContext& renderCont
std::list<unsigned char*>::iterator bufferIt;
std::list<int>::iterator sizeIt;
while ( mVectorLayer->nextFeature( currentFeature ) )
while ( fit.nextFeature( currentFeature ) )
{
//todo: insert more objects for multipart features
if ( mDiagramRenderer->getDiagramDimensions( width, height, currentFeature, renderContext ) != 0 )
@ -121,14 +121,14 @@ void QgsDiagramOverlay::drawOverlayObjects( QgsRenderContext& context ) const
if ( mVectorLayer && mDiagramRenderer )
{
//set spatial filter on data provider
mVectorLayer->select( mAttributes, context.extent() );
QgsFeatureIterator fit = mVectorLayer->getFeatures( QgsFeatureRequest().setFilterRect( context.extent() ).setSubsetOfAttributes( mAttributes ) );
QgsFeature currentFeature;
QImage* currentDiagramImage = 0;
QPainter* painter = context.painter();
while ( mVectorLayer->nextFeature( currentFeature ) )
while ( fit.nextFeature( currentFeature ) )
{
//request diagram from renderer
currentDiagramImage = mDiagramRenderer->renderDiagram( currentFeature, context );

View File

@ -568,7 +568,7 @@ QgsFeature* eVisGenericEventBrowserGui::featureAtId( QgsFeatureId id )
//It has mostly been stripped down now
if ( mDataProvider && mFeatureIds.size( ) != 0 )
{
if ( !mVectorLayer->featureAtId( id, mFeature, true, true ) )
if ( !mVectorLayer->getFeatures( QgsFeatureRequest().setFilterFid( id ) ).nextFeature( mFeature ) )
{
return 0;
}

View File

@ -108,11 +108,11 @@ void eVisEventIdTool::select( QgsPoint thePoint )
//Rather than add to the current selection, clear all selected features
myLayer->removeSelection( false );
//select features
myLayer->select( QgsAttributeList(), myRectangle, true, true );
QgsFeatureIterator fit = myLayer->getFeatures( QgsFeatureRequest().setFilterRect( myRectangle ).setFlags( QgsFeatureRequest::ExactIntersect ).setSubsetOfAttributes( QgsAttributeList() ) );
QgsFeature f;
QgsFeatureIds newSelectedFeatures;
while ( myLayer->nextFeature( f ) )
while ( fit.nextFeature( f ) )
{
newSelectedFeatures.insert( f.id() );
}

View File

@ -389,10 +389,9 @@ void GlobePlugin::setupMap()
if ( model )
{
QgsVectorLayer* layer = mSettingsDialog->modelLayer();
QgsAttributeList fetchAttributes;
layer->select( fetchAttributes ); //TODO: select only visible features
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( QgsAttributeList() ) ); //TODO: select only visible features
QgsFeature feature;
while ( layer->nextFeature( feature ) )
while ( fit.nextFeature( feature ) )
{
QgsPoint point = feature.geometry()->asPoint();
placeNode( model, point.y(), point.x() );

View File

@ -172,7 +172,7 @@ void Heatmap::run()
}
// This might have attributes or mightnot have attibutes at all
// based on the variableRadius() and weighted()
inputLayer->select( myAttrList );
QgsFeatureIterator fit = inputLayer->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( myAttrList ) );
int totalFeatures = inputLayer->featureCount();
int counter = 0;
@ -181,7 +181,7 @@ void Heatmap::run()
QgsFeature myFeature;
while ( inputLayer->nextFeature( myFeature ) )
while ( fit.nextFeature( myFeature ) )
{
counter++;
p.setValue( counter );

View File

@ -53,7 +53,7 @@ void QgsReaderFeatures::initReader( bool useSelection )
}
else
{
mLayer->select( QgsAttributeList() );
mFit = mLayer->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( QgsAttributeList() ) );
mFuncNextFeature = &QgsReaderFeatures::nextFeatureTotal;
}
@ -61,20 +61,16 @@ void QgsReaderFeatures::initReader( bool useSelection )
bool QgsReaderFeatures::nextFeatureTotal( QgsFeature & feature )
{
return mLayer->nextFeature( feature );
return mFit.nextFeature( feature );
} // bool QgsReaderFeatures::nextFeatureTotal ( QgsFeature & feature )
bool QgsReaderFeatures::nextFeatureSelected( QgsFeature & feature )
{
bool bReturn = true;
if ( mIterSelectedFeature == mListSelectedFeature.end() )
{
bReturn = false;
}
else
{
feature = *mIterSelectedFeature;
mIterSelectedFeature++;
}
return bReturn;
return false;
feature = *mIterSelectedFeature;
mIterSelectedFeature++;
return true;
} // bool QgsReaderFeatures::nextFeatureSelected( QgsFeature &feature )

View File

@ -72,6 +72,7 @@ class QgsReaderFeatures
QgsFeatureList mListSelectedFeature;
QList<QgsFeature>::iterator mIterSelectedFeature;
bool ( QgsReaderFeatures::* mFuncNextFeature )( QgsFeature & );
QgsFeatureIterator mFit;
};
#endif // READERFEATURES_H

View File

@ -64,7 +64,7 @@ void QgsRubberSelectId::addFeature( QgsVectorLayer* lyr, QgsFeatureId fid )
setStyle();
}
QgsFeature feat;
if ( !lyr->featureAtId( fid, feat, true, false ) )
if ( !lyr->getFeatures( QgsFeatureRequest().setFilterFid( fid ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( feat ) )
{
return;
}

View File

@ -293,7 +293,7 @@ void QgsSpatialQuery::populateIndexResult(
QList<QgsFeatureId>::iterator iterIdReference = listIdReference.begin();
for ( ; iterIdReference != listIdReference.end(); iterIdReference++ )
{
mLayerReference->featureAtId( *iterIdReference, featureReference );
mLayerReference->getFeatures( QgsFeatureRequest().setFilterFid( *iterIdReference ) ).nextFeature( featureReference );
geomReference = featureReference.geometry();
if (( geomTarget->*op )( geomReference ) )
{
@ -321,7 +321,7 @@ void QgsSpatialQuery::populateIndexResultDisjoint(
bool addIndex = true;
for ( ; iterIdReference != listIdReference.end(); iterIdReference++ )
{
mLayerReference->featureAtId( *iterIdReference, featureReference );
mLayerReference->getFeatures( QgsFeatureRequest().setFilterFid( *iterIdReference ) ).nextFeature( featureReference );
geomReference = featureReference.geometry();
if ( !( geomTarget->*op )( geomReference ) )

View File

@ -673,7 +673,7 @@ void QgsSpatialQueryDialog::zoomFeature( QgsVectorLayer* lyr, QgsFeatureId fid )
}
QgsFeature feat;
if ( !lyr->featureAtId( fid, feat, true, false ) )
if ( !lyr->getFeatures( QgsFeatureRequest().setFilterFid( fid ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( feat ) )
{
return;
}

View File

@ -125,11 +125,10 @@ void TestQgsComposerLabel::evaluation()
void TestQgsComposerLabel::feature_evaluation()
{
QgsAttributeList allAttrs = mVectorLayer->pendingAllAttributesList();
mVectorLayer->select( allAttrs );
QgsFeatureIterator fit = mVectorLayer->getFeatures();
QgsFeature feat;
mVectorLayer->nextFeature( feat );
fit.nextFeature( feat );
{
// evaluation with a feature
mComposerLabel->setExpressionContext( &feat, mVectorLayer );
@ -138,7 +137,7 @@ void TestQgsComposerLabel::feature_evaluation()
QString expected = "Basse-Normandie_ok";
QCOMPARE( evaluated, expected );
}
mVectorLayer->nextFeature( feat );
fit.nextFeature( feat );
{
// evaluation with a feature
mComposerLabel->setExpressionContext( &feat, mVectorLayer );

View File

@ -144,8 +144,8 @@ class TestQgsVectorLayer: public QObject
QgsAttributeList myList;
myList << 0 << 1 << 2 << 3;
int myCount = 0;
mpNonSpatialLayer->select( myList );
while ( mpNonSpatialLayer->nextFeature( f ) )
QgsFeatureIterator fit = mpNonSpatialLayer->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( myList ) );
while ( fit.nextFeature( f ) )
{
qDebug( "Getting non-spatial feature from layer" );
myCount++;