如何解决用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点之间的差异非常小一样,因此我需要以这种方式进行缩放,并且需要使用冗余数字来翻译我的原点。目前,翻译是固定的,但未来将是动态的。
解决方法
您可以使用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_));
}
输出:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。