16
16
17
17
#include " qgsgcplist.h"
18
18
#include " qgsgcplistmodel.h"
19
-
19
+ # include " qgis.h "
20
20
#include " qgsgeorefdatapoint.h"
21
21
#include " qgsgeoreftransform.h"
22
22
@@ -85,23 +85,43 @@ void QgsGCPListModel::updateModel()
85
85
if ( !mGCPList )
86
86
return ;
87
87
88
- // // Setup table header
89
- QStringList itemLabels;
90
- // // Set column headers
91
- itemLabels << " on/off" << " id" << " srcX" << " srcY" << " dstX" << " dstY" << " dX" << " dY" << " residual" ;
92
- // setColumnCount(itemLabels.size());
93
- setHorizontalHeaderLabels ( itemLabels );
94
- setRowCount ( mGCPList ->size () );
95
-
96
88
bool bTransformUpdated = false ;
89
+ bool wldTransform = false ;
90
+ double wldScaleX, wldScaleY, rotation;
91
+ QgsPoint origin;
92
+
97
93
if ( mGeorefTransform )
98
94
{
99
95
vector<QgsPoint> mapCoords, pixelCoords;
100
96
mGCPList ->createGCPVectors ( mapCoords, pixelCoords );
101
97
102
98
// TODO: the parameters should probable be updated externally (by user interaction)
103
99
bTransformUpdated = mGeorefTransform ->updateParametersFromGCPs ( mapCoords, pixelCoords );
100
+ // transformation that involves only scaling and rotation (linear or helmert) ?
101
+ wldTransform = mGeorefTransform ->getOriginScaleRotation ( origin, wldScaleX, wldScaleY, rotation );
102
+ if ( wldTransform && !doubleNear ( rotation, 0.0 ) )
103
+ {
104
+ wldScaleX *= cos ( rotation );
105
+ wldScaleY *= cos ( rotation );
106
+ }
107
+ if ( wldTransform )
108
+ {
109
+
110
+ }
111
+ }
112
+
113
+ // // Setup table header
114
+ QStringList itemLabels;
115
+ if ( wldTransform )
116
+ {
117
+ itemLabels << " on/off" << " id" << " srcX" << " srcY" << " dstX" << " dstY" << QString ( " dX[" ) + tr ( " map units" ) + " ]" << QString ( " dY[" ) + tr ( " map units" ) + " ]" << " residual" ;
104
118
}
119
+ else
120
+ {
121
+ itemLabels << " on/off" << " id" << " srcX" << " srcY" << " dstX" << " dstY" << QString ( " dX[" ) + tr ( " pixels" ) + " ]" << QString ( " dY[" ) + tr ( " pixels" ) + " ]" << " residual" ;
122
+ }
123
+ setHorizontalHeaderLabels ( itemLabels );
124
+ setRowCount ( mGCPList ->size () );
105
125
106
126
for ( int i = 0 ; i < mGCPList ->sizeAll (); ++i )
107
127
{
@@ -135,8 +155,13 @@ void QgsGCPListModel::updateModel()
135
155
// As transforms of order >=2 are not invertible, we are only
136
156
// interested in the residual in this direction
137
157
mGeorefTransform ->transformWorldToRaster ( p->mapCoords (), dst );
138
- dX = ( dst.x () - p->pixelCoords ().x () );
158
+ dX = ( dst.x () - p->pixelCoords ().x () );
139
159
dY = -( dst.y () - p->pixelCoords ().y () );
160
+ if ( wldTransform )
161
+ {
162
+ dX *= wldScaleX;
163
+ dY *= wldScaleY;
164
+ }
140
165
residual = sqrt ( dX * dX + dY * dY );
141
166
}
142
167
else
@@ -152,7 +177,7 @@ void QgsGCPListModel::updateModel()
152
177
if ( residual >= 0 .f )
153
178
{
154
179
setItem ( i, j++, QGSSTANDARDITEM ( dX ) /* create_item<double>(dX)*/ );
155
- setItem ( i, j++, QGSSTANDARDITEM ( dY ) /* create_item<double>(-dY)*/ );
180
+ setItem ( i, j++, QGSSTANDARDITEM ( dY ) /* create_item<double>(-dY)*/ );
156
181
setItem ( i, j++, QGSSTANDARDITEM ( residual ) /* create_item<double>(residual)*/ );
157
182
}
158
183
else
0 commit comments