[Liblas-commits] hg: 4 new changesets

liblas-commits at liblas.org liblas-commits at liblas.org
Mon Nov 1 10:44:00 EDT 2010


changeset 91fdcdf77a0e in /Volumes/Data/www/liblas.org/hg
details: http://hg.liblas.orghg?cmd=changeset;node=91fdcdf77a0e
summary: no more las2las2

changeset d1c98a3daa11 in /Volumes/Data/www/liblas.org/hg
details: http://hg.liblas.orghg?cmd=changeset;node=d1c98a3daa11
summary: other targets, comment out BUILD_TYPE

changeset 62530765e0f8 in /Volumes/Data/www/liblas.org/hg
details: http://hg.liblas.orghg?cmd=changeset;node=62530765e0f8
summary: merge

changeset 96c022e7f627 in /Volumes/Data/www/liblas.org/hg
details: http://hg.liblas.orghg?cmd=changeset;node=96c022e7f627
summary: qualify return type

diffstat:

 CMakeLists.txt                                |   17 +-
 apps/CMakeLists.txt                           |   15 +-
 apps/bigfile_boost_iostreams_test.cpp         |  141 +++++
 apps/bigtest.c                                |   58 ++
 apps/bigtest.cpp                              |   55 --
 apps/las2las.cpp                              |   13 +-
 apps/lasindex_test.cpp                        |    6 +
 apps/lasinfo.cpp                              |   38 +-
 apps/laskernel.cpp                            |  648 ++++++++++++-------------
 cmake/modules/BuildOSGeo4W.cmake              |    2 +-
 doc/compilation.txt                           |    6 +-
 doc/docs.txt                                  |    1 +
 doc/download.txt                              |   21 +-
 doc/faq.txt                                   |   23 +-
 doc/features.txt                              |   12 +-
 doc/index.txt                                 |    3 +-
 doc/osgeo4w.txt                               |   11 +
 doc/start.txt                                 |   93 +++
 doc/utilities/las2las.txt                     |    6 +-
 doc/utilities/lasinfo.txt                     |   10 +-
 hobu-config.bat                               |    7 +-
 include/liblas/detail/index/indexcell.hpp     |    6 +-
 include/liblas/detail/private_utility.hpp     |   13 -
 include/liblas/detail/reader/cachedreader.hpp |    1 +
 include/liblas/detail/reader/point.hpp        |    3 -
 include/liblas/guid.hpp                       |   25 +-
 include/liblas/iterator.hpp                   |    5 +-
 include/liblas/lasbounds.hpp                  |    2 +-
 include/liblas/lasdimension.hpp               |    3 +-
 include/liblas/laserror.hpp                   |    6 +-
 include/liblas/lasfilter.hpp                  |   18 +-
 include/liblas/lasheader.hpp                  |    6 +-
 include/liblas/lasindex.hpp                   |  177 +++---
 include/liblas/lasreader.hpp                  |    9 +-
 include/liblas/lasschema.hpp                  |    7 +-
 include/liblas/lasspatialreference.hpp        |    6 +-
 include/liblas/lastransform.hpp               |    6 +-
 include/liblas/liblas.hpp                     |    5 +-
 src/detail/reader/cachedreader.cpp            |   36 +-
 src/detail/reader/point.cpp                   |   16 +-
 src/lasheader.cpp                             |   62 +-
 src/laspoint.cpp                              |   73 +-
 src/lasreader.cpp                             |  105 ++--
 src/lasspatialreference.cpp                   |    8 +-
 src/lastransform.cpp                          |   41 +-
 src/laswriter.cpp                             |   21 +-
 src/utility.cpp                               |   36 +-
 test/unit/lasspatialreference_test.cpp        |  163 ++++++-
 48 files changed, 1313 insertions(+), 732 deletions(-)

diffs (truncated from 3124 to 300 lines):

