Skip to content

Commit 0c29b4b

Browse files
committedSep 29, 2012
Better writing of coordinate (WKT, GeoJSON, GML2) and using of searchRect
1 parent fe8385e commit 0c29b4b

File tree

2 files changed

+33
-28
lines changed

2 files changed

+33
-28
lines changed
 

‎src/core/qgsgeometry.cpp

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3946,10 +3946,10 @@ QString QgsGeometry::exportToWkt()
39463946
{
39473947
mWkt += "POINT(";
39483948
x = ( double * )( mGeometry + 5 );
3949-
mWkt += QString::number( *x, 'f', 6 );
3949+
mWkt += QString::number( *x, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
39503950
mWkt += " ";
39513951
y = ( double * )( mGeometry + 5 + sizeof( double ) );
3952-
mWkt += QString::number( *y, 'f', 6 );
3952+
mWkt += QString::number( *y, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
39533953
mWkt += ")";
39543954
return mWkt;
39553955
}
@@ -3975,11 +3975,11 @@ QString QgsGeometry::exportToWkt()
39753975
mWkt += ", ";
39763976
}
39773977
x = ( double * ) ptr;
3978-
mWkt += QString::number( *x, 'f', 6 );
3978+
mWkt += QString::number( *x, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
39793979
mWkt += " ";
39803980
ptr += sizeof( double );
39813981
y = ( double * ) ptr;
3982-
mWkt += QString::number( *y, 'f', 6 );
3982+
mWkt += QString::number( *y, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
39833983
ptr += sizeof( double );
39843984
if ( hasZValue )
39853985
{
@@ -4030,11 +4030,11 @@ QString QgsGeometry::exportToWkt()
40304030
mWkt += ",";
40314031
}
40324032
x = ( double * ) ptr;
4033-
mWkt += QString::number( *x, 'f', 6 );
4033+
mWkt += QString::number( *x, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
40344034
mWkt += " ";
40354035
ptr += sizeof( double );
40364036
y = ( double * ) ptr;
4037-
mWkt += QString::number( *y, 'f', 6 );
4037+
mWkt += QString::number( *y, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
40384038
ptr += sizeof( double );
40394039
if ( hasZValue )
40404040
{
@@ -4068,11 +4068,11 @@ QString QgsGeometry::exportToWkt()
40684068
mWkt += ", ";
40694069
}
40704070
x = ( double * )( ptr );
4071-
mWkt += QString::number( *x, 'f', 6 );
4071+
mWkt += QString::number( *x, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
40724072
mWkt += " ";
40734073
ptr += sizeof( double );
40744074
y = ( double * )( ptr );
4075-
mWkt += QString::number( *y, 'f', 6 );
4075+
mWkt += QString::number( *y, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
40764076
ptr += sizeof( double );
40774077
if ( hasZValue )
40784078
{
@@ -4112,11 +4112,11 @@ QString QgsGeometry::exportToWkt()
41124112
mWkt += ", ";
41134113
}
41144114
x = ( double * ) ptr;
4115-
mWkt += QString::number( *x, 'f', 6 );
4115+
mWkt += QString::number( *x, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
41164116
ptr += sizeof( double );
41174117
mWkt += " ";
41184118
y = ( double * ) ptr;
4119-
mWkt += QString::number( *y, 'f', 6 );
4119+
mWkt += QString::number( *y, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
41204120
ptr += sizeof( double );
41214121
if ( hasZValue )
41224122
{
@@ -4168,11 +4168,11 @@ QString QgsGeometry::exportToWkt()
41684168
mWkt += ",";
41694169
}
41704170
x = ( double * ) ptr;
4171-
mWkt += QString::number( *x, 'f', 6 );
4171+
mWkt += QString::number( *x, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
41724172
ptr += sizeof( double );
41734173
mWkt += " ";
41744174
y = ( double * ) ptr;
4175-
mWkt += QString::number( *y, 'f', 6 );
4175+
mWkt += QString::number( *y, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
41764176
ptr += sizeof( double );
41774177
if ( hasZValue )
41784178
{
@@ -4226,10 +4226,10 @@ QString QgsGeometry::exportToGeoJSON()
42264226
{
42274227
mWkt += "{ \"type\": \"Point\", \"coordinates\": [";
42284228
x = ( double * )( mGeometry + 5 );
4229-
mWkt += QString::number( *x, 'f' );
4229+
mWkt += QString::number( *x, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
42304230
mWkt += ", ";
42314231
y = ( double * )( mGeometry + 5 + sizeof( double ) );
4232-
mWkt += QString::number( *y, 'f' );
4232+
mWkt += QString::number( *y, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
42334233
mWkt += "] }";
42344234
return mWkt;
42354235
}
@@ -4256,11 +4256,11 @@ QString QgsGeometry::exportToGeoJSON()
42564256
}
42574257
mWkt += "[";
42584258
x = ( double * ) ptr;
4259-
mWkt += QString::number( *x, 'f' );
4259+
mWkt += QString::number( *x, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
42604260
mWkt += ", ";
42614261
ptr += sizeof( double );
42624262
y = ( double * ) ptr;
4263-
mWkt += QString::number( *y, 'f' );
4263+
mWkt += QString::number( *y, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
42644264
ptr += sizeof( double );
42654265
if ( hasZValue )
42664266
{
@@ -4313,11 +4313,11 @@ QString QgsGeometry::exportToGeoJSON()
43134313
}
43144314
mWkt += "[";
43154315
x = ( double * ) ptr;
4316-
mWkt += QString::number( *x, 'f' );
4316+
mWkt += QString::number( *x, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
43174317
mWkt += ", ";
43184318
ptr += sizeof( double );
43194319
y = ( double * ) ptr;
4320-
mWkt += QString::number( *y, 'f' );
4320+
mWkt += QString::number( *y, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
43214321
ptr += sizeof( double );
43224322
if ( hasZValue )
43234323
{
@@ -4353,11 +4353,11 @@ QString QgsGeometry::exportToGeoJSON()
43534353
}
43544354
mWkt += "[";
43554355
x = ( double * )( ptr );
4356-
mWkt += QString::number( *x, 'f' );
4356+
mWkt += QString::number( *x, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
43574357
mWkt += ", ";
43584358
ptr += sizeof( double );
43594359
y = ( double * )( ptr );
4360-
mWkt += QString::number( *y, 'f' );
4360+
mWkt += QString::number( *y, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
43614361
ptr += sizeof( double );
43624362
if ( hasZValue )
43634363
{
@@ -4399,11 +4399,11 @@ QString QgsGeometry::exportToGeoJSON()
43994399
}
44004400
mWkt += "[";
44014401
x = ( double * ) ptr;
4402-
mWkt += QString::number( *x, 'f' );
4402+
mWkt += QString::number( *x, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
44034403
ptr += sizeof( double );
44044404
mWkt += ", ";
44054405
y = ( double * ) ptr;
4406-
mWkt += QString::number( *y, 'f' );
4406+
mWkt += QString::number( *y, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
44074407
ptr += sizeof( double );
44084408
if ( hasZValue )
44094409
{
@@ -4457,11 +4457,11 @@ QString QgsGeometry::exportToGeoJSON()
44574457
}
44584458
mWkt += "[";
44594459
x = ( double * ) ptr;
4460-
mWkt += QString::number( *x, 'f' );
4460+
mWkt += QString::number( *x, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
44614461
ptr += sizeof( double );
44624462
mWkt += ", ";
44634463
y = ( double * ) ptr;
4464-
mWkt += QString::number( *y, 'f' );
4464+
mWkt += QString::number( *y, 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
44654465
ptr += sizeof( double );
44664466
if ( hasZValue )
44674467
{

‎src/mapserver/qgswfsserver.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,11 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
441441

442442
if ( bboxOk )
443443
searchRect.set( minx, miny, maxx, maxy );
444+
else
445+
searchRect.set( searchRect.xMinimum()-0.000001
446+
, searchRect.yMinimum()-0.000001
447+
, searchRect.xMaximum()+0.000001
448+
, searchRect.yMaximum()+0.000001 );
444449
QgsCoordinateReferenceSystem layerCrs = layer->crs();
445450

446451
startGetFeature( request, format, layerCrs, &searchRect );
@@ -511,7 +516,7 @@ void QgsWFSServer::startGetFeature( QgsRequestHandler& request, const QString& f
511516
if ( format == "GeoJSON" )
512517
{
513518
fcString = "{\"type\": \"FeatureCollection\",\n";
514-
fcString += " \"bbox\": [ " + QString::number( rect->xMinimum(), 'f' ) + ", " + QString::number( rect->yMinimum(), 'f' ) + ", " + QString::number( rect->xMaximum(), 'f' ) + ", " + QString::number( rect->yMaximum(), 'f' ) + "],\n";
519+
fcString += " \"bbox\": [ " + QString::number( rect->xMinimum(), 'f', 6 ).remove( QRegExp("[0]{1,5}$") ) + ", " + QString::number( rect->yMinimum(), 'f', 6 ).remove( QRegExp("[0]{1,5}$") ) + ", " + QString::number( rect->xMaximum(), 'f', 6 ).remove( QRegExp("[0]{1,5}$") ) + ", " + QString::number( rect->yMaximum(), 'f', 6 ).remove( QRegExp("[0]{1,5}$") ) + "],\n";
515520
fcString += " \"features\": [\n";
516521
result = fcString.toUtf8();
517522
request.startGetFeatureResponse( &result, format );
@@ -691,7 +696,7 @@ QString QgsWFSServer::createFeatureGeoJSON( QgsFeature* feat, QgsCoordinateRefer
691696
{
692697
QgsRectangle box = geom->boundingBox();
693698

694-
fStr += " \"bbox\": [ " + QString::number( box.xMinimum(), 'f' ) + ", " + QString::number( box.yMinimum(), 'f' ) + ", " + QString::number( box.xMaximum(), 'f' ) + ", " + QString::number( box.yMaximum(), 'f' ) + "],\n";
699+
fStr += " \"bbox\": [ " + QString::number( box.xMinimum(), 'f', 6 ).remove( QRegExp("[0]{1,5}$") ) + ", " + QString::number( box.yMinimum(), 'f', 6 ).remove( QRegExp("[0]{1,5}$") ) + ", " + QString::number( box.xMaximum(), 'f', 6 ).remove( QRegExp("[0]{1,5}$") ) + ", " + QString::number( box.yMaximum(), 'f', 6 ).remove( QRegExp("[0]{1,5}$") ) + "],\n";
695700

696701
fStr += " \"geometry\": ";
697702
fStr += geom->exportToGeoJSON();
@@ -1020,9 +1025,9 @@ QDomElement QgsWFSServer::createCoordinateElem( const QVector<QgsPoint> points,
10201025
{
10211026
coordString += " ";
10221027
}
1023-
coordString += QString::number( pointIt->x(), 'f' );
1028+
coordString += QString::number( pointIt->x(), 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
10241029
coordString += ",";
1025-
coordString += QString::number( pointIt->y(), 'f' );
1030+
coordString += QString::number( pointIt->y(), 'f', 6 ).remove( QRegExp("[0]{1,5}$") );
10261031
}
10271032

10281033
QDomText coordText = doc.createTextNode( coordString );

0 commit comments

Comments
 (0)
Please sign in to comment.