Showing with 13 additions and 10 deletions.
  1. +3 −2 src/plugins/georeferencer/qgsleastsquares.cpp
  2. +1 −1 src/plugins/georeferencer/qgsleastsquares.h
  3. +9 −7 src/plugins/georeferencer/qgspointdialog.cpp
5 changes: 3 additions & 2 deletions src/plugins/georeferencer/qgsleastsquares.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

void QgsLeastSquares::linear(std::vector<QgsPoint> mapCoords,
std::vector<QgsPoint> pixelCoords,
QgsPoint& origin, double& pixelSize) {
QgsPoint& origin, double& pixelXSize, double& pixelYSize) {
int n = mapCoords.size();
if (n < 2) {
throw std::domain_error(QObject::tr("Fit to a linear transform requires at "
Expand Down Expand Up @@ -40,7 +40,8 @@ void QgsLeastSquares::linear(std::vector<QgsPoint> mapCoords,

origin.setX(aX);
origin.setY(aY);
pixelSize = (std::abs(bX) + std::abs(bY)) / 2;
pixelXSize = std::abs(bX);
pixelYSize = std::abs(bY);
}


Expand Down
2 changes: 1 addition & 1 deletion src/plugins/georeferencer/qgsleastsquares.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class QgsLeastSquares {
public:
static void linear(std::vector<QgsPoint> mapCoords,
std::vector<QgsPoint> pixelCoords,
QgsPoint& origin, double& pixelSize);
QgsPoint& origin, double& pixelXSize, double& pixelYSize);

static void helmert(std::vector<QgsPoint> mapCoords,
std::vector<QgsPoint> pixelCoords,
Expand Down
16 changes: 9 additions & 7 deletions src/plugins/georeferencer/qgspointdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,8 @@ void QgsPointDialog::on_cmbTransformType_currentIndexChanged(const QString& valu
bool QgsPointDialog::generateWorldFile()
{
QgsPoint origin(0, 0);
double pixelSize = 1;
double pixelXSize = 1;
double pixelYSize = 1;
double rotation = 0;

// create arrays with points from mPoints
Expand All @@ -308,7 +309,7 @@ bool QgsPointDialog::generateWorldFile()
{
if (cmbTransformType->currentText() == tr("Linear"))
{
QgsLeastSquares::linear(mapCoords, pixelCoords, origin, pixelSize);
QgsLeastSquares::linear(mapCoords, pixelCoords, origin, pixelXSize, pixelYSize);
}
else if (cmbTransformType->currentText() == tr("Helmert"))
{
Expand All @@ -322,7 +323,8 @@ bool QgsPointDialog::generateWorldFile()
if (res == QMessageBox::No)
return false;

QgsLeastSquares::helmert(mapCoords, pixelCoords, origin, pixelSize, rotation);
QgsLeastSquares::helmert(mapCoords, pixelCoords, origin, pixelXSize, rotation);
pixelXSize = pixelYSize;
}
else if (cmbTransformType->currentText() == tr("Affine"))
{
Expand Down Expand Up @@ -371,12 +373,12 @@ bool QgsPointDialog::generateWorldFile()
return false;
}
QTextStream stream(&file);
stream<<pixelSize<<endl
stream<<pixelXSize<<endl
<<0<<endl
<<0<<endl
<<-pixelSize<<endl
<<(origin.x() - xOffset * pixelSize)<<endl
<<(origin.y() + yOffset * pixelSize)<<endl;
<<-pixelYSize<<endl
<<(origin.x() - xOffset * pixelXSize)<<endl
<<(origin.y() + yOffset * pixelYSize)<<endl;
// write the data points in case we need them later
QFile pointFile(mLayer->source() + ".points");
if (pointFile.open(QIODevice::WriteOnly))
Expand Down