您的位置:首页 > 编程语言 > C#

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

2017-12-21 17:36 573 查看
一、将这三个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.ShowDi
4000
alog() == 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具体窗体+代码见:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: