0

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 座標が同じになるためです (非常に近いため)。

ピックスマップにこの線を描く方法が本当にわかりません。何か案は?

4

1 に答える 1

1

5 つの異なる drawLine() 関数があります。代わりにvoid QPainter::drawLine(const QPointF& p1, const QPointF& p2)またはを使用してください。void QPainter::drawLine(const QLineF& line)で終わる型Fは double を使用します。

于 2013-05-05T16:49:19.657 に答える