/**********************************************************************
 *
 *  geovalues.h - Public registry for valid GEOTIFF  key-values.
 *
 *   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 __geovalues_h_
#define __geovalues_h_

/* If code values are added or modified, the "GvCurrentMinorRev" 
 * number should be incremented here. If new Keys are added, then the
 * GvCurrentRevision number should be incremented instead, and the
 * GvCurrentMinorRev should be reset to zero (see "geokeys.h").
 *
 * In addition, any changes here should be reflected in "geo_names.c"
 *
 */
 
#define GvCurrentMinorRev  0  /* First Major Rev EPSG Code Release  */


/*
 * Universal key values -- defined for consistency
 */
#define KvUndefined         0
#define KvUserDefined   32767

#ifdef ValuePair
#  undef ValuePair
#endif
#define ValuePair(name,value)    name = value,

/*
 * The section numbers refer to the GeoTIFF Specification section
 * in which the code values are documented.
 */
 
/************************************************************
 *         6.3.1 GeoTIFF General Codes
 ************************************************************/

/* 6.3.1.1 Model Type Codes */
typedef enum {
	ModelTypeProjected  = 1,  /* Projection Coordinate System */
	ModelTypeGeographic = 2,  /* Geographic latitude-longitude System */
	ModelTypeGeocentric = 3,   /* Geocentric (X,Y,Z) Coordinate System */
	ModelProjected  = ModelTypeProjected,   /* alias */
	ModelGeographic = ModelTypeGeographic,  /* alias */
	ModelGeocentric = ModelTypeGeocentric   /* alias */
} modeltype_t;

/* 6.3.1.2 Raster Type Codes */
typedef enum {
	RasterPixelIsArea   = 1,  /* Standard pixel-fills-grid-cell */
	RasterPixelIsPoint  = 2   /* Pixel-at-grid-vertex */
} rastertype_t;

typedef enum {
#  include "epsg_gcs.inc"
  geographic_end
} geographic_t;

typedef enum {
#  include "epsg_datum.inc"
   geodeticdatum_end
} geodeticdatum_t;

typedef enum {
#  include "epsg_units.inc"
   Unit_End
} geounits_t;

typedef enum {
#  include "epsg_ellipse.inc"
    ellipsoid_end
} ellipsoid_t;

typedef enum {
#  include "epsg_pm.inc"
   primemeridian_end
} primemeridian_t;

typedef enum {
#  include "epsg_pcs.inc"
   pcstype_end
} pcstype_t;

typedef enum {
#  include "epsg_proj.inc"
   projection_end
} projection_t;

typedef enum {
#  include "geo_ctrans.inc"
   coordtrans_end
} coordtrans_t;

typedef enum {
#  include "epsg_vertcs.inc"
   vertcs_end
} vertcstype_t;


typedef enum {
	VDatumBase = 1
} vdatum_t;

#endif /* __geovalues_h_ */

