Skip to content

Commit 403f59f

Browse files
committedAug 22, 2014
Bug #10974 QGIS WFS Server provides too much precision PR #1520 UI
Add a cell in the WFS vector layer table to specify the coordinate precision by layer
1 parent 6148bba commit 403f59f

File tree

6 files changed

+109
-63
lines changed

6 files changed

+109
-63
lines changed
 

‎src/app/qgsprojectproperties.cpp

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas* mapCanvas, QWidget *pa
379379
QSignalMapper *smDelete = new QSignalMapper( this );
380380
connect( smDelete, SIGNAL( mapped( int ) ), this, SLOT( cbxWFSDeleteStateChanged( int ) ) );
381381

382-
twWFSLayers->setColumnCount( 5 );
382+
twWFSLayers->setColumnCount( 6 );
383383
twWFSLayers->horizontalHeader()->setVisible( true );
384384
twWFSLayers->setRowCount( mapLayers.size() );
385385

@@ -405,14 +405,18 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas* mapCanvas, QWidget *pa
405405

406406
smPublied->setMapping( cbp, j );
407407
connect( cbp, SIGNAL( stateChanged( int ) ), smPublied, SLOT( map() ) );
408+
409+
QSpinBox* psb = new QSpinBox();
410+
psb->setValue( QgsProject::instance()->readNumEntry( "WFSLayersPrecision", "/"+currentLayer->id(), 8 ) );
411+
twWFSLayers->setCellWidget( j, 2, psb );
408412

409413
QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer*>( currentLayer );
410414
QgsVectorDataProvider* provider = vlayer->dataProvider();
411415
if (( provider->capabilities() & QgsVectorDataProvider::ChangeAttributeValues ) && ( provider->capabilities() & QgsVectorDataProvider::ChangeGeometries ) )
412416
{
413417
QCheckBox* cbu = new QCheckBox();
414418
cbu->setChecked( wfstUpdateLayerIdList.contains( currentLayer->id() ) );
415-
twWFSLayers->setCellWidget( j, 2, cbu );
419+
twWFSLayers->setCellWidget( j, 3, cbu );
416420

417421
smUpdate->setMapping( cbu, j );
418422
connect( cbu, SIGNAL( stateChanged( int ) ), smUpdate, SLOT( map() ) );
@@ -421,7 +425,7 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas* mapCanvas, QWidget *pa
421425
{
422426
QCheckBox* cbi = new QCheckBox();
423427
cbi->setChecked( wfstInsertLayerIdList.contains( currentLayer->id() ) );
424-
twWFSLayers->setCellWidget( j, 3, cbi );
428+
twWFSLayers->setCellWidget( j, 4, cbi );
425429

426430
smInsert->setMapping( cbi, j );
427431
connect( cbi, SIGNAL( stateChanged( int ) ), smInsert, SLOT( map() ) );
@@ -430,7 +434,7 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas* mapCanvas, QWidget *pa
430434
{
431435
QCheckBox* cbd = new QCheckBox();
432436
cbd->setChecked( wfstDeleteLayerIdList.contains( currentLayer->id() ) );
433-
twWFSLayers->setCellWidget( j, 4, cbd );
437+
twWFSLayers->setCellWidget( j, 5, cbd );
434438

435439
smDelete->setMapping( cbd, j );
436440
connect( cbd, SIGNAL( stateChanged( int ) ), smDelete, SLOT( map() ) );
@@ -866,21 +870,25 @@ void QgsProjectProperties::apply()
866870
if ( cb && cb->isChecked() )
867871
{
868872
wfsLayerList << id;
869-
}
870-
cb = qobject_cast<QCheckBox *>( twWFSLayers->cellWidget( i, 2 ) );
871-
if ( cb && cb->isChecked() )
872-
{
873-
wfstUpdateLayerList << id;
874-
}
875-
cb = qobject_cast<QCheckBox *>( twWFSLayers->cellWidget( i, 3 ) );
876-
if ( cb && cb->isChecked() )
877-
{
878-
wfstInsertLayerList << id;
879-
}
880-
cb = qobject_cast<QCheckBox *>( twWFSLayers->cellWidget( i, 4 ) );
881-
if ( cb && cb->isChecked() )
882-
{
883-
wfstDeleteLayerList << id;
873+
874+
QSpinBox* sb = qobject_cast<QSpinBox *>( twWFSLayers->cellWidget( i, 2 ) );
875+
QgsProject::instance()->writeEntry( "WFSLayersPrecision", "/"+id, sb->value() );
876+
877+
cb = qobject_cast<QCheckBox *>( twWFSLayers->cellWidget( i, 3 ) );
878+
if ( cb && cb->isChecked() )
879+
{
880+
wfstUpdateLayerList << id;
881+
}
882+
cb = qobject_cast<QCheckBox *>( twWFSLayers->cellWidget( i, 4 ) );
883+
if ( cb && cb->isChecked() )
884+
{
885+
wfstInsertLayerList << id;
886+
}
887+
cb = qobject_cast<QCheckBox *>( twWFSLayers->cellWidget( i, 5 ) );
888+
if ( cb && cb->isChecked() )
889+
{
890+
wfstDeleteLayerList << id;
891+
}
884892
}
885893
}
886894
QgsProject::instance()->writeEntry( "WFSLayers", "/", wfsLayerList );

‎src/mapserver/qgswfsprojectparser.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,31 @@ QStringList QgsWFSProjectParser::wfsLayers() const
457457
return mProjectParser.wfsLayers();
458458
}
459459

460+
int QgsWFSProjectParser::wfsLayerPrecision( const QString& aLayerId ) const
461+
{
462+
QStringList wfsLayersId = mProjectParser.wfsLayers();
463+
if ( !wfsLayersId.contains( aLayerId ) )
464+
{
465+
return -1;
466+
}
467+
int prec = 8;
468+
QDomElement propertiesElem = mProjectParser.propertiesElem();
469+
if ( !propertiesElem.isNull() )
470+
{
471+
QDomElement wfsPrecElem = propertiesElem.firstChildElement( "WFSLayersPrecision" );
472+
if ( !wfsPrecElem.isNull() )
473+
{
474+
QDomElement wfsLayerPrecElem = wfsPrecElem.firstChildElement( aLayerId );
475+
if ( !wfsLayerPrecElem.isNull() )
476+
{
477+
QString precStr = wfsLayerPrecElem.text();
478+
prec = precStr.toInt();
479+
}
480+
}
481+
}
482+
return prec;
483+
}
484+
460485
QList<QgsMapLayer*> QgsWFSProjectParser::mapLayerFromTypeName( const QString& aTypeName, bool useCache ) const
461486
{
462487
Q_UNUSED( useCache );

‎src/mapserver/qgswfsprojectparser.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class QgsWFSProjectParser
3434
void describeFeatureType( const QString& aTypeName, QDomElement& parentElement, QDomDocument& doc ) const;
3535

3636
QStringList wfsLayers() const;
37+
int wfsLayerPrecision( const QString& aLayerId ) const;
3738

3839
QList<QgsMapLayer*> mapLayerFromTypeName( const QString& aTypeName, bool useCache = true ) const;
3940

‎src/mapserver/qgswfsserver.cpp

Lines changed: 46 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
379379
long maxFeat = 0;
380380
long maxFeatures = -1;
381381
long featureCounter = 0;
382+
int layerPrec = 8;
382383

383384
QDomDocument doc;
384385
QString errorMsg;
@@ -436,6 +437,9 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
436437

437438
//excluded attributes for this layer
438439
const QSet<QString>& layerExcludedAttributes = layer->excludeAttributesWFS();
440+
441+
//get layer precision
442+
layerPrec = mConfigParser->wfsLayerPrecision( layer->id() );
439443

440444
//do a select with searchRect and go through all the features
441445
QgsVectorDataProvider* provider = layer->dataProvider();
@@ -526,9 +530,9 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
526530
).nextFeature( feature );
527531

528532
if ( featureCounter == 0 )
529-
startGetFeature( request, format, layerCrs, &searchRect );
533+
startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
530534

531-
sendGetFeature( request, format, &feature, featCounter, layerCrs, attrIndexes, layerExcludedAttributes );
535+
sendGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes );
532536

