我真的被困在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坐标变得相同(因为它们非常接近)。
我真的不知道如何在像素图上绘制这些线条。 任何想法?
顺便说一句,我不需要只使用Pixmap,可能有人会显示另一种方式来做到这一点。谢谢 – tema 2013-05-05 16:38:36