微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用QT绘制GPS点的最佳方法

如何解决用QT绘制GPS点的最佳方法

我真的不知道如何问这个问题,但我会尽力解释。我在带有GPS的arduino上有一个项目,我通过PC上的serialdata传输了地理位置。我可以毫无问题地阅读它,但是我需要帮助的地方是如何找到这一点。目前我使用这个:

    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点之间的差异非常小一样,因此我需要以这种方式进行缩放,并且需要使用冗余数字来翻译我的原点。目前,翻译是固定的,但未来将是动态的。

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

the style of path I need

解决方法

您可以使用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_));
}

输出:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。