Skip to content

Commit b1efd47

Browse files
committed
- introduce qgsDoubleToString for format double with maximum precision
- usage in mssql provider fixes #7638 - read precision in mssql provider (fixes #5966) - commit errors are only shown once
1 parent e0a0a3a commit b1efd47

21 files changed

+177
-161
lines changed

src/app/qgisapp.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4269,6 +4269,7 @@ void QgisApp::commitError( QgsVectorLayer* vlayer )
42694269
showMore->setDefaultAction( act );
42704270

42714271
connect( showMore, SIGNAL( triggered( QAction* ) ), mv, SLOT( exec() ) );
4272+
connect( showMore, SIGNAL( triggered( QAction* ) ), showMore, SLOT( deleteLater() ) );
42724273
errorMsg->layout()->addWidget( showMore );
42734274

42744275
// no timeout set, since notice needs attention and is only shown first time layer is labeled

src/app/qgsprojectproperties.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -940,10 +940,10 @@ void QgsProjectProperties::restoreState()
940940
void QgsProjectProperties::on_pbnWMSExtCanvas_clicked()
941941
{
942942
QgsRectangle ext = mMapCanvas->extent();
943-
mWMSExtMinX->setText( QString::number( ext.xMinimum(), 'f', 8 ) );
944-
mWMSExtMinY->setText( QString::number( ext.yMinimum(), 'f', 8 ) );
945-
mWMSExtMaxX->setText( QString::number( ext.xMaximum(), 'f', 8 ) );
946-
mWMSExtMaxY->setText( QString::number( ext.yMaximum(), 'f', 8 ) );
943+
mWMSExtMinX->setText( qgsDoubleToString( ext.xMinimum() ) );
944+
mWMSExtMinY->setText( qgsDoubleToString( ext.yMinimum() ) );
945+
mWMSExtMaxX->setText( qgsDoubleToString( ext.xMaximum() ) );
946+
mWMSExtMaxY->setText( qgsDoubleToString( ext.yMaximum() ) );
947947
}
948948

949949
void QgsProjectProperties::on_pbnWMSAddSRS_clicked()

src/core/qgis.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
#include <QEvent>
2222
#include <QString>
23+
#include <QRegExp>
2324
#include <QMetaType>
2425
#include <QVariant>
2526
#include <stdlib.h>
@@ -243,6 +244,14 @@ inline void ( *cast_to_fptr( void *p ) )()
243244
return u.f;
244245
}
245246

247+
//
248+
// return a string representation of a double
249+
//
250+
inline QString qgsDoubleToString( const double &a )
251+
{
252+
return QString::number( a, 'f', 17 ).remove( QRegExp( "\\.?0+$" ) );
253+
}
254+
246255
//
247256
// compare two doubles (but allow some difference)
248257
//

