Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Regenerate distance area calculation on demand in attribute table
Storing the instance in the table means that it does not respond
correctly to project ellipsoid changes, resulting in area calculations
using an outdated ellipsoid until the attribute table is reopened

Fixes #25500
  • Loading branch information
nyalldawson committed May 27, 2019
1 parent cd64b97 commit 84a857b
Show file tree
Hide file tree
Showing 5 changed files with 8 additions and 19 deletions.
19 changes: 8 additions & 11 deletions src/app/qgsattributetabledialog.cpp
Expand Up @@ -148,12 +148,11 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *layer, QgsAttr
// Initialize the window geometry
restoreGeometry( settings.value( QStringLiteral( "Windows/BetterAttributeTable/geometry" ) ).toByteArray() );

myDa = new QgsDistanceArea();
QgsDistanceArea da;
da.setSourceCrs( mLayer->crs(), QgsProject::instance()->transformContext() );
da.setEllipsoid( QgsProject::instance()->ellipsoid() );
mEditorContext.setDistanceArea( da );

myDa->setSourceCrs( mLayer->crs(), QgsProject::instance()->transformContext() );
myDa->setEllipsoid( QgsProject::instance()->ellipsoid() );

mEditorContext.setDistanceArea( *myDa );
mEditorContext.setVectorLayerTools( QgisApp::instance()->vectorLayerTools() );
mEditorContext.setMapCanvas( QgisApp::instance()->mapCanvas() );

Expand Down Expand Up @@ -362,11 +361,6 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *layer, QgsAttr
}
}

QgsAttributeTableDialog::~QgsAttributeTableDialog()
{
delete myDa;
}

void QgsAttributeTableDialog::updateTitle()
{
if ( ! mLayer )
Expand Down Expand Up @@ -511,7 +505,10 @@ void QgsAttributeTableDialog::runFieldCalculation( QgsVectorLayer *layer, const
QString error;

QgsExpression exp( expression );
exp.setGeomCalculator( myDa );
QgsDistanceArea da;
da.setSourceCrs( mLayer->crs(), QgsProject::instance()->transformContext() );
da.setEllipsoid( QgsProject::instance()->ellipsoid() );
exp.setGeomCalculator( &da );
exp.setDistanceUnits( QgsProject::instance()->distanceUnits() );
exp.setAreaUnits( QgsProject::instance()->areaUnits() );
bool useGeometry = exp.needsGeometry();
Expand Down
4 changes: 0 additions & 4 deletions src/app/qgsattributetabledialog.h
Expand Up @@ -53,8 +53,6 @@ class APP_EXPORT QgsAttributeTableDialog : public QDialog, private Ui::QgsAttrib
*/
QgsAttributeTableDialog( QgsVectorLayer *layer, QgsAttributeTableFilterModel::FilterMode initialMode = QgsAttributeTableFilterModel::ShowAll, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::Window );

~QgsAttributeTableDialog() override;

QgsExpressionContext createExpressionContext() const override;

public slots:
Expand Down Expand Up @@ -229,8 +227,6 @@ class APP_EXPORT QgsAttributeTableDialog : public QDialog, private Ui::QgsAttrib

QgsDockWidget *mDock = nullptr;
QDialog *mDialog = nullptr;
QgsDistanceArea *myDa = nullptr;


QMenu *mFilterColumnsMenu = nullptr;
QSignalMapper *mFilterActionMapper = nullptr;
Expand Down
2 changes: 0 additions & 2 deletions src/gui/attributetable/qgsdualview.h
Expand Up @@ -23,7 +23,6 @@

#include "qgsattributeeditorcontext.h"
#include "qgsattributetablefiltermodel.h"
#include "qgsdistancearea.h"
#include "qgsattributeform.h"
#include "qgis_gui.h"

Expand Down Expand Up @@ -384,7 +383,6 @@ class GUI_EXPORT QgsDualView : public QStackedWidget, private Ui::QgsDualViewBas
QPointer< QgsVectorLayer > mLayer = nullptr;
QProgressDialog *mProgressDlg = nullptr;
QgsIFeatureSelectionManager *mFeatureSelectionManager = nullptr;
QgsDistanceArea mDistanceArea;
QString mDisplayExpression;
QgsAttributeTableConfig mConfig;
QgsScrollArea *mAttributeEditorScrollArea = nullptr;
Expand Down
1 change: 0 additions & 1 deletion src/gui/qgsattributedialog.h
Expand Up @@ -28,7 +28,6 @@
#include <QGridLayout>
#include "qgis_gui.h"

class QgsDistanceArea;
class QgsHighlight;

/**
Expand Down
1 change: 0 additions & 1 deletion src/gui/qgsmaptoolidentify.h
Expand Up @@ -32,7 +32,6 @@ class QgsMapLayer;
class QgsMapCanvas;
class QgsHighlight;
class QgsIdentifyMenu;
class QgsDistanceArea;

/**
* \ingroup gui
Expand Down

0 comments on commit 84a857b

Please sign in to comment.