#ifndef GEOTIFF_H #define GEOTIFF_H #include #include #include #include "datum.h" #include "projection.h" #include "tifffile.h" #include "transform.h" class GeoTIFF { public: GeoTIFF() : _projection(0) {} bool load(const QString &path); const Datum &datum() const {return _datum;} Projection *projection() const {return _projection;} const QTransform &transform() const {return _transform;} const QString &errorString() const {return _errorString;} private: union Value { quint16 SHORT; double DOUBLE; }; struct Ctx { quint32 scale; quint32 tiepoints; quint32 tiepointCount; quint32 matrix; quint32 keys; quint32 values; Ctx() : scale(0), tiepoints(0), tiepointCount(0), matrix(0), keys(0), values(0) {} }; bool readEntry(TIFFFile &file, Ctx &ctx) const; bool readIFD(TIFFFile &file, quint32 &offset, Ctx &ctx) const; bool readScale(TIFFFile &file, quint32 offset, QPointF &scale) const; bool readTiepoints(TIFFFile &file, quint32 offset, quint32 count, QList &points) const; bool readMatrix(TIFFFile &file, quint32 offset, double matrix[16]) const; bool readKeys(TIFFFile &file, Ctx &ctx, QMap &kv) const; bool readGeoValue(TIFFFile &file, quint32 offset, quint16 index, double &val) const; Datum datum(QMap &kv); Projection::Method method(QMap &kv); bool geographicModel(QMap &kv); bool projectedModel(QMap &kv); QTransform _transform; Datum _datum; Projection *_projection; QString _errorString; }; #endif // GEOTIFF_H