I have been reviewing the forum posts on converting coordinate systems but I am still confused.

I am trying to convert the coordinate system of a QGraphicScene (physical) into geographic (latitude, longitude). This is so I can move my airplane object by latitude, longitude.

Currently I have code that creates the graphic item and will move it within the physical points but I’m not sure how/where to set the Window coordinates to get it to move on latitude, longitude. If you notice in my code I tried on the painter object and that didn’t work.

Can anyone help?

Qt Code:
  1. //-----------------------------------------------------------------------------------
  2.  
  3. class CMapView : public QGraphicsView
  4. {
  5. Q_OBJECT
  6.  
  7. public:
  8. CMapView(QWidget * parent = 0);
  9. };
  10.  
  11. CMapView::CMapView(QWidget * parent)
  12. : QGraphicsView(parent)
  13. {
  14. setDragMode( ScrollHandDrag );
  15. }
  16.  
  17.  
  18. //-----------------------------------------------------------------------------------
  19.  
  20. CFlightPath : public QMainWindow
  21. {
  22. Q_OBJECT
  23.  
  24. public:
  25. CFlightPath();
  26.  
  27. private slots:
  28.  
  29. protected:
  30. void placeAircraft();
  31.  
  32. QGraphicsScene * scene;
  33. CMapView * view;
  34. };
  35.  
  36. CFlightPath::CFlightPath()
  37. {
  38. scene = new QGraphicsScene(0,0,400,400);
  39.  
  40. placeAircraft();
  41.  
  42. view = new CMapView();
  43. view->setScene(scene);
  44.  
  45. setCentralWidget(view);
  46.  
  47. setWindowTitle("Flight Path");
  48.  
  49. mainClose = false;
  50. }
  51.  
  52. void CFlightPath::placeAircraft()
  53. {
  54. CAircraft * airplane = new CAircraft();
  55. ownship->setPos( 200, 300 );
  56.  
  57. scene->addItem( airplane );
  58. }
  59.  
  60. //-----------------------------------------------------------------------------------
  61.  
  62. class CAircraft : public QObject, public QGraphicsItem
  63. {
  64. Q_OBJECT
  65.  
  66. public:
  67. CAircraft();
  68.  
  69. QRectF boundingRect() const;
  70. void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget);
  71.  
  72. private slots:
  73. void moveAircraft();
  74.  
  75. private:
  76. QPainterPath shape;
  77.  
  78. QTimer * updateTimer;
  79.  
  80. float xPos, yPos, deg, prevDeg;
  81. int count;
  82. };
  83.  
  84.  
  85. CAircraft::CAircraft()
  86. {
  87. double localX = -24.0;
  88. double localY = -14.0;
  89.  
  90. QPolygonF aircraft;
  91.  
  92. aircraft << QPointF( (localX+24.0), (localY+0.0) )
  93. << QPointF( (localX+25.0), (localY+1.0) )
  94. << QPointF( (localX+26.0), (localY+2.0) )
  95. << QPointF( (localX+27.0), (localY+3.0) )
  96. << QPointF( (localX+27.0), (localY+9.0) )
  97. << QPointF( (localX+32.0), (localY+9.0) )
  98. << QPointF( (localX+32.0), (localY+8.0) )
  99. << QPointF( (localX+35.0), (localY+8.0) )
  100. << QPointF( (localX+35.0), (localY+9.0) )
  101. << QPointF( (localX+38.0), (localY+9.0) )
  102. << QPointF( (localX+38.0), (localY+8.0) )
  103. << QPointF( (localX+41.0), (localY+8.0) )
  104. << QPointF( (localX+41.0), (localY+9.0) )
  105. << QPointF( (localX+47.0), (localY+9.0) )
  106. << QPointF( (localX+48.0), (localY+10.0) )
  107. << QPointF( (localX+47.0), (localY+11.0) )
  108. << QPointF( (localX+36.0), (localY+13.0) )
  109. << QPointF( (localX+27.0), (localY+16.0) )
  110. << QPointF( (localX+26.0), (localY+31.0) )
  111. << QPointF( (localX+30.0), (localY+31.0) )
  112. << QPointF( (localX+31.0), (localY+32.0) )
  113. << QPointF( (localX+25.0), (localY+34.0) )
  114. << QPointF( (localX+23.0), (localY+34.0) )
  115. << QPointF( (localX+17.0), (localY+32.0) )
  116. << QPointF( (localX+18.0), (localY+31.0) )
  117. << QPointF( (localX+22.0), (localY+31.0) )
  118. << QPointF( (localX+21.0), (localY+16.0) )
  119. << QPointF( (localX+12.0), (localY+13.0) )
  120. << QPointF( (localX+1.0), (localY+11.0) )
  121. << QPointF( (localX+0.0), (localY+10.0) )
  122. << QPointF( (localX+1.0), (localY+9.0) )
  123. << QPointF( (localX+7.0), (localY+9.0) )
  124. << QPointF( (localX+7.0), (localY+8.0) )
  125. << QPointF( (localX+10.0), (localY+8.0) )
  126. << QPointF( (localX+10.0), (localY+9.0) )
  127. << QPointF( (localX+13.0), (localY+9.0) )
  128. << QPointF( (localX+13.0), (localY+8.0) )
  129. << QPointF( (localX+16.0), (localY+8.0) )
  130. << QPointF( (localX+16.0), (localY+9.0) )
  131. << QPointF( (localX+21.0), (localY+9.0) )
  132. << QPointF( (localX+21.0), (localY+3.0) )
  133. << QPointF( (localX+22.0), (localY+2.0) )
  134. << QPointF( (localX+23.0), (localY+1.0) );
  135.  
  136. shape.addPolygon( aircraft );
  137.  
  138. setFlag(ItemIgnoresTransformations, true);
  139.  
  140. updateTimer = new QTimer();
  141. updateTimer->setInterval( 50 );
  142. connect( updateTimer, SIGNAL(timeout()), this, SLOT(moveAircraft()));
  143. updateTimer->start();
  144.  
  145. xPos = 200.0;
  146. yPos = 300.0;
  147. deg = 270.0;
  148. prevDeg = 0.0;
  149. count = 0;
  150. };
  151.  
  152. QRectF CAircraft::boundingRect() const
  153. {
  154. return QRectF(-24,-14,48,34);
  155. }
  156.  
  157. void CAircraft::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * /*widget*/)
  158. {
  159. painter->setWindow(-100,-100, 200, 200);
  160.  
  161. painter->fillPath( shape, Qt::darkGray );
  162. }
  163.  
  164. void CAircraft::moveAircraft()
  165. {
  166. float x, y;
  167.  
  168. if ( count < 50 )
  169. xPos -= 1.0;
  170. else if (count < 100 )
  171. yPos += 1.0;
  172. else if (count < 150 )
  173. xPos += 1.0;
  174. else if (count < 200 )
  175. yPos -= 1.0;
  176. else if (count < 250 )
  177. {
  178. yPos += 1.0;
  179. xPos -= 1.0;
  180. }
  181. else if (count < 300 )
  182. {
  183. yPos -= 1.0;
  184. xPos += 1.0;
  185. }
  186.  
  187. count++;
  188.  
  189. x = xPos;
  190. y = yPos;
  191.  
  192. setPos(x, y);
  193. }
To copy to clipboard, switch view to plain text mode