2013-05-05 83 views
0

我真的被困在Qt中的Pixmap上繪製「道路」。 我有所有的座標在小數值,這是非常接近彼此(我已經得到他們從使用墨卡託公式轉換經度/緯度到X/Y座標)。 Qt drawLine函數只有整數參數才能在像素圖上繪製(例如,沒有人會繪製2.5像素)。此外,協調與左上角開始,所以我需要去改變它,就像這樣:如何在pixmap上繪製道路(線條)

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座標變得相同(因爲它們非常接近)。

我真的不知道如何在像素圖上繪製這些線條。 任何想法?

+0

順便說一句,我不需要只使用Pixmap,可能有人會顯示另一種方式來做到這一點。謝謝 – tema 2013-05-05 16:38:36

回答