src/core/qgsgeometry.cpp

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4006,10 +4006,10 @@ QString QgsGeometry::exportToWkt() const
40064006
{
40074007
mWkt += "POINT(";
40084008
x = ( double * )( mGeometry + 5 );
4009-
mWkt += QString::number( *x, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4009+
mWkt += qgsDoubleToString( *x );
40104010
mWkt += " ";
40114011
y = ( double * )( mGeometry + 5 + sizeof( double ) );
4012-
mWkt += QString::number( *y, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4012+
mWkt += qgsDoubleToString( *y );
40134013
mWkt += ")";
40144014
return mWkt;
40154015
}
@@ -4035,11 +4035,11 @@ QString QgsGeometry::exportToWkt() const
40354035
mWkt += ", ";
40364036
}
40374037
x = ( double * ) ptr;
4038-
mWkt += QString::number( *x, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4038+
mWkt += qgsDoubleToString( *x );
40394039
mWkt += " ";
40404040
ptr += sizeof( double );
40414041
y = ( double * ) ptr;
4042-
mWkt += QString::number( *y, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4042+
mWkt += qgsDoubleToString( *y );
40434043
ptr += sizeof( double );
40444044
if ( hasZValue )
40454045
{
@@ -4090,11 +4090,11 @@ QString QgsGeometry::exportToWkt() const
40904090
mWkt += ",";
40914091
}
40924092
x = ( double * ) ptr;
4093-
mWkt += QString::number( *x, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4093+
mWkt += qgsDoubleToString( *x );
40944094
mWkt += " ";
40954095
ptr += sizeof( double );
40964096
y = ( double * ) ptr;
4097-
mWkt += QString::number( *y, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4097+
mWkt += qgsDoubleToString( *y );
40984098
ptr += sizeof( double );
40994099
if ( hasZValue )
41004100
{
@@ -4128,11 +4128,11 @@ QString QgsGeometry::exportToWkt() const
41284128
mWkt += ", ";
41294129
}
41304130
x = ( double * )( ptr );
4131-
mWkt += QString::number( *x, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4131+
mWkt += qgsDoubleToString( *x );
41324132
mWkt += " ";
41334133
ptr += sizeof( double );
41344134
y = ( double * )( ptr );
4135-
mWkt += QString::number( *y, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4135+
mWkt += qgsDoubleToString( *y );
41364136
ptr += sizeof( double );
41374137
if ( hasZValue )
41384138
{
@@ -4172,11 +4172,11 @@ QString QgsGeometry::exportToWkt() const
41724172
mWkt += ", ";
41734173
}
41744174
x = ( double * ) ptr;
4175-
mWkt += QString::number( *x, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4175+
mWkt += qgsDoubleToString( *x );
41764176
ptr += sizeof( double );
41774177
mWkt += " ";
41784178
y = ( double * ) ptr;
4179-
mWkt += QString::number( *y, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4179+
mWkt += qgsDoubleToString( *y );
41804180
ptr += sizeof( double );
41814181
if ( hasZValue )
41824182
{
@@ -4228,11 +4228,11 @@ QString QgsGeometry::exportToWkt() const
42284228
mWkt += ",";
42294229
}
42304230
x = ( double * ) ptr;
4231-
mWkt += QString::number( *x, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4231+
mWkt += qgsDoubleToString( *x );
42324232
ptr += sizeof( double );
42334233
mWkt += " ";
42344234
y = ( double * ) ptr;
4235-
mWkt += QString::number( *y, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4235+
mWkt += qgsDoubleToString( *y );
42364236
ptr += sizeof( double );
42374237
if ( hasZValue )
42384238
{
@@ -4286,10 +4286,10 @@ QString QgsGeometry::exportToGeoJSON() const
42864286
{
42874287
mWkt += "{ \"type\": \"Point\", \"coordinates\": [";
42884288
x = ( double * )( mGeometry + 5 );
4289-
mWkt += QString::number( *x, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4289+
mWkt += qgsDoubleToString( *x );
42904290
mWkt += ", ";
42914291
y = ( double * )( mGeometry + 5 + sizeof( double ) );
4292-
mWkt += QString::number( *y, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4292+
mWkt += qgsDoubleToString( *y );
42934293
mWkt += "] }";
42944294
return mWkt;
42954295
}
@@ -4316,11 +4316,11 @@ QString QgsGeometry::exportToGeoJSON() const
43164316
}
43174317
mWkt += "[";
43184318
x = ( double * ) ptr;
4319-
mWkt += QString::number( *x, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4319+
mWkt += qgsDoubleToString( *x );
43204320
mWkt += ", ";
43214321
ptr += sizeof( double );
43224322
y = ( double * ) ptr;
4323-
mWkt += QString::number( *y, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4323+
mWkt += qgsDoubleToString( *y );
43244324
ptr += sizeof( double );
43254325
if ( hasZValue )
43264326
{
@@ -4373,11 +4373,11 @@ QString QgsGeometry::exportToGeoJSON() const
43734373
}
43744374
mWkt += "[";
43754375
x = ( double * ) ptr;
4376-
mWkt += QString::number( *x, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4376+
mWkt += qgsDoubleToString( *x );
43774377
mWkt += ", ";
43784378
ptr += sizeof( double );
43794379
y = ( double * ) ptr;
4380-
mWkt += QString::number( *y, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4380+
mWkt += qgsDoubleToString( *y );
43814381
ptr += sizeof( double );
43824382
if ( hasZValue )
43834383
{
@@ -4413,11 +4413,11 @@ QString QgsGeometry::exportToGeoJSON() const
44134413
}
44144414
mWkt += "[";
44154415
x = ( double * )( ptr );
4416-
mWkt += QString::number( *x, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4416+
mWkt += qgsDoubleToString( *x );
44174417
mWkt += ", ";
44184418
ptr += sizeof( double );
44194419
y = ( double * )( ptr );
4420-
mWkt += QString::number( *y, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4420+
mWkt += qgsDoubleToString( *y );
44214421
ptr += sizeof( double );
44224422
if ( hasZValue )
44234423
{
@@ -4459,11 +4459,11 @@ QString QgsGeometry::exportToGeoJSON() const
44594459
}
44604460
mWkt += "[";
44614461
x = ( double * ) ptr;
4462-
mWkt += QString::number( *x, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4462+
mWkt += qgsDoubleToString( *x );
44634463
ptr += sizeof( double );
44644464
mWkt += ", ";
44654465
y = ( double * ) ptr;
4466-
mWkt += QString::number( *y, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4466+
mWkt += qgsDoubleToString( *y );
44674467
ptr += sizeof( double );
44684468
if ( hasZValue )
44694469
{
@@ -4517,11 +4517,11 @@ QString QgsGeometry::exportToGeoJSON() const
45174517
}
45184518
mWkt += "[";
45194519
x = ( double * ) ptr;
4520-
mWkt += QString::number( *x, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4520+
mWkt += qgsDoubleToString( *x );
45214521
ptr += sizeof( double );
45224522
mWkt += ", ";
45234523
y = ( double * ) ptr;
4524-
mWkt += QString::number( *y, 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) );
4524+
mWkt += qgsDoubleToString( *y );
45254525
ptr += sizeof( double );
45264526
if ( hasZValue )
45274527
{

src/core/qgsmaprenderer.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,9 @@ void QgsMapRenderer::adjustExtentToSize()
190190
dymax = mExtent.yMaximum() + whitespace;
191191
}
192192

193-
QgsDebugMsg( QString( "Map units per pixel (x,y) : %1, %2" ).arg( mapUnitsPerPixelX, 0, 'f', 8 ).arg( mapUnitsPerPixelY, 0, 'f', 8 ) );
194-
QgsDebugMsg( QString( "Pixmap dimensions (x,y) : %1, %2" ).arg( myWidth, 0, 'f', 8 ).arg( myHeight, 0, 'f', 8 ) );
195-
QgsDebugMsg( QString( "Extent dimensions (x,y) : %1, %2" ).arg( mExtent.width(), 0, 'f', 8 ).arg( mExtent.height(), 0, 'f', 8 ) );
193+
QgsDebugMsg( QString( "Map units per pixel (x,y) : %1, %2" ).arg( qgsDoubleToString( mapUnitsPerPixelX ) ).arg( qgsDoubleToString( mapUnitsPerPixelY ) ) );
194+
QgsDebugMsg( QString( "Pixmap dimensions (x,y) : %1, %2" ).arg( qgsDoubleToString( myWidth ) ).arg( qgsDoubleToString( myHeight ) ) );
195+
QgsDebugMsg( QString( "Extent dimensions (x,y) : %1, %2" ).arg( qgsDoubleToString( mExtent.width() ) ).arg( qgsDoubleToString( mExtent.height() ) ) );
196196
QgsDebugMsg( mExtent.toString() );
197197

198198
// update extent
@@ -201,14 +201,14 @@ void QgsMapRenderer::adjustExtentToSize()
201201
mExtent.setYMinimum( dymin );
202202
mExtent.setYMaximum( dymax );
203203

204-
QgsDebugMsg( QString( "Adjusted map units per pixel (x,y) : %1, %2" ).arg( mExtent.width() / myWidth, 0, 'f', 8 ).arg( mExtent.height() / myHeight, 0, 'f', 8 ) );
204+
QgsDebugMsg( QString( "Adjusted map units per pixel (x,y) : %1, %2" ).arg( qgsDoubleToString( mExtent.width() / myWidth ) ).arg( qgsDoubleToString( mExtent.height() / myHeight ) ) );
205205

206-
QgsDebugMsg( QString( "Recalced pixmap dimensions (x,y) : %1, %2" ).arg( mExtent.width() / mMapUnitsPerPixel, 0, 'f', 8 ).arg( mExtent.height() / mMapUnitsPerPixel, 0, 'f', 8 ) );
206+
QgsDebugMsg( QString( "Recalced pixmap dimensions (x,y) : %1, %2" ).arg( qgsDoubleToString( mExtent.width() / mMapUnitsPerPixel ) ).arg( qgsDoubleToString( mExtent.height() / mMapUnitsPerPixel ) ) );
207207

208208
// update the scale
209209
updateScale();
210210

211-
QgsDebugMsg( QString( "Scale (assuming meters as map units) = 1:%1" ).arg( mScale, 0, 'f', 8 ) );
211+
QgsDebugMsg( QString( "Scale (assuming meters as map units) = 1:%1" ).arg( qgsDoubleToString( mScale ) ) );
212212

213213
newCoordXForm.setParameters( mMapUnitsPerPixel, dxmin, dymin, myHeight );
214214
mRenderContext.setMapToPixel( newCoordXForm );
@@ -960,8 +960,8 @@ void QgsMapRenderer::updateFullExtent()
960960

961961
if ( lyr->extent().isEmpty() )
962962
{
963-
it++;
964-
continue;
963+
it++;
964+
continue;
965965
}
966966

967967
// Layer extents are stored in the coordinate system (CS) of the
@@ -1129,10 +1129,10 @@ bool QgsMapRenderer::writeXML( QDomNode & theNode, QDomDocument & theDoc )
11291129
QDomElement yMax = theDoc.createElement( "ymax" );
11301130

11311131
QgsRectangle r = extent();
1132-
QDomText xMinText = theDoc.createTextNode( QString::number( r.xMinimum(), 'f' ) );
1133-
QDomText yMinText = theDoc.createTextNode( QString::number( r.yMinimum(), 'f' ) );
1134-
QDomText xMaxText = theDoc.createTextNode( QString::number( r.xMaximum(), 'f' ) );
1135-
QDomText yMaxText = theDoc.createTextNode( QString::number( r.yMaximum(), 'f' ) );
1132+
QDomText xMinText = theDoc.createTextNode( qgsDoubleToString( r.xMinimum() ) );
1133+
QDomText yMinText = theDoc.createTextNode( qgsDoubleToString( r.yMinimum() ) );
1134+
QDomText xMaxText = theDoc.createTextNode( qgsDoubleToString( r.xMaximum() ) );
1135+
QDomText yMaxText = theDoc.createTextNode( qgsDoubleToString( r.yMaximum() ) );
11361136

11371137
xMin.appendChild( xMinText );
11381138
yMin.appendChild( yMinText );

0 commit comments

Comments
 (0)