129 lines
4.1 KiB
C
129 lines
4.1 KiB
C
|
/**********************************************************************
|
||
|
*
|
||
|
* geo_keyp.h - private interface for GeoTIFF geokey tag parsing
|
||
|
*
|
||
|
* Written by: Niles D. Ritter
|
||
|
*
|
||
|
* copyright (c) 1995 Niles D. Ritter
|
||
|
*
|
||
|
* Permission granted to use this software, so long as this copyright
|
||
|
* notice accompanies any products derived therefrom.
|
||
|
**********************************************************************/
|
||
|
|
||
|
#ifndef LIBGEOTIFF_GEO_KEYP_H_
|
||
|
#define LIBGEOTIFF_GEO_KEYP_H_
|
||
|
|
||
|
#include <stdlib.h> /* for size_t */
|
||
|
|
||
|
#include "proj.h"
|
||
|
|
||
|
/*
|
||
|
* This structure contains the internal program
|
||
|
* representation of the key entry.
|
||
|
*/
|
||
|
struct GeoKey {
|
||
|
int gk_key; /* GeoKey ID */
|
||
|
size_t gk_size; /* data byte size */
|
||
|
tagtype_t gk_type; /* TIFF data type */
|
||
|
long gk_count; /* number of values */
|
||
|
char* gk_data; /* pointer to data, or value */
|
||
|
};
|
||
|
typedef struct GeoKey GeoKey;
|
||
|
|
||
|
/*
|
||
|
* This structure represents the file-organization of
|
||
|
* the key entry. Note that it assumes that short entries
|
||
|
* are aligned along 2-byte boundaries.
|
||
|
*/
|
||
|
struct KeyEntry {
|
||
|
pinfo_t ent_key; /* GeoKey ID */
|
||
|
pinfo_t ent_location; /* TIFF Tag ID or 0 */
|
||
|
pinfo_t ent_count; /* GeoKey value count */
|
||
|
pinfo_t ent_val_offset; /* value or tag offset */
|
||
|
};
|
||
|
typedef struct KeyEntry KeyEntry;
|
||
|
|
||
|
/*
|
||
|
* This is the header of the CoordSystemInfoTag. The 'Version'
|
||
|
* will only change if the CoorSystemInfoTag structure changes;
|
||
|
* The Major Revision will be incremented whenever a new set of
|
||
|
* Keys is added or changed, while the Minor revision will be
|
||
|
* incremented when only the set of Key-values is increased.
|
||
|
*/
|
||
|
struct KeyHeader{
|
||
|
pinfo_t hdr_version; /* GeoTIFF Version */
|
||
|
pinfo_t hdr_rev_major; /* GeoKey Major Revision # */
|
||
|
pinfo_t hdr_rev_minor; /* GeoKey Minor Revision # */
|
||
|
pinfo_t hdr_num_keys; /* Number of GeoKeys */
|
||
|
};
|
||
|
typedef struct KeyHeader KeyHeader;
|
||
|
|
||
|
/*
|
||
|
* This structure holds temporary data while reading or writing
|
||
|
* the tags.
|
||
|
*/
|
||
|
struct TempKeyData {
|
||
|
char *tk_asciiParams;
|
||
|
int tk_asciiParamsLength;
|
||
|
int tk_asciiParamsOffset;
|
||
|
};
|
||
|
typedef struct TempKeyData TempKeyData;
|
||
|
|
||
|
struct gtiff;
|
||
|
|
||
|
#ifndef GTIF_PRINT_FUNC_FORMAT
|
||
|
#if defined(__GNUC__) && __GNUC__ >= 3
|
||
|
#define GTIF_PRINT_FUNC_FORMAT( format_idx, arg_idx ) __attribute__((__format__ (__printf__, format_idx, arg_idx)))
|
||
|
#else
|
||
|
#define GTIF_PRINT_FUNC_FORMAT( format_idx, arg_idx )
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef GTERRORCALLBACK_DEFINED
|
||
|
#define GTERRORCALLBACK_DEFINED
|
||
|
/* Defined in both geotiff.h and geo_kep.h */
|
||
|
typedef void (*GTErrorCallback) (struct gtiff*,
|
||
|
int level,
|
||
|
const char* msg, ...) GTIF_PRINT_FUNC_FORMAT(3,4);
|
||
|
#endif
|
||
|
|
||
|
struct gtiff {
|
||
|
tiff_t* gt_tif; /* TIFF file descriptor */
|
||
|
struct _TIFFMethod gt_methods; /* TIFF i/o methods */
|
||
|
int gt_flags; /* file flags */
|
||
|
|
||
|
pinfo_t gt_version; /* GeoTIFF Version */
|
||
|
pinfo_t gt_rev_major;/* GeoKey Key Revision */
|
||
|
pinfo_t gt_rev_minor;/* GeoKey Code Revision */
|
||
|
|
||
|
int gt_num_keys; /* number of keys */
|
||
|
GeoKey* gt_keys; /* array of keys */
|
||
|
int* gt_keyindex; /* index of a key, if set*/
|
||
|
int gt_keymin; /* smallest key set */
|
||
|
int gt_keymax; /* largest key set */
|
||
|
|
||
|
pinfo_t* gt_short; /* array of SHORT vals */
|
||
|
double* gt_double; /* array of DOUBLE vals */
|
||
|
int gt_nshorts; /* number of SHORT vals */
|
||
|
int gt_ndoubles; /* number of DOUBLE vals */
|
||
|
|
||
|
GTErrorCallback gt_error_callback;
|
||
|
void* gt_user_data;
|
||
|
|
||
|
PJ_CONTEXT *pj_context; /* PROJ context */
|
||
|
int own_pj_context; /* whether we own the PROJ context */
|
||
|
|
||
|
char szTmpBufferForGTIFValueNameEx[160];
|
||
|
};
|
||
|
|
||
|
typedef enum {
|
||
|
FLAG_FILE_OPEN=1,
|
||
|
FLAG_FILE_MODIFIED=2
|
||
|
} gtiff_flags;
|
||
|
|
||
|
#define MAX_KEYINDEX 65535 /* largest possible key */
|
||
|
#define MAX_KEYS 100 /* maximum keys in a file */
|
||
|
#define MAX_VALUES 1000 /* maximum values in a tag */
|
||
|
|
||
|
#endif /* LIBGEOTIFF_GEO_KEYP_H_ */
|