diff -r 12532d4c7222 -r 96c022e7f627 CMakeLists.txt
--- a/CMakeLists.txt	Wed Oct 27 11:23:13 2010 -0500
+++ b/CMakeLists.txt	Mon Nov 01 09:43:41 2010 -0500
@@ -101,17 +101,21 @@
 
   endif()
 else()
+
+  # Recommended C++ compilation flags
+  # -Weffc++
+  set(LIBLAS_COMMON_CXX_FLAGS
+	"-pedantic -ansi -Wall -Wpointer-arith -Wcast-align -Wcast-qual -Wfloat-equal -Wredundant-decls -Wno-long-long")
+
   if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
 
-	# Recommended C++ compilation flags
-	# -Weffc++
-	set(LIBLAS_GCC_CXX_FLAGS
-	  "-pedantic -ansi -Wall -Wpointer-arith -Wcast-align -Wcast-qual -Wfloat-equal -Wredundant-decls -Wno-long-long")
-    
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC ${LIBLAS_GCC_CXX_FLAGS}")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC ${LIBLAS_COMMON_CXX_FLAGS}")
     if (CMAKE_COMPILER_IS_GNUCXX)
       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98")
     endif()
+
+  elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" OR "${CMAKE_CXX_COMPILER}" MATCHES "clang")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LIBLAS_COMMON_CXX_FLAGS}")
   endif()
 endif(WIN32)
 
@@ -132,6 +136,7 @@
 
 set(Boost_USE_STATIC_LIBS   ON)
 set(Boost_USE_MULTITHREADED ON)
+# NOTE: Add iostreams to COMPONENTS list to enable bigfile_boost_iostreams_test
 find_package(Boost 1.38 COMPONENTS program_options REQUIRED)
 
 if(Boost_FOUND AND Boost_PROGRAM_OPTIONS_FOUND)
diff -r 12532d4c7222 -r 96c022e7f627 apps/CMakeLists.txt
--- a/apps/CMakeLists.txt	Wed Oct 27 11:23:13 2010 -0500
+++ b/apps/CMakeLists.txt	Mon Nov 01 09:43:41 2010 -0500
@@ -27,10 +27,14 @@
 set(BIGFILE_TEST bigfile_test)
 set(LASINDEX_TEST lasindex_test)
 
+if(Boost_IOSTREAMS_FOUND)
+  set(BIGFILE_BIO_TEST bigfile_boost_iostreams_test)
+endif()
+
 # Set the build type to release if it is not explicitly set by the user and 
 # isn't in the cache yet
 if (NOT CMAKE_BUILD_TYPE )
-set(CMAKE_BUILD_TYPE "Release")
+  set(CMAKE_BUILD_TYPE "Release")
 endif()
 
 # Utilities depending on 3rd-pary libraries
@@ -44,7 +48,7 @@
 
 set(LIBLAS_UTILITIES
     ${LASINFO_OLD} ${LASINFO} ${LASMERGE} ${LAS2LAS} ${LAS2TXT} ${TXT2LAS} 
-    ${LAS2OGR}  ${LAS2OCI} ${LAS2LAS} ${LAS2LAS_OLD} ${LASBLOCK} ${TS2LAS} )
+    ${LAS2OGR}  ${LAS2OCI} ${LAS2LAS} ${LAS2LAS_OLD} ${LASBLOCK} ${TS2LAS})
 
 # TODO: Experimental and requires testing --mloskot
 # Generate user-specific settings for Visual Studio project
@@ -142,7 +146,7 @@
 endif()
 
 if(BIGFILE_TEST)
-    add_executable(${BIGFILE_TEST} bigtest.cpp)
+    add_executable(${BIGFILE_TEST} bigtest.c)
     target_link_libraries(${BIGFILE_TEST} ${LIBLAS_C_LIB_NAME})
 endif()
 
@@ -151,6 +155,11 @@
     target_link_libraries(${LASINDEX_TEST} ${APPS_CPP_DEPENDENCIES} ${Boost_LIBRARIES})    
 endif()
 
