qt projection qgraphicsview qgraphicsscene

qt - Cómo configurar QGraphicsScene/View a un sistema de coordenadas específico



projection qgraphicsview (1)

Utilice QGraphicsScene::setSceneRect() como QGraphicsScene::setSceneRect() :

scene->setSceneRect(-180, -90, 360, 180);

Si le preocupa que el eje vertical esté volteado incorrectamente, tiene algunas opciones para solucionarlo. Una forma es simplemente multiplicar por -1 cada vez que realice cualquier cálculo que implique la coordenada y. Otra forma es voltear verticalmente QGraphicsView, usando view- view->scale(1, -1) para que la escena se muestre correctamente.

A continuación se muestra un ejemplo de trabajo que utiliza la última técnica. En el ejemplo, he subclasificado QGraphicsScene para que pueda hacer clic en la vista, y la escena personalizada mostrará la posición de clic usando qDebug() . En la práctica, no es necesario que subclasses QGraphicsScene.

#include <QtGui> class CustomScene : public QGraphicsScene { protected: void mousePressEvent(QGraphicsSceneMouseEvent *event) { qDebug() << event->scenePos(); } }; class MainWindow : public QMainWindow { public: MainWindow() { QGraphicsScene *scene = new CustomScene; QGraphicsView *view = new QGraphicsView(this); scene->setSceneRect(-180, -90, 360, 180); view->setScene(scene); view->scale(1, -1); setCentralWidget(view); } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }

Quiero dibujar polígonos en un QGraphicsScene pero donde los polígonos tienen posiciones de latitud / longitud. En una proyección equirrectangular las coordenadas van desde:

^ 90 | | -180----------------------------------->180 | | -90

¿Cómo puedo configurar QGraphicsScene / QGraphicsView para tal proyección?

Muchas gracias,

Carlos.