众所周知我们的输出设备的分辨率一般都是 1000*1000左右,也就是说输出设备做多能展现1百万个点像素,超出的像素将覆盖在已有像素上面。
其实我们并不需要绘制那么多的点,我将超出的点可以不绘制,这里介绍一种简单的点绘制过滤方法,直接看代码:
存储像素位置的map
std::map<unsigned long long,bool> m_PointExist;
//这里使用64位长整型编码一个像素位置,前32为x,后32位y。
unsigned long long a = (unsigned long long)((((unsigned long long)x)<<32) +y);
std::map<unsigned long long, bool>::iterator it = m_PointExist.find(a);if (it != m_PointExist.end())
{
return false; //已经存在的像素点,可以不绘制
}
else
m_PointExist[a] = true; //记录
//Draw
其实目前信息点的几何分布还是在一定区域比较多,例如智慧城市中,信息点主要在大型城市中,周围区域信息可能没那么多,这就跟社会学科的二八定论一样,所以会造成在较小区域会有较多的信息点,所以在一定比例尺下中心区域显示的点会非常多,如果采用过滤绘制,将大大提高点的绘制效率,目前使用以上方法,并且将点绘制成Ellipse,每秒不低于10w的绘制速度完全没问题,实测还打到13w。