用qt绘制gps点的最佳方法

Best way to draw gps point with qt

我真的不知道怎么问这个问题,但我会尽力解释。我在带有 gps 的 arduino 上有一个项目,我通过我的电脑上的串行数据传输地理点。我可以毫无问题地阅读它,但是我需要帮助的地方是如何绘制该点的路径。目前我使用这个:

    void MainWindow::paintEvent(QPaintEvent* p)
    {
        QPainter painter(this); //class must be implemented from QWidget
        painter.setPen(pen);
        painter.setRenderHint(QPainter::Antialiasing);
        painter.setRenderHint(QPainter::HighQualityAntialiasing);
        painter.translate(width() / 2-466133, height() / 2+727150);
        painter.scale(10000.0,10000.0);

        painter.drawPolyline(polyPoints);
    }

    void MainWindow::readData(QStringList data)
    {
        ui->textEdit->setText(data.join(","));
        polyPoints  << QPointF(data[0].toDouble(),data[1].toDouble());
        QWidget::update();
    }

我的观点是这样的:

46.612823, -72.702957
46.612876, -72.702873
46.612937, -72.702789

如您所见,2 点之间的差异非常非常小,所以我需要按这种方式放大,并且需要使用可笑的数字来翻译我的来源。目前翻译是固定的,但将来会是动态的。

最后有一张图片可以显示更多我需要的东西

您可以使用QTransform 缩放和移动多边形。 QPainter缩放会增加画线的宽度。

使用 QPolygonF::boundingRect() 从那里获取原始点的大小和比例。

#include "mainwindow.h"

#include <QPainter>
#include <QPolygonF>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->resize(250, 250);
}

MainWindow::~MainWindow()
{
}

void MainWindow::paintEvent(QPaintEvent *)
{
    QPolygonF polygon_;
    polygon_ << QPointF{46.61, -72.7};
    polygon_ << QPointF{46.62, -73};
    polygon_ << QPointF{46.63, -72.78};

    QPainter painter(this);
    QPen pen;
    pen.setWidthF(1);
    pen.setColor(QColor(Qt::red));
    painter.setPen(pen);
    painter.setRenderHint(QPainter::Antialiasing);

    QRectF rect = polygon_.boundingRect();

    qreal scale_x = this->width() / rect.width();
    // Qt's y axis is positive downward
    qreal scale_y = - this->height() / rect.height();

    // Use rect's after-scaling properties to calculate
    qreal left_border = (this->width() - rect.width() * scale_x) / 2;
    qreal top_border = (this->height() - rect.height() * scale_y) / 2;

    // Use rect's after-scaling properties to calculate
    QTransform transform;
    transform.translate(-rect.x() * scale_x + left_border,
                        -rect.y() * scale_y + top_border);
    transform.scale(scale_x, scale_y);
    painter.drawPolyline(transform.map(polygon_));
}

输出: