[Liblas-commits] hg-main-tree: introducing build and source files
for mrsid drive...
liblas-commits at liblas.org
liblas-commits at liblas.org
Fri Mar 18 10:01:52 EDT 2011
details: http://hg.libpc.orghg-main-tree/rev/c79a3bd0318d
changeset: 361:c79a3bd0318d
user: Kirk McKelvey <kirkoman at lizardtech.com>
date: Fri Mar 18 09:01:33 2011 -0500
description:
introducing build and source files for mrsid driver (driver not operational)
diffstat:
CMakeLists.txt | 11 ++
cmake/modules/FindMrSID.cmake | 10 +-
include/libpc/drivers/mrsid/Reader.hpp | 74 +++++++++++++
src/CMakeLists.txt | 22 ++++
src/drivers/mrsid/Reader.cpp | 175 +++++++++++++++++++++++++++++++++
5 files changed, 286 insertions(+), 6 deletions(-)
diffs (truncated from 342 to 300 lines):
diff -r a8af49df848a -r c79a3bd0318d CMakeLists.txt
--- a/CMakeLists.txt Fri Mar 18 08:53:33 2011 -0500
+++ b/CMakeLists.txt Fri Mar 18 09:01:33 2011 -0500
@@ -332,6 +332,17 @@
"libPC currently requires a working libLAS installation 1.6.0 or greater")
endif()
+# MrSID/LiDAR support - optiona, default=OFF
+set(WITH_MRSID FALSE CACHE BOOL "Choose if MrSID/LiDAR support should be built")
+
+if(WITH_MRSID)
+ find_package(MrSID)
+ if(MRSID_FOUND)
+ set(CMAKE_REQUIRED_LIBRARIES ${MRSID_LIBRARY})
+ include_directories(${MRSID_INCLUDE_DIR})
+ endif()
+endif()
+
#------------------------------------------------------------------------------
# installation path settings
diff -r a8af49df848a -r c79a3bd0318d cmake/modules/FindMrSID.cmake
--- a/cmake/modules/FindMrSID.cmake Fri Mar 18 08:53:33 2011 -0500
+++ b/cmake/modules/FindMrSID.cmake Fri Mar 18 09:01:33 2011 -0500
@@ -29,17 +29,15 @@
message(STATUS "Searching for MrSID LiDAR library ${MrSID_FIND_VERSION}+")
endif()
-if(NOT DEFINED ENV{MRSID_HOME})
- message(FATAL_ERROR "Missing environment variable MRSID_HOME with location of MrSID LiDAR sdk")
+if(NOT MRSID_ROOT)
+ message(FATAL_ERROR "Missing variable MRSID_ROOT with location of MrSID LiDAR sdk")
endif()
-set(MRSID_HOME $ENV{MRSID_HOME})
-
find_path(MRSID_INCLUDE_DIR
lidar/Base.h
PATHS
- ${MRSID_HOME}/include
- ${MRSID_HOME}/Lidar_DSDK/include
+ ${MRSID_ROOT}/include
+ ${MRSID_ROOT}/Lidar_DSDK/include
NO_DEFAULT_PATH)
find_library(MRSID_LIBRARY
diff -r a8af49df848a -r c79a3bd0318d include/libpc/drivers/mrsid/Reader.hpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/libpc/drivers/mrsid/Reader.hpp Fri Mar 18 09:01:33 2011 -0500
@@ -0,0 +1,74 @@
+/******************************************************************************
+* Copyright (c) 2011, Kirk McKelvey <kirkoman at gmail.com>
+*
+* 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 Hobu, Inc. or Flaxen Geo Consulting 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.
+****************************************************************************/
+
+#ifndef INCLUDED_DRIVERS_MRSID_READER_HPP
+#define INCLUDED_DRIVERS_MRSID_READER_HPP
+
+#include <string>
+#include <libpc/Stage.hpp>
+#include "lidar/MG4PointReader.h"
+
+namespace LizardTech
+{
+class MG4PointReader;
+}
+
+namespace libpc
+{
+namespace drivers
+{
+namespace mrsid
+{
+
+class LIBPC_DLL Reader : public libpc::Stage
+{
+public:
+ Reader(const char *);
+
+ const std::string& getName() const;
+
+protected:
+ boost::uint32_t readBuffer(PointData&);
+
+private:
+ Reader& operator=(const Reader&); // not implemented
+ Reader(const Reader&); // not implemented
+ LizardTech::MG4PointReader *m_reader;
+};
+
+}
+}
+} // end namespaces
+
+#endif // INCLUDED_DRIVERS_MRSID_READER_HPP
diff -r a8af49df848a -r c79a3bd0318d src/CMakeLists.txt
--- a/src/CMakeLists.txt Fri Mar 18 08:53:33 2011 -0500
+++ b/src/CMakeLists.txt Fri Mar 18 09:01:33 2011 -0500
@@ -191,6 +191,27 @@
endif()
#
+# drivers/mrsid
+#
+if (MRSID_FOUND)
+set(LIBPC_DRIVERS_MRSID_HPP
+ ${LIBPC_HEADERS_DIR}/drivers/mrsid/Reader.hpp
+)
+
+set (LIBPC_DRIVERS_MRSID_CPP
+ ./drivers/mrsid/Reader.cpp
+)
+
+FOREACH(file ${LIBPC_DRIVERS_MRSID_HPP})
+ SET(LIBPC_HPP "${LIBPC_HPP};${file}" CACHE INTERNAL "source files for drivers/mrsid")
+ENDFOREACH(file)
+
+FOREACH(file ${LIBPC_DRIVERS_MRSID_CPP})
+ SET(LIBPC_CPP "${LIBPC_CPP};${file}" CACHE INTERNAL "source files for drivers/mrsid")
+ENDFOREACH(file)
+endif()
+
+#
# filters
#
@@ -290,6 +311,7 @@
${LIBLAS_LIBRARY}
${TIFF_LIBRARY}
${ORACLE_LIBRARY}
+ ${MRSID_LIBRARY}
${GEOTIFF_LIBRARY}
${GDAL_LIBRARY}
${LASZIP_LIBRARY}
diff -r a8af49df848a -r c79a3bd0318d src/drivers/mrsid/Reader.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/drivers/mrsid/Reader.cpp Fri Mar 18 09:01:33 2011 -0500
@@ -0,0 +1,175 @@
+/******************************************************************************
+* Copyright (c) 2011, Kirk McKelvey <kirkoman at gmail.com>
+*
+* 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 Hobu, Inc. or Flaxen Geo Consulting 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 <libpc/drivers/mrsid/Reader.hpp>
+#include <libpc/exceptions.hpp>
+#include "lidar/MG4PointReader.h"
+
+namespace libpc
+{
+namespace drivers
+{
+namespace mrsid
+{
+
+LT_USE_LIDAR_NAMESPACE
+
+static libpc::Dimension::Field FieldEnumOf(const char *);
+static libpc::Dimension::DataType TypeEnumOf(LizardTech::DataType);
+
+Reader::Reader(const char * filepath)
+ : libpc::Stage(), m_reader(NULL)
+{
+ try
+ {
+ // open a MG4 file
+ m_reader = MG4PointReader::create();
+ m_reader->init(filepath);
+ }
+ catch(...)
+ {
+ RELEASE(m_reader);
+ throw;
+ }
+
+ Header* header = new Header;
+ Schema& schema = header->getSchema();
+
+ header->setNumPoints(m_reader->getNumPoints());
+ Bounds<double> bounds(m_reader->getBounds().x.min, m_reader->getBounds().y.min, m_reader->getBounds().z.min,
+ m_reader->getBounds().x.max, m_reader->getBounds().y.max, m_reader->getBounds().z.max);
+
+ header->setBounds(bounds);
+
+ size_t numChannels = m_reader->getNumChannels();
+ const PointInfo &pointInfo = m_reader->getPointInfo();
+ for(size_t i = 0; i < numChannels; i += 1)
+ schema.addDimension(Dimension(FieldEnumOf(pointInfo.getChannel(i).getName()), TypeEnumOf(pointInfo.getChannel(i).getDataType())));
+
+ setHeader(header);
+
+ return;
+}
+
+libpc::Dimension::Field
+FieldEnumOf(const char * fieldname)
+{
+ if (!strcmp(CHANNEL_NAME_X, fieldname))
+ return Dimension::Field_X;
+ if (!strcmp(CHANNEL_NAME_Y, fieldname))
+ return Dimension::Field_Y;
+ if (!strcmp(CHANNEL_NAME_Y, fieldname))
+ return Dimension::Field_Z;
+ if (!strcmp(CHANNEL_NAME_Intensity, fieldname))
+ return Dimension::Field_Intensity;
+ if (!strcmp(CHANNEL_NAME_ReturnNum, fieldname))
+ return Dimension::Field_ReturnNumber;
+ if (!strcmp(CHANNEL_NAME_NumReturns, fieldname))
+ return Dimension::Field_NumberOfReturns;
+ if (!strcmp(CHANNEL_NAME_ScanDir, fieldname))
+ return Dimension::Field_ScanDirectionFlag;
+ if (!strcmp(CHANNEL_NAME_EdgeFlightLine, fieldname))
+ return Dimension::Field_EdgeOfFlightLine;
+ if (!strcmp(CHANNEL_NAME_ClassId, fieldname))
+ return Dimension::Field_Classification;
+ if (!strcmp(CHANNEL_NAME_ScanAngle, fieldname))
+ return Dimension::Field_ScanAngleRank;
+ if (!strcmp(CHANNEL_NAME_UserData, fieldname))
+ return Dimension::Field_UserData;
+ if (!strcmp(CHANNEL_NAME_SourceId, fieldname))
+ return Dimension::Field_PointSourceId;
+ if (!strcmp(CHANNEL_NAME_GPSTime, fieldname))
+ return Dimension::Field_Time;
+ if (!strcmp(CHANNEL_NAME_Red, fieldname))
+ return Dimension::Field_Red;
+ if (!strcmp(CHANNEL_NAME_Green, fieldname))
+ return Dimension::Field_Green;
+ if (!strcmp(CHANNEL_NAME_Blue, fieldname))
+ return Dimension::Field_Blue;
+ // @todo
+ // Field_WavePacketDescriptorIndex
+ // Field_WaveformDataOffset
+ // Field_ReturnPointWaveformLocation
+ // Field_WaveformXt
+ // Field_WaveformYt
+ // Field_WaveformZt
+ // ...
+}
+
+libpc::Dimension::DataType
+TypeEnumOf(LizardTech::DataType ldt)
+{
+ switch (ldt)
More information about the Liblas-commits
mailing list