533537
fid = "";
534538
++featCounter;
@@ -563,9 +567,9 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
563567
while ( fit.nextFeature( feature ) && ( maxFeatures == -1 || featureCounter < maxFeat ) )
564568
{
565569
if ( featureCounter == 0 )
566-
startGetFeature( request, format, layerCrs, &searchRect );
570+
startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
567571

568-
sendGetFeature( request, format, &feature, featCounter, layerCrs, attrIndexes, layerExcludedAttributes );
572+
sendGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes );
569573
++featCounter;
570574
++featureCounter;
571575
}
@@ -589,9 +593,9 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
589593
if ( res.toInt() != 0 )
590594
{
591595
if ( featureCounter == 0 )
592-
startGetFeature( request, format, layerCrs, &searchRect );
596+
startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
593597

594-
sendGetFeature( request, format, &feature, featureCounter, layerCrs, attrIndexes, layerExcludedAttributes );
598+
sendGetFeature( request, format, &feature, featureCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes );
595599
++featureCounter;
596600
++featCounter;
597601
}
@@ -604,9 +608,9 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
604608
while ( fit.nextFeature( feature ) && ( maxFeatures == -1 || featureCounter < maxFeat ) )
605609
{
606610
if ( featureCounter == 0 )
607-
startGetFeature( request, format, layerCrs, &searchRect );
611+
startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
608612

609-
sendGetFeature( request, format, &feature, featCounter, layerCrs, attrIndexes, layerExcludedAttributes );
613+
sendGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes );
610614
++featCounter;
611615
++featureCounter;
612616
}
@@ -621,7 +625,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
621625

622626
QgsMapLayerRegistry::instance()->removeAllMapLayers();
623627
if ( featureCounter == 0 )
624-
startGetFeature( request, format, layerCrs, &searchRect );
628+
startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
625629
endGetFeature( request, format );
626630
return 0;
627631
}
@@ -774,6 +778,9 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
774778

775779
//excluded attributes for this layer
776780
const QSet<QString>& layerExcludedAttributes = layer->excludeAttributesWFS();
781+
782+
//get layer precision
783+
int layerPrec = mConfigParser->wfsLayerPrecision( layer->id() );
777784

778785
//do a select with searchRect and go through all the features
779786
QgsVectorDataProvider* provider = layer->dataProvider();
@@ -841,9 +848,9 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
841848
).nextFeature( feature );
842849

843850
if ( featureCounter == 0 )
844-
startGetFeature( request, format, layerCrs, &searchRect );
851+
startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
845852

846-
sendGetFeature( request, format, &feature, featCounter, layerCrs, attrIndexes, layerExcludedAttributes );
853+
sendGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes );
847854
++featCounter;
848855
++featureCounter;
849856
}
@@ -887,9 +894,9 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
887894
if ( res.toInt() != 0 )
888895
{
889896
if ( featureCounter == 0 )
890-
startGetFeature( request, format, layerCrs, &searchRect );
897+
startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
891898

892-
sendGetFeature( request, format, &feature, featCounter, layerCrs, attrIndexes, layerExcludedAttributes );
899+
sendGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes );
893900
++featCounter;
894901
++featureCounter;
895902
}
@@ -924,9 +931,9 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
924931
).nextFeature( feature );
925932

926933
if ( featureCounter == 0 )
927-
startGetFeature( request, format, layerCrs, &searchRect );
934+
startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
928935

929-
sendGetFeature( request, format, &feature, featCounter, layerCrs, attrIndexes, layerExcludedAttributes );
936+
sendGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes );
930937

931938
fid = "";
932939
++featCounter;
@@ -961,9 +968,9 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
961968
while ( fit.nextFeature( feature ) && ( maxFeatures == -1 || featureCounter < maxFeat ) )
962969
{
963970
if ( featureCounter == 0 )
964-
startGetFeature( request, format, layerCrs, &searchRect );
971+
startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
965972

966-
sendGetFeature( request, format, &feature, featCounter, layerCrs, attrIndexes, layerExcludedAttributes );
973+
sendGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes );
967974
++featCounter;
968975
++featureCounter;
969976
}
@@ -1006,9 +1013,9 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
10061013
if ( res.toInt() != 0 )
10071014
{
10081015
if ( featureCounter == 0 )
1009-
startGetFeature( request, format, layerCrs, &searchRect );
1016+
startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
10101017

1011-
sendGetFeature( request, format, &feature, featureCounter, layerCrs, attrIndexes, layerExcludedAttributes );
1018+
sendGetFeature( request, format, &feature, featureCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes );
10121019
++featureCounter;
10131020
++featCounter;
10141021
}
@@ -1043,9 +1050,9 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
10431050
{
10441051
mErrors << QString( "The feature %2 of layer for the TypeName '%1'" ).arg( tnStr ).arg( featureCounter );
10451052
if ( featureCounter == 0 )
1046-
startGetFeature( request, format, layerCrs, &searchRect );
1053+
startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
10471054

1048-
sendGetFeature( request, format, &feature, featCounter, layerCrs, attrIndexes, layerExcludedAttributes );
1055+
sendGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes );
10491056
++featCounter;
10501057
++featureCounter;
10511058
}
@@ -1061,20 +1068,20 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
10611068

