123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- #ifndef GRASS_RASTER3D_H
- #define GRASS_RASTER3D_H
- #include <grass/gis.h>
- #include <grass/raster.h>
- #define RASTER3D_MAP_VERSION 2 /* Second version of the raster 3D map layout.
- * Old maps withput version information are
- * defined as version == 1 when reading the header.
- */
- #define RASTER3D_TILE_SAME_AS_FILE 2
- #define RASTER3D_NO_COMPRESSION 0
- #define RASTER3D_COMPRESSION 1
- #define RASTER3D_MAX_PRECISION -1
- #define RASTER3D_NO_CACHE 0
- #define RASTER3D_USE_CACHE_DEFAULT -1
- #define RASTER3D_USE_CACHE_X -2
- #define RASTER3D_USE_CACHE_Y -3
- #define RASTER3D_USE_CACHE_Z -4
- #define RASTER3D_USE_CACHE_XY -5
- #define RASTER3D_USE_CACHE_XZ -6
- #define RASTER3D_USE_CACHE_YZ -7
- #define RASTER3D_USE_CACHE_XYZ -8
- #define RASTER3D_DEFAULT_WINDOW 0 /* NULL pointer, now (int)0 because issues with ctypesgen */
- #define RASTER3D_DIRECTORY "grid3"
- #define RASTER3D_CELL_ELEMENT "cell"
- #define RASTER3D_CATS_ELEMENT "cats"
- #define RASTER3D_RANGE_ELEMENT "range"
- #define RASTER3D_HEADER_ELEMENT "cellhd"
- #define RASTER3D_HISTORY_ELEMENT "hist"
- #define RASTER3D_COLOR_ELEMENT "color"
- #define RASTER3D_COLOR2_DIRECTORY "colr2"
- #define RASTER3D_MASK_MAP "RASTER3D_MASK"
- #define RASTER3D_WINDOW_ELEMENT "WIND3"
- #define RASTER3D_DEFAULT_WINDOW_ELEMENT "DEFAULT_WIND3"
- #define RASTER3D_WINDOW_DATABASE "windows3d"
- #define RASTER3D_PERMANENT_MAPSET "PERMANENT"
- /*---------------------------------------------------------------------------*/
- typedef struct
- {
- double north, south;
- double east, west;
- double top, bottom;
- /* dimension of data in "cells"; rows == #x; cols == #y; depths == #z */
- int rows, cols, depths;
- double ns_res, ew_res, tb_res;
- int proj; /* Projection (see gis.h) */
- int zone; /* Projection zone (see gis.h) */
- } RASTER3D_Region;
- /*---------------------------------------------------------------------------*/
- struct RASTER3D_Map;
- typedef void resample_fn(struct RASTER3D_Map *, int, int, int, void *, int);
- /*---------------------------------------------------------------------------*/
- typedef struct RASTER3D_Map
- {
- int version; /* The version of the raster 3D map layout */
- char *fileName;
- char *tempName;
- char *mapset;
- /* operation performed on map */
- int operation; /* RASTER3D_WRITE_DATA or RASTER3D_READ_DATA */
- /* region */
- RASTER3D_Region region;
- /* window for map */
- RASTER3D_Region window;
- /* resmapling function used for map. default is nearest neighbor */
- resample_fn *resampleFun;
- /* units */
- char* unit; /* space (U_METER, ...) */
- int vertical_unit; /* space or time (U_METER, ..., U_YEAR, ...) */
- /* dimension of a single tile in "cells" */
- int tileX, tileY, tileZ;
- /* # of tiles in x, y, and z direction */
- int nx, ny, nz;
- /* data file specific information */
- /* file descriptor */
- int data_fd; /* file descriptor */
- /* type in which data is stored on file */
- int type; /* DCELL_TYPE or FCELL_TYPE */
- /* data concering the compression */
- int precision; /* RASTER3D_MAX_PRECISION or, 0 .. 23 for float,
- 0 .. 52 for double */
- int compression; /* RASTER3D_NO_COMPRESSION or RASTER3D_COMPRESSION */
- int useLzw; /* RASTER3D_USE_LZW or RASTER3D_NO_LZW !!! only kept for backward compatibility */
- int useRle; /* RASTER3D_USE_RLE or RASTER3D_NO_RLE !!! only kept for backward compatibility */
- int useXdr; /* RASTER3D_USE_XDR or RASTER3D_NO_XDR !!! only kept for backward compatibility */
- /* pointer to first tile in file */
- int offset;
- /* pointer to the first index entry in file */
- long indexOffset;
- /* sizeof (long) of the system on which the file is/was written */
- int indexLongNbytes;
- /* max # bytes used in the representation of indices; this is equal to */
- /* # bytes used in the representation of "indexOffset" */
- int indexNbytesUsed;
- /* pointer to the last entry in the file */
- int fileEndPtr;
- /* indicates if index is stored in file; used for RASTER3D_READ_DATA only */
- int hasIndex; /* RASTER3D_HAS_INDEX or RASTER3D_NO_INDEX */
- /* information concerning internal storage of data */
- /* index specific information */
- /* index[i] == the offset of tile "i" in the data file */
- long *index;
- /* tileLength[i] == # bytes used to store tile "i" */
- int *tileLength;
- /* tile specific information */
- /* type in which data is stored in memory */
- int typeIntern; /* DCELL_TYPE or FCELL_TYPE */
- /* in non-cache mode the "data" array is used to store one tile */
- char *data;
- /* index of tile currently stored in "data"; -1 if none */
- int currentIndex;
- /* cache related variables */
- int useCache; /* 1 if cache is used */
- void *cache; /* pointer to cache structure */
- int cacheFD; /* file descriptor of cache file -- write mode only */
- char *cacheFileName; /* filename of cache file -- write mode only */
- long cachePosLast; /* position of last entry in cache file -- write */
- /* mode only */
- /* range info */
- struct FPRange range;
- /* some constants stored for efficiency */
- /* number of bytes required to store a single value of "type" */
- int numLengthExtern;
- /* number of bytes required to store a single value of "typeIntern" */
- int numLengthIntern;
- /* see header.c for details */
- int clipX, clipY, clipZ;
- int tileXY, tileSize;
- int nxy, nTiles;
- /* mask related information */
- int useMask; /* 1 if mask is used; 0 otherwise */
- } RASTER3D_Map;
- /*---------------------------------------------------------------------------*/
- typedef struct
- {
- char *elts; /* ptr to array of elts */
- int nofElts; /* size of "elts" */
- int eltSize; /* size of elt in "elts" */
- int *names; /* name[i] is the name of elts[i] */
- char *locks; /* lock[i] == 1 iff elts[i] is locked
- lock[i] == 0 iff elts[i] is unlocked but active
- lock[i] == 2 iff elts[i] doesn't contain valid data */
- int autoLock; /* 1 if auto locking is turned on */
- int nofUnlocked; /* nof tiles which are unlocked */
- int minUnlocked; /* min nof elts which have to remain unlocked. min = 1 */
- int *next, *prev; /* prev/next pointers for fifo */
- int first, last; /* index (into next) of first and last elt in fifo */
- /* first == -1 iff fifo is empty */
- int (*eltRemoveFun) (); /* callback activated if the contents of an
- elt needs to be removed */
- void *eltRemoveFunData; /* pointer to user data passed along with
- eltRemoveFun */
- int (*eltLoadFun) (); /* callback activated to load contents of an elt */
- void *eltLoadFunData; /* pointer to user data passed along with
- eltLoadFun */
- void *hash; /* ptr to hashTable used to relate external names to
- internal indices (elts) */
- } RASTER3D_cache;
- /*---------------------------------------------------------------------------*/
- typedef struct
- {
- int nofNames;
- int *index;
- char *active;
- int lastName;
- int lastIndex;
- int lastIndexActive;
- } Rast3d_cache_hash;
- /*---------------------------------------------------------------------------*/
- /*Structures */
- typedef struct _d_interval
- {
- double low, high;
- int inf;
- struct _d_interval *next;
- } d_Interval;
- typedef struct _d_mask
- {
- d_Interval *list;
- } d_Mask;
- /*---------------------------------------------------------------------------*/
- typedef int write_fn(int, const void *, void *);
- typedef int read_fn(int, void *, void *);
- /*---------------------------------------------------------------------------*/
- /* for storing values of 3D raster block in a flat array */
- typedef struct
- {
- DCELL *array;
- int sx;
- int sy;
- int sz;
- } RASTER3D_Array_double;
- #define RASTER3D_ARRAY_ACCESS(arr, x, y, z) \
- ((arr)->array[(arr)->sx * (arr)->sy * (z) + (arr)->sx * (y) + (x)])
- /*============================== Prototypes ================================*/
- #include <grass/defs/raster3d.h>
- #endif /* #ifndef GRASS_RASTER3D_H */
|