C#:C#与libLAS的简单操作(VS2010窗体+代码)

来源:互联网 发布:交大医学院网络 编辑:程序博客网 时间:2024/05/22 03:08

一、将这三个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具体窗体+代码见:点击打开链接

阅读全文
0 0