liblas庫學習筆記一
阿新 • • 發佈:2019-01-25
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()) { ...... }