MCPcopy Create free account
hub / github.com/PDAL/PDAL / read

Method read

io/OptechReader.cpp:155–246  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

153
154
155point_count_t OptechReader::read(PointViewPtr data,
156 point_count_t countRequested)
157{
158 point_count_t numRead = 0;
159 point_count_t dataIndex = data->size();
160
161 while (numRead < countRequested)
162 {
163 if (m_returnIndex == 0)
164 {
165 if (!m_extractor.good())
166 {
167 if (m_recordIndex >= m_header.numRecords)
168 {
169 break;
170 }
171 m_recordIndex += fillBuffer();
172 }
173
174 m_extractor >> m_pulse.gpsTime >> m_pulse.returnCount >>
175 m_pulse.range[0] >> m_pulse.range[1] >> m_pulse.range[2] >>
176 m_pulse.range[3] >> m_pulse.intensity[0] >>
177 m_pulse.intensity[1] >> m_pulse.intensity[2] >>
178 m_pulse.intensity[3] >> m_pulse.scanAngle >> m_pulse.roll >>
179 m_pulse.pitch >> m_pulse.heading >> m_pulse.latitude >>
180 m_pulse.longitude >> m_pulse.elevation;
181
182 if (m_pulse.returnCount == 0)
183 {
184 m_returnIndex = 0;
185 continue;
186 }
187
188 // In all the csd files that we've tested, the longitude
189 // values have been less than -2pi.
190 if (m_pulse.longitude < -M_PI * 2)
191 {
192 m_pulse.longitude = m_pulse.longitude + M_PI * 2;
193 }
194 else if (m_pulse.longitude > M_PI * 2)
195 {
196 m_pulse.longitude = m_pulse.longitude - M_PI * 2;
197 }
198 }
199
200 georeference::Xyz gpsPoint = georeference::Xyz(
201 m_pulse.longitude, m_pulse.latitude, m_pulse.elevation);
202 georeference::RotationMatrix rotationMatrix =
203 createOptechRotationMatrix(m_pulse.roll, m_pulse.pitch,
204 m_pulse.heading);
205 georeference::Xyz point = pdal::georeference::georeferenceWgs84(
206 m_pulse.range[m_returnIndex], m_pulse.scanAngle,
207 m_boresightMatrix, rotationMatrix, gpsPoint);
208
209 data->setField(Dimension::Id::X, dataIndex, point.X * 180 / M_PI);
210 data->setField(Dimension::Id::Y, dataIndex, point.Y * 180 / M_PI);
211 data->setField(Dimension::Id::Z, dataIndex, point.Z);
212 data->setField(Dimension::Id::GpsTime, dataIndex, m_pulse.gpsTime);

Callers

nothing calls this directly

Calls 5

XyzClass · 0.85
georeferenceWgs84Function · 0.85
sizeMethod · 0.45
setFieldMethod · 0.45

Tested by

no test coverage detected