@@ -52,7 +52,7 @@ QgsMeasure::QgsMeasure(bool measureArea, QgsMapCanvas *mc, Qt::WFlags f)
52
52
mTable ->setNumRows (1 );
53
53
mTable ->setText (0 , 0 , QString::number (0 , ' f' ,1 ));
54
54
55
- mTable ->horizontalHeader ()->setLabel ( 0 , tr (" Segments (in meters)" ) );
55
+ // mTable->horizontalHeader()->setLabel( 0, tr("Segments (in meters)") );
56
56
// mTable->horizontalHeader()->setLabel( 1, tr("Total") );
57
57
// mTable->horizontalHeader()->setLabel( 2, tr("Azimuth") );
58
58
@@ -64,7 +64,7 @@ QgsMeasure::QgsMeasure(bool measureArea, QgsMapCanvas *mc, Qt::WFlags f)
64
64
65
65
connect ( mMapCanvas , SIGNAL (renderComplete (QPainter*)), this , SLOT (mapCanvasChanged ()) );
66
66
67
- mCalc = new QgsDistanceArea;
67
+ // mCalc = new QgsDistanceArea;
68
68
69
69
mRubberBand = new QgsRubberBand (mMapCanvas , mMeasureArea );
70
70
@@ -84,7 +84,7 @@ void QgsMeasure::activate()
84
84
85
85
// If we suspect that they have data that is projected, yet the
86
86
// map SRS is set to a geographic one, warn them.
87
- if (mCalc ->geographic () &&
87
+ if (mCanvas -> mapRender ()-> distArea () ->geographic () &&
88
88
(mMapCanvas ->extent ().height () > 360 ||
89
89
mMapCanvas ->extent ().width () > 720 ))
90
90
{
@@ -119,7 +119,7 @@ void QgsMeasure::setMeasureArea(bool measureArea)
119
119
120
120
QgsMeasure::~QgsMeasure ()
121
121
{
122
- delete mCalc ;
122
+ // delete mCalc;
123
123
delete mRubberBand ;
124
124
}
125
125
@@ -169,7 +169,7 @@ void QgsMeasure::addPoint(QgsPoint &point)
169
169
170
170
if (mMeasureArea && mPoints .size () > 2 )
171
171
{
172
- double area = mCalc ->measurePolygon (mPoints );
172
+ double area = mCanvas -> mapRender ()-> distArea () ->measurePolygon (mPoints );
173
173
editTotal->setText (formatArea (area));
174
174
}
175
175
else if (!mMeasureArea && mPoints .size () > 1 )
@@ -178,7 +178,7 @@ void QgsMeasure::addPoint(QgsPoint &point)
178
178
179
179
QgsPoint p1 = mPoints [last], p2 = mPoints [last+1 ];
180
180
181
- double d = mCalc ->measureLine (p1,p2);
181
+ double d = mCanvas -> mapRender ()-> distArea () ->measureLine (p1,p2);
182
182
183
183
mTotal += d;
184
184
editTotal->setText (formatDistance (mTotal ));
@@ -223,15 +223,15 @@ void QgsMeasure::mouseMove(QgsPoint &point)
223
223
tmpPoints.push_back (point);
224
224
if (mMeasureArea && tmpPoints.size () > 2 )
225
225
{
226
- double area = mCalc ->measurePolygon (tmpPoints);
226
+ double area = mCanvas -> mapRender ()-> distArea () ->measurePolygon (tmpPoints);
227
227
editTotal->setText (formatArea (area));
228
228
}
229
229
else if (!mMeasureArea && tmpPoints.size () > 1 )
230
230
{
231
231
int last = tmpPoints.size ()-2 ;
232
232
QgsPoint p1 = tmpPoints[last], p2 = tmpPoints[last+1 ];
233
233
234
- double d = mCalc ->measureLine (p1,p2);
234
+ double d = mCanvas -> mapRender ()-> distArea () ->measureLine (p1,p2);
235
235
mTable ->setText (last, 0 , QString::number (d, ' f' ,1 ));
236
236
editTotal->setText (formatDistance (mTotal + d));
237
237
}
@@ -296,16 +296,52 @@ void QgsMeasure::on_btnHelp_clicked()
296
296
QString QgsMeasure::formatDistance (double distance)
297
297
{
298
298
QString txt;
299
- if (distance < 1000 )
300
- {
301
- txt = QString::number (distance,' f' ,0 );
302
- txt += " m" ;
303
- }
304
- else
299
+ QString unitLabel;
300
+
301
+ QGis::units myMapUnits = mCanvas ->mapUnits ();
302
+ switch (myMapUnits)
305
303
{
306
- txt = QString::number (distance/1000 ,' f' ,1 );
307
- txt += " km" ;
308
- }
304
+ case QGis::METERS:
305
+ if (distance > 1000.0 )
306
+ {
307
+ unitLabel=tr (" km" );
308
+ distance = distance/1000 ;
309
+ }
310
+ else if (distance < 0.01 )
311
+ {
312
+ unitLabel=tr (" mm" );
313
+ distance = distance*1000 ;
314
+ }
315
+ else if (distance < 0.1 )
316
+ {
317
+ unitLabel=tr (" cm" );
318
+ distance = distance*100 ;
319
+ }
320
+ else
321
+ unitLabel=tr (" m" );
322
+ break ;
323
+ case QGis::FEET:
324
+ if (distance == 1.0 )
325
+ unitLabel=tr (" foot" );
326
+ else
327
+ unitLabel=tr (" feet" );
328
+ break ;
329
+ case QGis::DEGREES:
330
+ if (distance == 1.0 )
331
+ unitLabel=tr (" degree" );
332
+ else
333
+ unitLabel=tr (" degrees" );
334
+ break ;
335
+ case QGis::UNKNOWN:
336
+ unitLabel=tr (" unknown" );
337
+ default :
338
+ std::cout << " Error: not picked up map units - actual value = "
339
+ << myMapUnits << std::endl;
340
+ };
341
+
342
+ txt = QString::number (distance,' f' ,1 );
343
+ txt += unitLabel;
344
+
309
345
return txt;
310
346
}
311
347
@@ -327,6 +363,23 @@ QString QgsMeasure::formatArea(double area)
327
363
328
364
void QgsMeasure::updateUi ()
329
365
{
366
+
367
+ QGis::units myMapUnits = mCanvas ->mapUnits ();
368
+ switch (myMapUnits)
369
+ {
370
+ case QGis::METERS:
371
+ mTable ->horizontalHeader ()->setLabel ( 0 , tr (" Segments (in meters)" ) );
372
+ break ;
373
+ case QGis::FEET:
374
+ mTable ->horizontalHeader ()->setLabel ( 0 , tr (" Segments (in feet)" ) );
375
+ break ;
376
+ case QGis::DEGREES:
377
+ mTable ->horizontalHeader ()->setLabel ( 0 , tr (" Segments (in degrees)" ) );
378
+ break ;
379
+ case QGis::UNKNOWN:
380
+ mTable ->horizontalHeader ()->setLabel ( 0 , tr (" Segments" ) );
381
+ };
382
+
330
383
if (mMeasureArea )
331
384
{
332
385
mTable ->hide ();
@@ -344,14 +397,14 @@ void QgsMeasure::updateProjection()
344
397
{
345
398
// set ellipsoid
346
399
QSettings settings;
347
- QString ellipsoid = settings.readEntry (" /qgis/measure/ellipsoid" , " WGS84" );
348
- mCalc ->setEllipsoid (ellipsoid);
400
+ // QString ellipsoid = settings.readEntry("/qgis/measure/ellipsoid", "WGS84");
401
+ // mCalc->setEllipsoid(ellipsoid);
349
402
350
403
// set source SRS and projections enabled flag
351
- QgsMapRender* mapRender = mCanvas ->mapRender ();
352
- mCalc ->setProjectionsEnabled (mapRender->projectionsEnabled ());
353
- int srsid = mapRender->destinationSrs ().srsid ();
354
- mCalc ->setSourceSRS (srsid);
404
+ // QgsMapRender* mapRender = mCanvas->mapRender();
405
+ // mCalc->setProjectionsEnabled(mapRender->projectionsEnabled());
406
+ // int srsid = mapRender->destinationSrs().srsid();
407
+ // mCalc->setSourceSRS(srsid);
355
408
356
409
int myRed = settings.value (" /qgis/default_measure_color_red" , 180 ).toInt ();
357
410
int myGreen = settings.value (" /qgis/default_measure_color_green" , 180 ).toInt ();
0 commit comments