void WritePointcloud()
        {
            Console.WriteLine("[{0:hh:mm:ss}] Generating water...", DateTime.Now);
            List <XYZ> newPoints = new List <XYZ>();

            foreach (var polygon in polygons)
            {
                var grid = polygon.GetGrid(1.0, x * 1000, y * 1000, (x + 1) * 1000, (y + 1) * 1000);
                newPoints.AddRange(grid);
            }

            Console.WriteLine("[{0:hh:mm:ss}] Writing LAZ...", DateTime.Now);
            lazReader.laszip_seek_point(0L);//read from the beginning again

            lazWriter        = new laszip_dll();
            lazWriter.header = lazReader.header;

            lazWriter.header.number_of_point_records += (uint)newPoints.Count;
            lazWriter.laszip_open_writer(destPath, true);

            var coordArray = new double[3];

            for (var pointIndex = 0; pointIndex < numberOfPoints; pointIndex++)
            {
                lazReader.laszip_read_point();
                lazReader.laszip_get_coordinates(coordArray);
                lazWriter.point = lazReader.point;
                //if (lazWriter.point.classification > 9) System.Diagnostics.Debugger.Break();
                if (pointcloud.ContainsKey(pointIndex))
                {
                    lazWriter.point.classification = WATER_CLASSIFICATION;
                }

                lazWriter.laszip_write_point();
            }

            Console.WriteLine("[{0:hh:mm:ss}] Adding water...", DateTime.Now);
            foreach (var gridPoint in newPoints)
            {
                lazWriter.point.classification  = 9;
                lazWriter.point.point_source_ID = 1234;
                coordArray[0] = gridPoint.x;
                coordArray[1] = gridPoint.y;
                coordArray[2] = gridPoint.z;
                lazWriter.laszip_set_coordinates(coordArray);
                lazWriter.laszip_write_point();
            }
            lazReader.laszip_close_reader();
            lazWriter.laszip_close_writer();
        }
Exemple #2
0
        private static void WriteLaz()
        {
            // --- Write Example
            var point  = new Point3D();
            var points = new List <Point3D>();

            point.X = 1000.0;
            point.Y = 2000.0;
            point.Z = 100.0;
            points.Add(point);

            point.X = 5000.0;
            point.Y = 6000.0;
            point.Z = 200.0;
            points.Add(point);

            var lazWriter = new laszip_dll();
            var err       = lazWriter.laszip_clean();

            if (err == 0)
            {
                // Number of point records needs to be set
                lazWriter.header.number_of_point_records = (uint)points.Count;

                // Header Min/Max needs to be set to extents of points
                lazWriter.header.min_x = points[0].X;                 // LL Point
                lazWriter.header.min_y = points[0].Y;
                lazWriter.header.min_z = points[0].Z;
                lazWriter.header.max_x = points[1].X;                 // UR Point
                lazWriter.header.max_y = points[1].Y;
                lazWriter.header.max_z = points[1].Z;

                // Open the writer and test for errors
                err = lazWriter.laszip_open_writer(FileName, true);
                if (err == 0)
                {
                    double[] coordArray = new double[3];
                    foreach (var p in points)
                    {
                        coordArray[0] = p.X;
                        coordArray[1] = p.Y;
                        coordArray[2] = p.Z;

                        // Set the coordinates in the lazWriter object
                        lazWriter.laszip_set_coordinates(coordArray);

                        // Set the classification to ground
                        lazWriter.point.classification = 2;

                        // Write the point to the file
                        err = lazWriter.laszip_write_point();
                        if (err != 0)
                        {
                            break;
                        }
                    }

                    // Close the writer to release the file (OS lock)
                    err       = lazWriter.laszip_close_writer();
                    lazWriter = null;
                }
            }

            if (err != 0)
            {
                // Show last error that occurred
                Debug.WriteLine(lazWriter.laszip_get_error());
            }
            // --- Upon completion, file should be 389 bytes
        }