【问题标题】:How to draw a roads (lines) on pixmap如何在像素图上绘制道路(线)
【发布时间】:2013-05-06 00:49:19
【问题描述】:

在 Qt 的 Pixmap 上绘制“道路”时,我真的陷入了困境。 我的所有坐标都是小数值,它们彼此非常接近(我使用墨卡托公式将经度/纬度转换为 X/Y 坐标)。 Qt drawLine 函数只有整数参数才能在像素图上绘制(例如,因为没有人会绘制 2.5 像素)。此外,坐标从左上角开始,所以我需要更改它,如下所示:

Xold = x
Ynew = Ymax - Y

现在我有了普通的 X/Y 坐标系,Y 轴向上,X 轴向左。

这是我的代码,我如何尝试画线:

    double minlat = 637800*log(tan(3.14/4+3.14*bounds[1]/360.0))/log(2.71),maxlat=637800*log(tan(3.14/4+3.14*bounds[2]/360.0))/log(2.71);
    std::vector<double> x;
    std::vector<double> y;
    QSize size = ui->label_2->size();
    size=ui->label_2->size();
    QImage pic(size.width(),size.height(),QImage::Format_ARGB32_Premultiplied);
    pic.fill(Qt::transparent);
    QPainter painter(&pic);
    for (unsigned int i=0; i < wayVector.size(); i++){
        for (unsigned int j=0; j<wayVector[i].refs.size(); j++){
            x.push_back(637800*3.14*nodeHash[wayVector[i].refs[j]].lon/180.0);
            y.push_back(637800*log(tan(3.14/4+3.14*nodeHash[wayVector[i].refs[j]].lat/360.0))/log(2.71));

        }
        for (unsigned int j=0; j<wayVector[i].refs.size()-1;j++){
            painter.setPen(Qt::green);
            double x1 = x[j]/(size.width()/(maxlon-minlon));
            double y1 = maxlat*size.height()/(maxlat-minlat)-y[j]*size.height()/(maxlat-minlat);
            double x2 = x[j+1]/(size.width()/(maxlon-minlon));
            double y2 = maxlat*size.height()/(maxlat-minlat)-y[j+1]*size.height()/(maxlat-minlat);
            painter.drawLine(x1,y1,x2,y2);
        }
        x.clear();
        y.clear();
    }

但是一旦我将 x1,y1,x2,y2 放到 drawLine 函数中,它们就会转换为整数并且一切都出错了,因为所有 X/Y 坐标都变得相同(因为它们非常接近)。

我真的不知道如何在像素图上绘制这条线。 有任何想法吗?

【问题讨论】:

  • 顺便说一句,我不需要只使用 Pixmap 可能有人会展示另一种方法。谢谢

标签: qt drawing pixmap mercator


【解决方案1】:

有 5 个不同的 drawLine() 函数。请改用void QPainter::drawLine(const QPointF&amp; p1, const QPointF&amp; p2)void QPainter::drawLine(const QLineF&amp; line)。那些以F 结尾的类型使用双精度。

【讨论】:

  • 非常感谢,但是您知道如何从左上角坐标系移动到默认坐标系,X/Y 轴从左下角开始(就像我们总是画它们一样)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 2014-05-03
相关资源
最近更新 更多