Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Reuse existing QgsDistanceArea instead of creating new ones
  • Loading branch information
nyalldawson committed Jan 15, 2020
1 parent 1461ae8 commit d3b9402
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 8 deletions.
18 changes: 10 additions & 8 deletions src/app/gps/qgsgpsinformationwidget.cpp
Expand Up @@ -95,6 +95,8 @@ QgsGpsInformationWidget::QgsGpsInformationWidget( QgsMapCanvas *mapCanvas, QWidg
connect( mBtnLogFile, &QPushButton::clicked, this, &QgsGpsInformationWidget::mBtnLogFile_clicked );
connect( mMapCanvas, &QgsMapCanvas::xyCoordinates, this, &QgsGpsInformationWidget::cursorCoordinateChanged );

mWgs84CRS = QgsCoordinateReferenceSystem::fromOgcWmsCrs( QStringLiteral( "EPSG:4326" ) );

mBearingNumericFormat.reset( QgsLocalDefaultSettings::bearingFormat() );
connect( QgsProject::instance()->displaySettings(), &QgsProjectDisplaySettings::bearingFormatChanged, this, [ = ]
{
Expand All @@ -111,6 +113,12 @@ QgsGpsInformationWidget::QgsGpsInformationWidget( QgsMapCanvas *mapCanvas, QWidg
{
mCanvasToWgs84Transform = QgsCoordinateTransform( mMapCanvas->mapSettings().destinationCrs(), mWgs84CRS, QgsProject::instance() );
} );
mDistanceCalculator.setEllipsoid( QgsProject::instance()->ellipsoid() );
mDistanceCalculator.setSourceCrs( mWgs84CRS, QgsProject::instance()->transformContext() );
connect( QgsProject::instance(), &QgsProject::ellipsoidChanged, this, [ = ]
{
mDistanceCalculator.setEllipsoid( QgsProject::instance()->ellipsoid() );
} );

mLastGpsPosition = QgsPointXY( 0.0, 0.0 );
mLastNmeaPosition.lat = nmea_degree2radian( 0.0 );
Expand Down Expand Up @@ -306,8 +314,6 @@ QgsGpsInformationWidget::QgsGpsInformationWidget( QgsMapCanvas *mapCanvas, QWidg
mSpinMapRotateInterval->setValue( mySettings.value( QStringLiteral( "gps/rotateMapInterval" ), 0 ).toInt() );
mShowBearingLineCheck->setChecked( mySettings.value( QStringLiteral( "gps/showBearingLine" ), false ).toBool() );

mWgs84CRS = QgsCoordinateReferenceSystem::fromOgcWmsCrs( QStringLiteral( "EPSG:4326" ) );

mBtnDebug->setVisible( mySettings.value( QStringLiteral( "gps/showDebug" ), "false" ).toBool() ); // use a registry setting to control - power users/devs could set it

// status = unknown
Expand Down Expand Up @@ -1505,13 +1511,9 @@ void QgsGpsInformationWidget::updateGpsDistanceStatusMessage()
if ( !mNmea )
return;

QgsDistanceArea da;
da.setEllipsoid( QgsProject::instance()->ellipsoid() );
da.setSourceCrs( mWgs84CRS, QgsProject::instance()->transformContext() );

const double distance = da.convertLengthMeasurement( da.measureLine( QVector< QgsPointXY >() << mLastCursorPosWgs84 << mLastGpsPosition ),
const double distance = mDistanceCalculator.convertLengthMeasurement( mDistanceCalculator.measureLine( QVector< QgsPointXY >() << mLastCursorPosWgs84 << mLastGpsPosition ),
QgsProject::instance()->distanceUnits() );
const double bearing = 180 * da.bearing( mLastCursorPosWgs84, mLastGpsPosition ) / M_PI;
const double bearing = 180 * mDistanceCalculator.bearing( mLastCursorPosWgs84, mLastGpsPosition ) / M_PI;
const int distanceDecimalPlaces = QgsSettings().value( QStringLiteral( "qgis/measure/decimalplaces" ), "3" ).toInt();
const QString distanceString = QgsDistanceArea::formatDistance( distance, distanceDecimalPlaces, QgsProject::instance()->distanceUnits() );
const QString bearingString = mBearingNumericFormat->formatDouble( bearing, QgsNumericFormatContext() );
Expand Down
1 change: 1 addition & 0 deletions src/app/gps/qgsgpsinformationwidget.h
Expand Up @@ -121,6 +121,7 @@ class APP_EXPORT QgsGpsInformationWidget: public QgsPanelWidget, private Ui::Qgs

QgsCoordinateReferenceSystem mWgs84CRS;
QgsCoordinateTransform mCanvasToWgs84Transform;
QgsDistanceArea mDistanceCalculator;

// not used QPointF gpsToPixelPosition( const QgsPoint& point );
QgsRubberBand *mRubberBand = nullptr;
Expand Down

0 comments on commit d3b9402

Please sign in to comment.