10621069
QgsMapLayerRegistry::instance()->removeAllMapLayers();
10631070
if ( featureCounter == 0 )
1064-
startGetFeature( request, format, layerCrs, &searchRect );
1071+
startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
10651072
endGetFeature( request, format );
10661073

10671074
return 0;
10681075
}
10691076

1070-
void QgsWFSServer::startGetFeature( QgsRequestHandler& request, const QString& format, QgsCoordinateReferenceSystem& crs, QgsRectangle* rect )
1077+
void QgsWFSServer::startGetFeature( QgsRequestHandler& request, const QString& format, int prec, QgsCoordinateReferenceSystem& crs, QgsRectangle* rect )
10711078
{
10721079
QByteArray result;
10731080
QString fcString;
10741081
if ( format == "GeoJSON" )
10751082
{
10761083
fcString = "{\"type\": \"FeatureCollection\",\n";
1077-
fcString += " \"bbox\": [ " + qgsDoubleToString( rect->xMinimum(), 8 ) + ", " + qgsDoubleToString( rect->yMinimum(), 8 ) + ", " + qgsDoubleToString( rect->xMaximum(), 8 ) + ", " + qgsDoubleToString( rect->yMaximum(), 8 ) + "],\n";
1084+
fcString += " \"bbox\": [ " + qgsDoubleToString( rect->xMinimum(), prec ) + ", " + qgsDoubleToString( rect->yMinimum(), prec ) + ", " + qgsDoubleToString( rect->xMaximum(), prec ) + ", " + qgsDoubleToString( rect->yMaximum(), prec ) + "],\n";
10781085
fcString += " \"features\": [\n";
10791086
result = fcString.toUtf8();
10801087
request.startGetFeatureResponse( &result, format );
@@ -1167,7 +1174,7 @@ void QgsWFSServer::startGetFeature( QgsRequestHandler& request, const QString& f
11671174
QDomElement bbElem = doc.createElement( "gml:boundedBy" );
11681175
if ( format == "GML3" )
11691176
{
1170-
QDomElement envElem = QgsOgcUtils::rectangleToGMLEnvelope( rect, doc, 8 );
1177+
QDomElement envElem = QgsOgcUtils::rectangleToGMLEnvelope( rect, doc, prec );
11711178
if ( !envElem.isNull() )
11721179
{
11731180
if ( crs.isValid() )
@@ -1180,7 +1187,7 @@ void QgsWFSServer::startGetFeature( QgsRequestHandler& request, const QString& f
11801187
}
11811188
else
11821189
{
1183-
QDomElement boxElem = QgsOgcUtils::rectangleToGMLBox( rect, doc, 8 );
1190+
QDomElement boxElem = QgsOgcUtils::rectangleToGMLBox( rect, doc, prec );
11841191
if ( !boxElem.isNull() )
11851192
{
11861193
if ( crs.isValid() )
@@ -1197,7 +1204,7 @@ void QgsWFSServer::startGetFeature( QgsRequestHandler& request, const QString& f
11971204
fcString = "";
11981205
}
11991206

1200-
void QgsWFSServer::sendGetFeature( QgsRequestHandler& request, const QString& format, QgsFeature* feat, int featIdx, QgsCoordinateReferenceSystem& crs, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes ) /*const*/
1207+
void QgsWFSServer::sendGetFeature( QgsRequestHandler& request, const QString& format, QgsFeature* feat, int featIdx, int prec, QgsCoordinateReferenceSystem& crs, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes ) /*const*/
12011208
{
12021209
if ( !feat->isValid() )
12031210
return;
@@ -1210,7 +1217,7 @@ void QgsWFSServer::sendGetFeature( QgsRequestHandler& request, const QString& fo
12101217
fcString += " ";
12111218
else
12121219
fcString += " ,";
1213-
fcString += createFeatureGeoJSON( feat, crs, attrIndexes, excludedAttributes );
1220+
fcString += createFeatureGeoJSON( feat, prec, crs, attrIndexes, excludedAttributes );
12141221
fcString += "\n";
12151222

12161223
result = fcString.toUtf8();
@@ -1223,12 +1230,12 @@ void QgsWFSServer::sendGetFeature( QgsRequestHandler& request, const QString& fo
12231230
QDomElement featureElement;
12241231
if ( format == "GML3" )
12251232
{
1226-
featureElement = createFeatureGML3( feat, gmlDoc, crs, attrIndexes, excludedAttributes );
1233+
featureElement = createFeatureGML3( feat, gmlDoc, prec, crs, attrIndexes, excludedAttributes );
12271234
gmlDoc.appendChild( featureElement );
12281235
}
12291236
else
12301237
{
1231-
featureElement = createFeatureGML2( feat, gmlDoc, crs, attrIndexes, excludedAttributes );
1238+
featureElement = createFeatureGML2( feat, gmlDoc, prec, crs, attrIndexes, excludedAttributes );
12321239
gmlDoc.appendChild( featureElement );
12331240
}
12341241

@@ -1678,7 +1685,7 @@ QgsFeatureIds QgsWFSServer::getFeatureIdsFromFilter( QDomElement filterElem, Qgs
16781685
return fids;
16791686
}
16801687

1681-
QString QgsWFSServer::createFeatureGeoJSON( QgsFeature* feat, QgsCoordinateReferenceSystem &, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes ) /*const*/
1688+
QString QgsWFSServer::createFeatureGeoJSON( QgsFeature* feat, int prec, QgsCoordinateReferenceSystem &, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes ) /*const*/
16821689
{
16831690
QString fStr = "{\"type\": \"Feature\",\n";
16841691

@@ -1691,10 +1698,10 @@ QString QgsWFSServer::createFeatureGeoJSON( QgsFeature* feat, QgsCoordinateRefer
16911698
{
16921699
QgsRectangle box = geom->boundingBox();
16931700

1694-
fStr += " \"bbox\": [ " + qgsDoubleToString( box.xMinimum(), 8 ) + ", " + qgsDoubleToString( box.yMinimum(), 8 ) + ", " + qgsDoubleToString( box.xMaximum(), 8 ) + ", " + qgsDoubleToString( box.yMaximum(), 8 ) + "],\n";
1701+
fStr += " \"bbox\": [ " + qgsDoubleToString( box.xMinimum(), prec ) + ", " + qgsDoubleToString( box.yMinimum(), prec ) + ", " + qgsDoubleToString( box.xMaximum(), prec ) + ", " + qgsDoubleToString( box.yMaximum(), prec ) + "],\n";
16951702

16961703
fStr += " \"geometry\": ";
1697-
fStr += geom->exportToGeoJSON( 8 );
1704+
fStr += geom->exportToGeoJSON( prec );
16981705
fStr += ",\n";
16991706
}
17001707

@@ -1741,7 +1748,7 @@ QString QgsWFSServer::createFeatureGeoJSON( QgsFeature* feat, QgsCoordinateRefer
17411748
return fStr;
17421749
}
17431750

1744-
QDomElement QgsWFSServer::createFeatureGML2( QgsFeature* feat, QDomDocument& doc, QgsCoordinateReferenceSystem& crs, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes ) /*const*/
1751+
QDomElement QgsWFSServer::createFeatureGML2( QgsFeature* feat, QDomDocument& doc, int prec, QgsCoordinateReferenceSystem& crs, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes ) /*const*/
17451752
{
17461753
//gml:FeatureMember
17471754
QDomElement featureElement = doc.createElement( "gml:featureMember"/*wfs:FeatureMember*/ );
@@ -1757,12 +1764,12 @@ QDomElement QgsWFSServer::createFeatureGML2( QgsFeature* feat, QDomDocument& doc
17571764
QgsGeometry* geom = feat->geometry();
17581765

17591766
QDomElement geomElem = doc.createElement( "qgs:geometry" );
1760-
QDomElement gmlElem = QgsOgcUtils::geometryToGML( geom, doc, 8 );
1767+
QDomElement gmlElem = QgsOgcUtils::geometryToGML( geom, doc, prec );
17611768
if ( !gmlElem.isNull() )
17621769
{
17631770
QgsRectangle box = geom->boundingBox();
17641771
QDomElement bbElem = doc.createElement( "gml:boundedBy" );
1765-
QDomElement boxElem = QgsOgcUtils::rectangleToGMLBox( &box, doc, 8 );
1772+
QDomElement boxElem = QgsOgcUtils::rectangleToGMLBox( &box, doc, prec );
17661773

17671774
if ( crs.isValid() )
17681775
{
@@ -1800,7 +1807,7 @@ QDomElement QgsWFSServer::createFeatureGML2( QgsFeature* feat, QDomDocument& doc
18001807
return featureElement;
18011808
}
18021809

1803-
QDomElement QgsWFSServer::createFeatureGML3( QgsFeature* feat, QDomDocument& doc, QgsCoordinateReferenceSystem& crs, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes ) /*const*/
1810+
QDomElement QgsWFSServer::createFeatureGML3( QgsFeature* feat, QDomDocument& doc, int prec, QgsCoordinateReferenceSystem& crs, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes ) /*const*/
18041811
{
18051812
//gml:FeatureMember
18061813
QDomElement featureElement = doc.createElement( "gml:featureMember"/*wfs:FeatureMember*/ );
@@ -1816,12 +1823,12 @@ QDomElement QgsWFSServer::createFeatureGML3( QgsFeature* feat, QDomDocument& doc
18161823
QgsGeometry* geom = feat->geometry();
18171824

18181825
QDomElement geomElem = doc.createElement( "qgs:geometry" );
1819-
QDomElement gmlElem = QgsOgcUtils::geometryToGML( geom, doc, "GML3", 8 );
1826+
QDomElement gmlElem = QgsOgcUtils::geometryToGML( geom, doc, "GML3", prec );
18201827
if ( !gmlElem.isNull() )
18211828
{
18221829
QgsRectangle box = geom->boundingBox();
18231830
QDomElement bbElem = doc.createElement( "gml:boundedBy" );
1824-
QDomElement boxElem = QgsOgcUtils::rectangleToGMLEnvelope( &box, doc, 8 );
1831+
QDomElement boxElem = QgsOgcUtils::rectangleToGMLEnvelope( &box, doc, prec );
18251832

18261833
if ( crs.isValid() )
18271834
{

‎src/mapserver/qgswfsserver.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,21 +103,21 @@ class QgsWFSServer: public QgsOWSServer
103103

104104
protected:
105105

106-
void startGetFeature( QgsRequestHandler& request, const QString& format, QgsCoordinateReferenceSystem& crs, QgsRectangle* rect );
107-
void sendGetFeature( QgsRequestHandler& request, const QString& format, QgsFeature* feat, int featIdx, QgsCoordinateReferenceSystem& crs, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes );
106+
void startGetFeature( QgsRequestHandler& request, const QString& format, int prec, QgsCoordinateReferenceSystem& crs, QgsRectangle* rect );
107+
void sendGetFeature( QgsRequestHandler& request, const QString& format, QgsFeature* feat, int featIdx, int prec, QgsCoordinateReferenceSystem& crs, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes );
108108
void endGetFeature( QgsRequestHandler& request, const QString& format );
109109

110110
//method for transaction
111111
QgsFeatureIds getFeatureIdsFromFilter( QDomElement filter, QgsVectorLayer* layer );
112112

113113
//methods to write GeoJSON
114-
QString createFeatureGeoJSON( QgsFeature* feat, QgsCoordinateReferenceSystem& crs, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes ) /*const*/;
114+
QString createFeatureGeoJSON( QgsFeature* feat, int prec, QgsCoordinateReferenceSystem& crs, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes ) /*const*/;
115115

116116
//methods to write GML2
117-
QDomElement createFeatureGML2( QgsFeature* feat, QDomDocument& doc, QgsCoordinateReferenceSystem& crs, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes ) /*const*/;
117+
QDomElement createFeatureGML2( QgsFeature* feat, QDomDocument& doc, int prec, QgsCoordinateReferenceSystem& crs, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes ) /*const*/;
118118

119119
//methods to write GML3
120-
QDomElement createFeatureGML3( QgsFeature* feat, QDomDocument& doc, QgsCoordinateReferenceSystem& crs, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes ) /*const*/;
120+
QDomElement createFeatureGML3( QgsFeature* feat, QDomDocument& doc, int prec, QgsCoordinateReferenceSystem& crs, QgsAttributeList attrIndexes, QSet<QString> excludedAttributes ) /*const*/;
121121
};
122122

123123
#endif

‎src/ui/qgsprojectpropertiesbase.ui

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2003,6 +2003,11 @@
20032003
<string>Published</string>
20042004
</property>
20052005
</column>
2006+
<column>
2007+
<property name="text">
2008+
<string>Geometry precision (decimal places)</string>
2009+
</property>
2010+
</column>
20062011
<column>
20072012
<property name="text">
20082013
<string>Update</string>

0 commit comments

Comments
 (0)
Please sign in to comment.