| 83 | |
| 84 | |
| 85 | void OptechReader::initialize() |
| 86 | { |
| 87 | std::istream* rawStream = Utils::openFile(m_filename); |
| 88 | if (!rawStream) |
| 89 | throwError("Unable to open " + m_filename + " for reading."); |
| 90 | ILeStream stream(rawStream); |
| 91 | |
| 92 | try |
| 93 | { |
| 94 | stream.get(m_header.signature, 4); |
| 95 | if (strcmp(m_header.signature, "CSD") != 0) |
| 96 | throwError("Invalid header signature when reading CSD file: '" + |
| 97 | std::string(m_header.signature) + "'"); |
| 98 | |
| 99 | stream.get(m_header.vendorId, 64); |
| 100 | stream.get(m_header.softwareVersion, 32); |
| 101 | stream >> m_header.formatVersion >> m_header.headerSize >> |
| 102 | m_header.gpsWeek >> m_header.minTime >> m_header.maxTime >> |
| 103 | m_header.numRecords >> m_header.numStrips; |
| 104 | for (size_t i = 0; i < 256; ++i) |
| 105 | { |
| 106 | stream >> m_header.stripPointers[i]; |
| 107 | } |
| 108 | stream >> m_header.misalignmentAngles[0] >> |
| 109 | m_header.misalignmentAngles[1] >> m_header.misalignmentAngles[2] >> |
| 110 | m_header.imuOffsets[0] >> m_header.imuOffsets[1] >> |
| 111 | m_header.imuOffsets[2] >> m_header.temperature >> m_header.pressure; |
| 112 | stream.get(m_header.freeSpace, 830); |
| 113 | } |
| 114 | catch( ... ) |
| 115 | { |
| 116 | Utils::closeFile(rawStream); |
| 117 | throw; |
| 118 | } |
| 119 | Utils::closeFile(rawStream); |
| 120 | |
| 121 | m_boresightMatrix = createOptechRotationMatrix( |
| 122 | m_header.misalignmentAngles[0] + m_header.imuOffsets[0], |
| 123 | m_header.misalignmentAngles[1] + m_header.imuOffsets[1], |
| 124 | m_header.misalignmentAngles[2] + m_header.imuOffsets[2]); |
| 125 | |
| 126 | // The Optech docs say that their lat/longs are referenced |
| 127 | // to the WGS84 reference frame. |
| 128 | setSpatialReference("EPSG:4326"); |
| 129 | } |
| 130 | |
| 131 | |
| 132 | void OptechReader::addDimensions(PointLayoutPtr layout) |
nothing calls this directly
no test coverage detected