1 /****************************************************************************** 2 * Copyright (c) 2011, Michael P. Gerlek (mpg@flaxen.com) 3 * 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following 8 * conditions are met: 9 * 10 * * Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * * Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in 14 * the documentation and/or other materials provided 15 * with the distribution. 16 * * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the 17 * names of its contributors may be used to endorse or promote 18 * products derived from this software without specific prior 19 * written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 28 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 29 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 31 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 32 * OF SUCH DAMAGE. 33 ****************************************************************************/ 34 35 #pragma once 36 37 #include <pdal/Log.hpp> 38 #include <pdal/SpatialReference.hpp> 39 40 namespace pdal 41 { 42 43 namespace Geotiff 44 { 45 struct error : public std::runtime_error 46 { errorpdal::Geotiff::error47 error(const std::string& err) : std::runtime_error(err) 48 {} 49 }; 50 } 51 52 struct Entry; 53 54 class GeotiffSrs 55 { 56 public: 57 GeotiffSrs(const std::vector<uint8_t>& directoryRec, 58 const std::vector<uint8_t>& doublesRec, 59 const std::vector<uint8_t>& asciiRec, LogPtr log); srs() const60 SpatialReference srs() const 61 { return m_srs; } 62 gtiffPrintString()63 std::string const& gtiffPrintString() 64 { return m_gtiff_print_string; } 65 66 private: 67 SpatialReference m_srs; 68 LogPtr m_log; 69 std::string m_gtiff_print_string; 70 71 void validateDirectory(const Entry *ent, size_t numEntries, 72 size_t numDoubles, size_t asciiSize); 73 }; 74 75 class GeotiffTags 76 { 77 public: 78 GeotiffTags(const SpatialReference& srs); 79 directoryData()80 std::vector<uint8_t>& directoryData() 81 { return m_directoryRec; } doublesData()82 std::vector<uint8_t>& doublesData() 83 { return m_doublesRec; } asciiData()84 std::vector<uint8_t>& asciiData() 85 { return m_asciiRec; } 86 87 private: 88 std::vector<uint8_t> m_directoryRec; 89 std::vector<uint8_t> m_doublesRec; 90 std::vector<uint8_t> m_asciiRec; 91 }; 92 93 } // namespace pdal 94