21
21
#include < QRectF>
22
22
#include < QString>
23
23
#include < QTextStream>
24
+ #include < QRegExp>
24
25
#include < qnumeric.h>
25
26
26
27
#include " qgspoint.h"
@@ -54,6 +55,33 @@ QgsRectangle::QgsRectangle( const QgsRectangle &r )
54
55
ymax = r.yMaximum ();
55
56
}
56
57
58
+ QgsRectangle::QgsRectangle ( const QDomNode& boxNode )
59
+ {
60
+ QDomElement boxElem = boxNode.toElement ();
61
+ if ( boxElem.tagName () == " Box" )
62
+ {
63
+ QDomElement bElem = boxElem.firstChild ().toElement ();
64
+ QString coordSeparator = " ," ;
65
+ QString tupelSeparator = " " ;
66
+ if ( bElem.hasAttribute ( " cs" ) )
67
+ {
68
+ coordSeparator = bElem.attribute ( " cs" );
69
+ }
70
+ if ( bElem.hasAttribute ( " ts" ) )
71
+ {
72
+ tupelSeparator = bElem.attribute ( " ts" );
73
+ }
74
+
75
+ QString bString = bElem.text ();
76
+ bool conversionSuccess;
77
+ xmin = bString.section ( tupelSeparator, 0 , 0 ).section ( coordSeparator, 0 , 0 ).toDouble ( &conversionSuccess );
78
+ ymin = bString.section ( tupelSeparator, 0 , 0 ).section ( coordSeparator, 1 , 1 ).toDouble ( &conversionSuccess );
79
+ xmax = bString.section ( tupelSeparator, 1 , 1 ).section ( coordSeparator, 0 , 0 ).toDouble ( &conversionSuccess );
80
+ ymax = bString.section ( tupelSeparator, 1 , 1 ).section ( coordSeparator, 1 , 1 ).toDouble ( &conversionSuccess );
81
+ }
82
+ normalize ();
83
+ }
84
+
57
85
void QgsRectangle::set ( const QgsPoint& p1, const QgsPoint& p2 )
58
86
{
59
87
xmin = p1.x ();
@@ -185,10 +213,10 @@ bool QgsRectangle::isEmpty() const
185
213
QString QgsRectangle::asWktCoordinates () const
186
214
{
187
215
QString rep =
188
- QString::number ( xmin, ' f' , 16 ) + " " +
189
- QString::number ( ymin, ' f' , 16 ) + " , " +
190
- QString::number ( xmax, ' f' , 16 ) + " " +
191
- QString::number ( ymax, ' f' , 16 );
216
+ QString::number ( xmin, ' f' , 16 ). remove ( QRegExp ( " [0]{1,15}$ " ) ) + " " +
217
+ QString::number ( ymin, ' f' , 16 ). remove ( QRegExp ( " [0]{1,15}$ " ) ) + " , " +
218
+ QString::number ( xmax, ' f' , 16 ). remove ( QRegExp ( " [0]{1,15}$ " ) ) + " " +
219
+ QString::number ( ymax, ' f' , 16 ). remove ( QRegExp ( " [0]{1,15}$ " ) ) ;
192
220
193
221
return rep;
194
222
}
@@ -197,16 +225,16 @@ QString QgsRectangle::asWktPolygon() const
197
225
{
198
226
QString rep =
199
227
QString ( " POLYGON((" ) +
200
- QString::number ( xmin, ' f' , 16 ) + " " +
201
- QString::number ( ymin, ' f' , 16 ) + " , " +
202
- QString::number ( xmax, ' f' , 16 ) + " " +
203
- QString::number ( ymin, ' f' , 16 ) + " , " +
204
- QString::number ( xmax, ' f' , 16 ) + " " +
205
- QString::number ( ymax, ' f' , 16 ) + " , " +
206
- QString::number ( xmin, ' f' , 16 ) + " " +
207
- QString::number ( ymax, ' f' , 16 ) + " , " +
208
- QString::number ( xmin, ' f' , 16 ) + " " +
209
- QString::number ( ymin, ' f' , 16 ) +
228
+ QString::number ( xmin, ' f' , 16 ). remove ( QRegExp ( " [0]{1,15}$ " ) ) + " " +
229
+ QString::number ( ymin, ' f' , 16 ). remove ( QRegExp ( " [0]{1,15}$ " ) ) + " , " +
230
+ QString::number ( xmax, ' f' , 16 ). remove ( QRegExp ( " [0]{1,15}$ " ) ) + " " +
231
+ QString::number ( ymin, ' f' , 16 ). remove ( QRegExp ( " [0]{1,15}$ " ) ) + " , " +
232
+ QString::number ( xmax, ' f' , 16 ). remove ( QRegExp ( " [0]{1,15}$ " ) ) + " " +
233
+ QString::number ( ymax, ' f' , 16 ). remove ( QRegExp ( " [0]{1,15}$ " ) ) + " , " +
234
+ QString::number ( xmin, ' f' , 16 ). remove ( QRegExp ( " [0]{1,15}$ " ) ) + " " +
235
+ QString::number ( ymax, ' f' , 16 ). remove ( QRegExp ( " [0]{1,15}$ " ) ) + " , " +
236
+ QString::number ( xmin, ' f' , 16 ). remove ( QRegExp ( " [0]{1,15}$ " ) ) + " " +
237
+ QString::number ( ymin, ' f' , 16 ). remove ( QRegExp ( " [0]{1,15}$ " ) ) +
210
238
QString ( " ))" );
211
239
212
240
return rep;
0 commit comments