patch_for_1540.txt

patch QgsMapCanvas::saveAsImage - Steven Mizuno, 2009-04-08 08:03 PM

Download (1.91 KB)

 
1
Index: src/gui/qgsmapcanvas.cpp
2
===================================================================
3
--- src/gui/qgsmapcanvas.cpp	(revision 10504)
4
+++ src/gui/qgsmapcanvas.cpp	(working copy)
5
@@ -418,23 +418,25 @@
6
   //create a world file to go with the image...
7
   QgsRectangle myRect = mMapRenderer->extent();
8
   QString myHeader;
9
+  // note: use 17 places of precision for all numbers output
10
   //Pixel XDim
11
-  myHeader += QString::number( mapUnitsPerPixel() ) + "\r\n";
12
+  myHeader += QString::number( mapUnitsPerPixel(), 'g', 17 ) + "\r\n";
13
   //Rotation on y axis - hard coded
14
   myHeader += "0 \r\n";
15
   //Rotation on x axis - hard coded
16
   myHeader += "0 \r\n";
17
   //Pixel YDim - almost always negative - see
18
   //http://en.wikipedia.org/wiki/World_file#cite_note-2
19
-  myHeader += "-" + QString::number( mapUnitsPerPixel() ) + "\r\n";
20
-  //Origin X (top left corner)
21
-  myHeader += QString::number( myRect.xMinimum() ) + "\r\n";
22
-  //Origin Y (top left corner)
23
-  myHeader += QString::number( myRect.yMaximum() ) + "\r\n";
24
+  myHeader += "-" + QString::number( mapUnitsPerPixel(), 'g', 17 ) + "\r\n";
25
+  //Origin X (center of top left cell)
26
+  myHeader += QString::number( myRect.xMinimum() + ( mapUnitsPerPixel() / 2 ), 'g', 17 ) + "\r\n";
27
+  //Origin Y (center of top left cell)
28
+  myHeader += QString::number( myRect.yMaximum() - ( mapUnitsPerPixel() / 2 ), 'g', 17 ) + "\r\n";
29
   QFileInfo myInfo  = QFileInfo( theFileName );
30
-  QString myWorldFileName = myInfo.absolutePath() + QDir::separator() + myInfo.baseName() + "." + theFormat + "w";
31
+  // allow dotted names
32
+  QString myWorldFileName = myInfo.absolutePath() + QDir::separator() + myInfo.completeBaseName() + "." + theFormat + "w";
33
   QFile myWorldFile( myWorldFileName );
34
-  if ( !myWorldFile.open( QIODevice::WriteOnly | QIODevice::Text ) )
35
+  if ( !myWorldFile.open( QIODevice::WriteOnly ) )	//don't use QIODevice::Text
36
   {
37
     return;
38
   }