16 #include <pdal/pdal.hpp> 17 #include <pdal/PointViewIter.hpp> 18 #include <pdal/StatsFilter.hpp> 19 #include <pdal/Reader.hpp> 20 #include <pdal/FauxReader.hpp> 40 m_inputFilename = fname;
41 pdal::Stage* reader = 0;
44 if (m_inputFilename.contains(
"fauxreader"))
47 reader =
new FauxReader;
49 m_pdalOptions.add(
"mode",
"ramp");
50 BOX3D bbox(-0.001, -0.001, -100.0, 0.001, 0.001, 100.0);
51 m_pdalOptions.add(
"bounds", bbox);
52 m_pdalOptions.add(
"num_points",
"11");
53 m_pdalPipe->setOptions(m_pdalOptions);
58 const string driver = factory.inferReaderDriver(m_inputFilename.string());
60 throw pdal_error(
"File type not supported by PDAL");
61 reader = factory.createStage(driver);
63 throw pdal_error(
"No reader created by PDAL");
65 m_pdalOptions.add(
"filename", m_inputFilename.string());
66 reader->setOptions(m_pdalOptions);
69 m_pdalPipe =
new StatsFilter();
70 m_pdalPipe->setInput(*reader);
74 m_pdalPipe->prepare(*m_pointTable);
75 m_pvs = m_pdalPipe->execute(*m_pointTable);
78 m_currentPV = *(m_pvs.begin());
81 establishAvailableFields();
85 const SpatialReference& srs = reader->getSpatialReference();
86 wkt = srs.getWKT(SpatialReference::eCompoundOK,
false);
89 catch (std::exception& e)
107 return m_currentPV->size();
126 if ((requested == 0) || (offset >= numPoints))
132 m_currentPID = offset;
133 parsePointView(block, requested);
138 if (!m_pdalPipe || !m_currentPV || !m_geometry.valid())
141 #define USE_STATS_FILTER 142 #ifdef USE_STATS_FILTER 144 if (!m_minRecord.valid())
152 if (!filterName.contains(
"filters.stats"))
157 pdal::StatsFilter* stats = (pdal::StatsFilter*) m_pdalPipe;
162 const IdList& idList = m_currentPV->dims();
163 IdList::const_iterator dim_iter = idList.begin();
164 while (dim_iter != idList.end())
166 Id::Enum
id = *dim_iter;
167 const stats::Summary& summary = stats->getStats(
id);
172 minPt.
x = summary.minimum();
173 maxPt.
x = summary.maximum();
176 minPt.
y = summary.minimum();
177 maxPt.
y = summary.maximum();
180 minPt.
z = summary.minimum();
181 maxPt.
z = summary.maximum();
183 case Id::Enum::ReturnNumber:
190 case Id::Enum::NumberOfReturns:
197 case Id::Enum::Intensity:
211 case Id::Enum::Green:
225 case Id::Enum::Infrared:
232 case Id::Enum::GpsTime:
247 m_geometry->convertPos(minPt, min_gpt);
248 m_minRecord->setPosition(min_gpt);
249 m_geometry->convertPos(maxPt, max_gpt);
250 m_maxRecord->setPosition(max_gpt);
ossimPdalFileReader()
default constructor
virtual ossim_uint32 getNumPoints() const
Returns number of points in the data file.
virtual ~ossimPdalFileReader()
virtual destructor
std::shared_ptr< pdal::PointTable > PointTablePtr
virtual bool open(const ossimFilename &fname)
Accepts the name of a point cloud file.
virtual void clear()
Resets any storage to empty.
unsigned int ossim_uint32
virtual void getFileBlock(ossim_uint32 offset, ossimPointBlock &block, ossim_uint32 maxNumPoints=0xFFFFFFFF) const
Fetches up to maxNumPoints points at the given dataset <offset> in the order they appear in the data ...
virtual void establishMinMax()
Computes min and max records using points in the current PointViewSet.
#define RTTI_DEF1(cls, name, b1)
virtual void establishMinMax()
Computes min and max records using points in the current PointViewSet.