1. 程式人生 > >liblas庫學習筆記一

liblas庫學習筆記一

Reader類

(1)函式ReadNextPoint():逐個訪問las檔案中的點資料,讀完一條點記錄後自動移動到下一條記錄,直到結束。

std::ifstream ifs;
ifs.open(pSrcFileName, std::ios::in | std::ios::binary);
if (ifs == NULL)
{ 
cout<<"null"<<endl;
}liblas::ReaderFactory f ;
liblas::Reader reader = f.CreateWithStream(ifs);

while(reader.ReadNextPoint())
{
      cout<<reader.GetPoint().GetX()<<endl;
      cout<<reader.GetPoint().GetY()<<endl;
      cout<<reader.GetPoint().GetZ()<<endl;
}

(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<liblas::FilterPtr> 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<liblas::FilterPtr> vecFP;
vecFP.push_back(lFP1);
reader.SetFilters(vecFP);
while(reader.ReadNextPoint())
{  ......
}