在實際的項目,有很多時候,我們會遇到一個巨大的las文件,比如7,8個G的大小。這時候,我們需要對這個大的las文件進行分塊保存爲多個小的las文件。可是按照點的個數進行保存,也可以按照內存的大小保存。實際上也就是對點雲的讀寫過程。具體的代碼如下所示:
void lasFileDivision()
{
LASreadOpener lasreadopener;
LASwriteOpener laswriteopener;
//laslib只允許'\\'格式的文件路徑。
std::string lasFile("C:\\test\\test.las");
int num = 1;
//打開las文件
lasreadopener.set_file_name(lasFile.c_str());
LASreader* lasreader = lasreadopener.open();
size_t count = lasreader->header.number_of_point_records;
printf("%d", count);
//LASpoint *one_point = new LASpoint();
int loop_time = 0;
LASwriter* laswriter = nullptr;
while (lasreader->read_point()) //只讓輸出前 10 行座標
{
//按照每889000個點一個las文件進行分割
if (loop_time % 889000 == 0)
{
//每打開一次文件都需要close();否則文件會一直佔用。
if(laswriter != NULL)
{
laswriter->close();
}
stringstream ss;
ss << "C:\\test\\out" << num << ".las";
string file_name = ss