liblas库学习笔记一

Reader类

(1)函数ReadNextPoint():逐个访问las文件中的点数据,读完一条点记录后自动移动到下一条记录,直到结束。

std::ifstream ifs;
ifs.open(pSrcFileName, std::ios::in | std::ios::binary);
if (ifs == NULL)
{ 
cout<<"null"<

(2)函数bool Seek(std::size_t n):将数据读取指针移动到特定的点,ReadNextPoint将从此点开始读取。

//从las文件中编号为2的点开始遍历
reader.Seek(2);
while(reader.ReadNextPoint())
{   double x = reader.GetPoint().GetX();
    double y = reader.GetPoint().GetY();
    double z = reader.GetPoint().GetZ();
}

(3)函数ReadPointAt():读取某个特定点

//获取编号为2的点
reader.ReadPointAt(2);
double x = reader.GetPoint().GetX();
double y = reader.GetPoint().GetY();
double z = reader.GetPoint().GetZ();

(4)函数void SetFilters(std::vector const& filters):设置过滤器。过滤器是一个空间体区域,设置过滤器后,用ReadNextPoint方法读取点时,只会将位于过滤区内的点读出。设置时需要指定此空间区域的最小x坐标、最小y坐标、最小z坐标、最大x坐标、最大y坐标、最大z坐标。但是过滤器不会对ReadPointAt函数造成影响,仍然可以读取指定位置的点而不管此点是否位于过滤区内。

//只遍历某个空间区域中的点
liblas::BoundsFilter bFP(dfXMin,dfYMin,dfZMin+10,dfXMax,dfYMax,dfZMax-10);
liblas::FilterPtr lFP1 = (liblas::FilterPtr)&bFP;
vector vecFP;
vecFP.push_back(lFP1);
reader.SetFilters(vecFP);
while(reader.ReadNextPoint())
{  ......
}

 

 

你可能感兴趣的:(Lidar)