+if(BIGFILE_BIO_TEST)
+    add_executable(${BIGFILE_BIO_TEST} bigfile_boost_iostreams_test.cpp)
+    target_link_libraries(${BIGFILE_BIO_TEST} ${APPS_CPP_DEPENDENCIES} ${Boost_LIBRARIES})    
+endif()
+
 ###############################################################################
 # Targets installation
 
diff -r 12532d4c7222 -r 96c022e7f627 apps/bigfile_boost_iostreams_test.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/bigfile_boost_iostreams_test.cpp	Mon Nov 01 09:43:41 2010 -0500
@@ -0,0 +1,141 @@
+/******************************************************************************
+ *
+ * Project:  libLAS - http://liblas.org - A BSD library for LAS format data.
+ * Purpose:  Test reading and writing of large LAS files (>4GB)
+ *           using portable Boost.IOStreams library.
+ * Author:   Mateusz Loskot, mateusz at loskot.net
+ *
+ ******************************************************************************
+ * Copyright (c) 2010, Mateusz Loskot
+ *
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following 
+ * conditions are met:
+ * 
+ *     * Redistributions of source code must retain the above copyright 
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright 
+ *       notice, this list of conditions and the following disclaimer in 
+ *       the documentation and/or other materials provided 
+ *       with the distribution.
+ *     * Neither the name of the Martin Isenburg or Iowa Department 
+ *       of Natural Resources nor the names of its contributors may be 
+ *       used to endorse or promote products derived from this software 
+ *       without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
+ * OF SUCH DAMAGE.
+ ****************************************************************************/
+#include <liblas/laspoint.hpp>
+#include <liblas/lasreader.hpp>
+#include <liblas/laswriter.hpp>
+#ifdef _MSC_VER
+#  pragma warning(push)
+#  pragma warning(disable: 4702)
+#endif
+#include <boost/iostreams/device/file_descriptor.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/iostreams/stream.hpp>
+#ifdef _MSC_VER
+#  pragma warning(pop)
+#endif()
+#include <cassert>
+#include <exception>
+#include <iostream>
+#include <sstream>
+#include <stdexcept>
+
+namespace bio = boost::iostreams;
+namespace las = liblas;
+
+int main()
+{
+    try
+    {
+        // name of generated file
+        std::string filename("bigfile_bio_test.las");
+        // test writing mor than 204 million points
+        bio::stream_offset const n_million_points = 210;
+        bio::stream_offset const point_count = 1024 * 1024 * n_million_points;
+
+        std::cout.setf(std::ios::fixed, std::ios::floatfield);
+        std::cout.setf(std::ios::showpoint);
+        std::cout.precision(2);
+
+        std::cout << "LAS file: " << filename << std::endl;
+        std::cout << "Writing " << point_count << " points" << std::endl;
+        {
+            typedef bio::stream<bio::file_descriptor_sink> bio_ostream;
+            bio_ostream bigofs(filename);
+            las::Header header;
+            las::Writer writer(bigofs, header);
+
+            las::Point empty_point;
+            bio::stream_offset i = 0;
+            for (i = 0; i < point_count; ++i)
+            {
+                if (!writer.WritePoint(empty_point))
+                {
+                    std::ostringstream oss;
+                    oss << "failed to write point #" << i;
+                    throw std::runtime_error(oss.str());
+                }
+
+                if (i % 1000 == 0)
+                {
+                    std::cout << "\b\b\b\b\b\b\b\b" << double(i)/point_count * 100.0;
+                }
+            }
+            assert(i == point_count);
+        }
+
+        std::cout << std::endl << "Reading " << point_count << " points" << std::endl;
+        {
+            typedef bio::stream<bio::file_descriptor_source> bio_istream;
+            bio_istream bigifs(filename); 
+            las::Reader reader(bigifs);
+    
+            bio::stream_offset i = 0;
+            while (reader.ReadNextPoint())
+            {
+                las::Point const& p = reader.GetPoint();
+
+                if (!p.Validate())
+                {
+                    std::ostringstream oss;
+                    oss << "invalid point around #" << i;
+                    throw std::runtime_error(oss.str());
+                }
+
+                if (i % 1000 == 0)
+                {
+                    std::cout << "\b\b\b\b\b\b\b\b" << double(i)/point_count * 100.0;
+                }
+                ++i;
+            }
+            assert(i == point_count);
+        }
+
+        std::cout << std::endl << "Done." << std::endl;
+
+        return EXIT_SUCCESS;
+    }
+    catch (std::exception const& e)
+    {
+        std::cerr << e.what() << std::endl;
+    }
+ 
+    return EXIT_FAILURE;
+}
diff -r 12532d4c7222 -r 96c022e7f627 apps/bigtest.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/bigtest.c	Mon Nov 01 09:43:41 2010 -0500
@@ -0,0 +1,58 @@
+#include <liblas.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+void dumperror (const char * appmsg)
+{
+   printf("\n%s.\n\tMessage:  %s\n\tMethod: %s",appmsg, LASError_GetLastErrorMsg(), LASError_GetLastErrorMethod());
+}
+int main()
+{
+
+    LASHeaderH header = NULL;
+    LASWriterH writer = NULL;
+    LASReaderH reader = NULL;
+    LASPointH pt = NULL;
+    LASError err;
+    // Limitation about seeking past 4GB output size.  At 20 bytes / record, we
+    // can successfully write 204 million records, but not 205.
+    const unsigned long nMillionPoints = 205;
+    const unsigned long NPOINTS = 1024*1024*nMillionPoints ;
+    const char * OutputName = "Issue147.las";
+    unsigned long i = 0;
+    unsigned long npoints = 0;
+
+    // Write a LAS file and after the points are in, update the header.
+    header = LASHeader_Create();
+    writer = LASWriter_Create(OutputName, header, LAS_MODE_WRITE);
+    
+    for (i = 0; i < NPOINTS; i++)
+    {
+      if (i % 1000 == 0)
+         printf("\b\b\b\b\b\b\b%6.2f%%", ((double)i)/NPOINTS * 100.0);
+      
+      pt = LASPoint_Create();
+      err = LASPoint_SetX(pt, 0);
+      if (err) printf ("For point %lu, failed to set point value X\n", i);
+      err = LASPoint_SetY(pt, 0);
+      if (err) printf ("For point %lu, failed to set point value Y\n", i);
+      err = LASPoint_SetZ(pt, 0);
+      if (err) printf ("For point %lu, failed to set point value Z\n", i);
+      err = LASWriter_WritePoint(writer, pt);  
+      if (err) printf ("For point %lu, failed to WritePoint\n", i);
+      LASPoint_Destroy(pt);
+    }
+   err = LASHeader_SetPointRecordsCount(header, NPOINTS);
+   if (err) dumperror ("Failed to LASHeader_SetPointRecordsCount\n");
+   err = LASWriter_WriteHeader(writer, header);
+   if (err) dumperror ("Failed to LASWriter_WriteHeader");
+   LASWriter_Destroy(writer);
+   LASHeader_Destroy(header);
+   
+   // Read the file we just wrote and check the header data.
+    reader = LASReader_Create(OutputName);
+    header = LASReader_GetHeader(reader);
+    npoints = LASHeader_GetPointRecordsCount(header);
+    printf ("\n\nWrote %lu, Read %lu (testing %lu Million (1024 x 1024) Points)\n", NPOINTS, npoints, nMillionPoints);
+}
diff -r 12532d4c7222 -r 96c022e7f627 apps/bigtest.cpp
--- a/apps/bigtest.cpp	Wed Oct 27 11:23:13 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-#include <liblas.h>


More information about the Liblas-commits mailing list