@@ -453,7 +453,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
453
453
if ( maxFeatures == -1 )
454
454
maxFeat += layer->featureCount ();
455
455
456
- provider ->select ( attrIndexes, searchRect, mWithGeom , true );
456
+ layer ->select ( attrIndexes, searchRect, mWithGeom , true );
457
457
458
458
long featCounter = 0 ;
459
459
QDomNodeList filterNodes = queryElem.elementsByTagName ( " Filter" );
@@ -476,7 +476,8 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
476
476
fid = fid.section ( " ." , 1 , 1 );
477
477
}
478
478
479
- provider->featureAtId ( fid.toInt (), feature, mWithGeom , attrIndexes );
479
+ // Need to be test for propertyname
480
+ layer->featureAtId ( fid.toInt (), feature, mWithGeom , true );
480
481
481
482
if ( featureCounter == 0 )
482
483
startGetFeature ( request, format, layerCrs, &searchRect );
@@ -497,16 +498,16 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
497
498
if ( childElem.tagName () == " Box" )
498
499
{
499
500
QgsRectangle* rect = new QgsRectangle ( childElem );
500
- provider ->select ( attrIndexes, *rect, mWithGeom , true );
501
+ layer ->select ( attrIndexes, *rect, mWithGeom , true );
501
502
}
502
503
else if ( childElem.tagName () != " PropertyName" )
503
504
{
504
505
QgsGeometry* geom = QgsGeometry::fromGML2 ( childElem );
505
- provider ->select ( attrIndexes, geom->boundingBox (), mWithGeom , true );
506
+ layer ->select ( attrIndexes, geom->boundingBox (), mWithGeom , true );
506
507
}
507
508
childElem = childElem.nextSiblingElement ();
508
509
}
509
- while ( provider ->nextFeature ( feature ) && featureCounter < maxFeat )
510
+ while ( layer ->nextFeature ( feature ) && featureCounter < maxFeat )
510
511
{
511
512
if ( featureCounter == 0 )
512
513
startGetFeature ( request, format, layerCrs, &searchRect );
@@ -525,7 +526,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
525
526
}
526
527
if ( mFilter )
527
528
{
528
- while ( provider ->nextFeature ( feature ) && featureCounter < maxFeat )
529
+ while ( layer ->nextFeature ( feature ) && featureCounter < maxFeat )
529
530
{
530
531
QVariant res = mFilter ->evaluate ( &feature, fields );
531
532
if ( mFilter ->hasEvalError () )
@@ -547,7 +548,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
547
548
}
548
549
else
549
550
{
550
- while ( provider ->nextFeature ( feature ) && featureCounter < maxFeat )
551
+ while ( layer ->nextFeature ( feature ) && featureCounter < maxFeat )
551
552
{
552
553
if ( featureCounter == 0 )
553
554
startGetFeature ( request, format, layerCrs, &searchRect );
@@ -731,7 +732,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
731
732
732
733
QgsFeature feature;
733
734
QgsAttributeMap featureAttributes;
734
- const QgsFieldMap & fields = provider->fields ();
735
+ const QgsFields & fields = provider->fields ();
735
736
736
737
// map extent
737
738
QgsRectangle searchRect = layer->extent ();
@@ -782,7 +783,8 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
782
783
{
783
784
if ( !fidStr.startsWith ( tnStr ) )
784
785
continue ;
785
- provider->featureAtId ( fidStr.section ( " ." , 1 , 1 ).toInt (), feature, mWithGeom , attrIndexes );
786
+ // Need to be test for propertyname
787
+ layer->featureAtId ( fidStr.section ( " ." , 1 , 1 ).toInt (), feature, mWithGeom , true );
786
788
787
789
if ( featureCounter == 0 )
788
790
startGetFeature ( request, format, layerCrs, &searchRect );
@@ -794,15 +796,15 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
794
796
}
795
797
else if ( expFilterOk )
796
798
{
797
- provider ->select ( attrIndexes, searchRect, mWithGeom , true );
799
+ layer ->select ( attrIndexes, searchRect, mWithGeom , true );
798
800
QgsExpression *mFilter = new QgsExpression ( expFilter );
799
801
if ( mFilter ->hasParserError () )
800
802
{
801
803
throw QgsMapServiceException ( " RequestNotWellFormed" , mFilter ->parserErrorString () );
802
804
}
803
805
if ( mFilter )
804
806
{
805
- while ( provider ->nextFeature ( feature ) && featureCounter < maxFeat )
807
+ while ( layer ->nextFeature ( feature ) && featureCounter < maxFeat )
806
808
{
807
809
QVariant res = mFilter ->evaluate ( &feature, fields );
808
810
if ( mFilter ->hasEvalError () )
@@ -824,7 +826,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
824
826
}
825
827
else if ( filterOk )
826
828
{
827
- provider ->select ( attrIndexes, searchRect, mWithGeom , true );
829
+ layer ->select ( attrIndexes, searchRect, mWithGeom , true );
828
830
QDomElement filterElem = filter.firstChildElement ();
829
831
QDomNodeList fidNodes = filterElem.elementsByTagName ( " FeatureId" );
830
832
if ( fidNodes.size () > 0 )
@@ -842,7 +844,8 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
842
844
fid = fid.section ( " ." , 1 , 1 );
843
845
}
844
846
845
- provider->featureAtId ( fid.toInt (), feature, mWithGeom , attrIndexes );
847
+ // Need to be test for propertyname
848
+ layer->featureAtId ( fid.toInt (), feature, mWithGeom , true );
846
849
847
850
if ( featureCounter == 0 )
848
851
startGetFeature ( request, format, layerCrs, &searchRect );
@@ -863,16 +866,16 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
863
866
if ( childElem.tagName () == " Box" )
864
867
{
865
868
QgsRectangle* rect = new QgsRectangle ( childElem );
866
- provider ->select ( attrIndexes, *rect, mWithGeom , true );
869
+ layer ->select ( attrIndexes, *rect, mWithGeom , true );
867
870
}
868
871
else if ( childElem.tagName () != " PropertyName" )
869
872
{
870
873
QgsGeometry* geom = QgsGeometry::fromGML2 ( childElem );
871
- provider ->select ( attrIndexes, geom->boundingBox (), mWithGeom , true );
874
+ layer ->select ( attrIndexes, geom->boundingBox (), mWithGeom , true );
872
875
}
873
876
childElem = childElem.nextSiblingElement ();
874
877
}
875
- while ( provider ->nextFeature ( feature ) && featureCounter < maxFeat )
878
+ while ( layer ->nextFeature ( feature ) && featureCounter < maxFeat )
876
879
{
877
880
if ( featureCounter == 0 )
878
881
startGetFeature ( request, format, layerCrs, &searchRect );
@@ -891,7 +894,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
891
894
}
892
895
if ( mFilter )
893
896
{
894
- while ( provider ->nextFeature ( feature ) && featureCounter < maxFeat )
897
+ while ( layer ->nextFeature ( feature ) && featureCounter < maxFeat )
895
898
{
896
899
QVariant res = mFilter ->evaluate ( &feature, fields );
897
900
if ( mFilter ->hasEvalError () )
@@ -914,8 +917,8 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
914
917
}
915
918
else
916
919
{
917
- provider ->select ( attrIndexes, searchRect, mWithGeom , true );
918
- while ( provider ->nextFeature ( feature ) && featureCounter < maxFeat )
920
+ layer ->select ( attrIndexes, searchRect, mWithGeom , true );
921
+ while ( layer ->nextFeature ( feature ) && featureCounter < maxFeat )
919
922
{
920
923
if ( featureCounter == 0 )
921
924
startGetFeature ( request, format, layerCrs, &searchRect );
@@ -1068,7 +1071,7 @@ void QgsWFSServer::startGetFeature( QgsRequestHandler& request, const QString& f
1068
1071
fcString = " " ;
1069
1072
}
1070
1073
1071
- void QgsWFSServer::sendGetFeature ( QgsRequestHandler& request, const QString& format, QgsFeature* feat, int featIdx, QgsCoordinateReferenceSystem& crs, QMap< int , QgsField > fields, QSet<QString> excludedAttributes ) /* const*/
1074
+ void QgsWFSServer::sendGetFeature ( QgsRequestHandler& request, const QString& format, QgsFeature* feat, int featIdx, QgsCoordinateReferenceSystem& crs, QgsFields fields, QSet<QString> excludedAttributes ) /* const*/
1072
1075
{
1073
1076
if ( !feat->isValid () )
1074
1077
return ;
@@ -1267,8 +1270,7 @@ QDomDocument QgsWFSServer::transaction( const QString& requestBody )
1267
1270
}
1268
1271
1269
1272
// Update the features
1270
- const QgsFieldMap& fields = provider->fields ();
1271
- QgsFieldMap::const_iterator fieldIt;
1273
+ const QgsFields& fields = provider->fields ();
1272
1274
QMap<QString, int > fieldMap = provider->fieldNameMap ();
1273
1275
QMap<QString, int >::const_iterator fieldMapIt;
1274
1276
QString fieldName;
@@ -1286,17 +1288,13 @@ QDomDocument QgsWFSServer::transaction( const QString& requestBody )
1286
1288
{
1287
1289
continue ;
1288
1290
}
1289
- fieldIt = fields.find ( fieldMapIt.value () );
1290
- if ( fieldIt == fields.constEnd () )
1291
- {
1292
- continue ;
1293
- }
1294
- if ( fieldIt.value ().type () == 2 )
1295
- layer->changeAttributeValue ( *fidIt, fieldIt.key (), it.value ().toInt ( &conversionSuccess ) );
1296
- else if ( fieldIt.value ().type () == 6 )
1297
- layer->changeAttributeValue ( *fidIt, fieldIt.key (), it.value ().toDouble ( &conversionSuccess ) );
1291
+ const QgsField& field = fields[fieldMapIt.value ()];
1292
+ if ( field.type () == 2 )
1293
+ layer->changeAttributeValue ( *fidIt, fieldMapIt.value (), it.value ().toInt ( &conversionSuccess ) );
1294
+ else if ( field.type () == 6 )
1295
+ layer->changeAttributeValue ( *fidIt, fieldMapIt.value (), it.value ().toDouble ( &conversionSuccess ) );
1298
1296
else
1299
- layer->changeAttributeValue ( *fidIt, fieldIt. key (), it.value () );
1297
+ layer->changeAttributeValue ( *fidIt, fieldMapIt. value (), it.value () );
1300
1298
}
1301
1299
1302
1300
if ( !geometryElem.isNull () )
@@ -1370,8 +1368,7 @@ QDomDocument QgsWFSServer::transaction( const QString& requestBody )
1370
1368
if ( cap & QgsVectorDataProvider::AddFeatures )
1371
1369
{
1372
1370
// Get Layer Field Information
1373
- const QgsFieldMap& fields = provider->fields ();
1374
- QgsFieldMap::const_iterator fieldIt;
1371
+ const QgsFields& fields = provider->fields ();
1375
1372
QMap<QString, int > fieldMap = provider->fieldNameMap ();
1376
1373
QMap<QString, int >::const_iterator fieldMapIt;
1377
1374
QString fieldName;
@@ -1406,19 +1403,15 @@ QDomDocument QgsWFSServer::transaction( const QString& requestBody )
1406
1403
{
1407
1404
continue ;
1408
1405
}
1409
- fieldIt = fields.find ( fieldMapIt.value () );
1410
- if ( fieldIt == fields.constEnd () )
1411
- {
1412
- continue ;
1413
- }
1406
+ const QgsField& field = fields[fieldMapIt.value ()];
1414
1407
QString attrValue = currentAttributeElement.text ();
1415
- int attrType = fieldIt. value () .type ();
1408
+ int attrType = field .type ();
1416
1409
if ( attrType == 2 )
1417
- f->addAttribute ( fieldIt. key (), attrValue.toInt () );
1410
+ f->setAttribute ( fieldMapIt. value (), attrValue.toInt () );
1418
1411
else if ( attrType == 6 )
1419
- f->addAttribute ( fieldIt. key (), attrValue.toDouble () );
1412
+ f->setAttribute ( fieldMapIt. value (), attrValue.toDouble () );
1420
1413
else
1421
- f->addAttribute ( fieldIt. key (), attrValue );
1414
+ f->setAttribute ( fieldMapIt. value (), attrValue );
1422
1415
}
1423
1416
else // a geometry attribute
1424
1417
{
@@ -1523,8 +1516,8 @@ QgsFeatureIds QgsWFSServer::getFeatureIdsFromFilter( QDomElement filterElem, Qgs
1523
1516
if ( mFilter )
1524
1517
{
1525
1518
QgsFeature feature;
1526
- const QgsFieldMap & fields = provider->fields ();
1527
- while ( provider ->nextFeature ( feature ) )
1519
+ const QgsFields & fields = provider->fields ();
1520
+ while ( layer ->nextFeature ( feature ) )
1528
1521
{
1529
1522
QVariant res = mFilter ->evaluate ( &feature, fields );
1530
1523
if ( mFilter ->hasEvalError () )
@@ -1542,7 +1535,7 @@ QgsFeatureIds QgsWFSServer::getFeatureIdsFromFilter( QDomElement filterElem, Qgs
1542
1535
return fids;
1543
1536
}
1544
1537
1545
- QString QgsWFSServer::createFeatureGeoJSON ( QgsFeature* feat, QgsCoordinateReferenceSystem &, QMap< int , QgsField > fields, QSet<QString> excludedAttributes ) /* const*/
1538
+ QString QgsWFSServer::createFeatureGeoJSON ( QgsFeature* feat, QgsCoordinateReferenceSystem &, QgsFields fields, QSet<QString> excludedAttributes ) /* const*/
1546
1539
{
1547
1540
QString fStr = " {\" type\" : \" Feature\" ,\n " ;
1548
1541
@@ -1603,7 +1596,7 @@ QString QgsWFSServer::createFeatureGeoJSON( QgsFeature* feat, QgsCoordinateRefer
1603
1596
return fStr ;
1604
1597
}
1605
1598
1606
- QDomElement QgsWFSServer::createFeatureGML2 ( QgsFeature* feat, QDomDocument& doc, QgsCoordinateReferenceSystem& crs, QMap< int , QgsField > fields, QSet<QString> excludedAttributes ) /* const*/
1599
+ QDomElement QgsWFSServer::createFeatureGML2 ( QgsFeature* feat, QDomDocument& doc, QgsCoordinateReferenceSystem& crs, QgsFields fields, QSet<QString> excludedAttributes ) /* const*/
1607
1600
{
1608
1601
// gml:FeatureMember
1609
1602
QDomElement featureElement = doc.createElement ( " gml:featureMember" /* wfs:FeatureMember*/ );
0 commit comments