C#:C#与libLAS的简单操作(VS2010窗体+代码)
一、将这三个dll文件,拷贝到Debug里面
二、在引用中添加dotnerLibLAS
三、程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using LibLAS;
namespace Csharp与libLAS
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
#region 方法,函数
/// <summary>
/// 获取单一文件 绝对路径
/// </summary>
/// <param name="extension">扩展名</param>
/// <returns></returns>
private string xjGetFileFullPath(string extension)
{
OpenFileDialog xjOpenFileDialog = new OpenFileDialog();
xjOpenFileDialog.Filter = extension + "文件|*." + extension;
string xjFileFillPath = string.Empty;
if (xjOpenFileDialog.ShowDialog() == DialogResult.OK)
{
xjFileFillPath = xjOpenFileDialog.FileName;
}
return xjFileFillPath;
}
/// <summary>
/// 保存文件
/// </summary>
/// <param name="extension">扩展名</param>
/// <returns></returns>
private string xjSaveFileFullPath(string extension)
{
SaveFileDialog xjSaveFileDialog = new SaveFileDialog();
xjSaveFileDialog.Filter = extension + "文件|*." + extension;
xjSaveFileDialog.FileName = "导出" + extension;
string xjFileFillPath = string.Empty;
if (xjSaveFileDialog.ShowDialog() == DialogResult.OK)
{
xjFileFillPath = xjSaveFileDialog.FileName;
FileStream xjOutFileStream = new FileStream(xjFileFillPath, FileMode.Create, FileAccess.Write);//using System.IO;
StreamWriter xjOutStreamWriter = new StreamWriter(xjOutFileStream);
xjOutStreamWriter.Flush();//清空缓冲区
xjOutStreamWriter.Close();//关闭流
xjOutFileStream.Close();
}
return xjFileFillPath;
}
#endregion
//选择las
private void btn_Path_Click(object sender, EventArgs e)
{
string xjExtension = "las";
string xjFileFullPath = xjGetFileFullPath(xjExtension);
this.txt_lasPath.Text = xjFileFullPath;
//点云数量
LASReader xjLASReader = new LASReader(xjFileFullPath);//using LibLAS;
LASHeader xjLASHeader = xjLASReader.GetHeader();
uint xjPointCount = xjLASHeader.PointRecordsCount;//点数量//uint=[0,4294967295]
this.txt_Count.Text = xjPointCount.ToString();
}
//显示XYZ
private void lbl_XYZ_Click(object sender, EventArgs e)
{
DataTable xjDataTable = new DataTable();
#region 新建列
DataColumn xjColumnID = new DataColumn("ID", typeof(string));
xjDataTable.Columns.Add(xjColumnID);
DataColumn xjColumnX = new DataColumn("X", typeof(string));
xjDataTable.Columns.Add(xjColumnX);
DataColumn xjColumnY = new DataColumn("Y", typeof(string));
xjDataTable.Columns.Add(xjColumnY);
DataColumn xjColumnZ = new DataColumn("Z", typeof(string));
xjDataTable.Columns.Add(xjColumnZ);
#endregion
string xjFileFullPath = this.txt_lasPath.Text;
LASReader xjLASReader = new LASReader(xjFileFullPath);
LASHeader xjLASHeader = xjLASReader.GetHeader();
#region 获取所有点的最大最小XYZ
double xMax = xjLASHeader.GetMaxX();
double xMin = xjLASHeader.GetMinX();
double yMax = xjLASHeader.GetMaxY();
double yMin = xjLASHeader.GetMinY();
double zMax = xjLASHeader.GetMaxZ();
double zMin = xjLASHeader.GetMinZ();
//新建行:最大值
DataRow xjRowMax = xjDataTable.NewRow();
xjRowMax[xjColumnID] = "最大值";
xjRowMax[xjColumnX] = xMax.ToString("f4");//保留4位小数
xjRowMax[xjColumnY] = yMax.ToString("f4");
xjRowMax[xjColumnZ] = zMax.ToString("f4");
//添加行:最大值
xjDataTable.Rows.Add(xjRowMax);
//新建行:最小值
DataRow xjRowMin = xjDataTable.NewRow();
xjRowMin[xjColumnID] = "最小值";
xjRowMin[xjColumnX] = xMin.ToString("f4");//保留4位小数
xjRowMin[xjColumnY] = yMin.ToString("f4");
xjRowMin[xjColumnZ] = zMin.ToString("f4");
//添加行:最大值
xjDataTable.Rows.Add(xjRowMin);
#endregion
#region 获取所有点的XYZ
uint counting = 0;
while (xjLASReader.GetNextPoint())
{
LASPoint xjLASPoint = xjLASReader.GetPoint();
double x = xjLASPoint.X;
double y = xjLASPoint.Y;
double z = xjLASPoint.Z;
//新建行
DataRow xjRow = xjDataTable.NewRow();
xjRow[xjColumnID] = (++counting).ToString();
xjRow[xjColumnX] = x.ToString("f4");//保留4位小数
xjRow[xjColumnY] = y.ToString("f4");
xjRow[xjColumnZ] = z.ToString("f4");
//添加行
xjDataTable.Rows.Add(xjRow);
}
#endregion
this.dataGridViewXYZ.DataSource = xjDataTable;//数据绑定
}
//头文件信息
private void btn_HeaderInfo_Click(object sender, EventArgs e)
{
string xjlasFileFullPath = this.txt_lasPath.Text;
LASReader xjLASReader = new LASReader(xjlasFileFullPath);
LASHeader xjLASHeader = xjLASReader.GetHeader();
#region 头文件信息
string xjVersion = xjLASHeader.VersionMajor.ToString() + "." + xjLASHeader.VersionMinor.ToString();
string xjHeaderSize = xjLASHeader.HeaderSize.ToString();
string xjPointNumber = xjLASHeader.PointRecordsCount.ToString();
string x_max = (xjLASHeader.GetMaxX()).ToString();
string x_min = (xjLASHeader.GetMinX()).ToString();
string y_max = (xjLASHeader.GetMaxY()).ToString();
string y_min = (xjLASHeader.GetMinY()).ToString();
string z_max = (xjLASHeader.GetMaxZ()).ToString();
string z_min = (xjLASHeader.GetMinZ()).ToString();
string xjHeaderInfo = "File Name: " + xjlasFileFullPath + "\r\n" +
"Version: " + xjVersion + "\r\n" +
"Header Size: " + xjHeaderSize + "\r\n" +
"xjPointNumber: " + xjPointNumber + "\r\n" +
"X Max: " + x_max + "\r\n" +
"X Min: " + x_min + "\r\n" +
"Y Max: " + y_max + "\r\n" +
"Y Min: " + y_min + "\r\n" +
"Z Max: " + z_max + "\r\n" +
"Z Min: " + z_min + "\r\n";
#endregion
MessageBox.Show(xjHeaderInfo);
}
}
}
四、运行结果
VS2010具体窗体+代码见:点击打开链接