csf.h
来自「支持各种栅格图像和矢量图像读取的库」· C头文件 代码 · 共 362 行
H
362 行
#ifndef INCLUDED_CSF#define INCLUDED_CSF#ifdef CSF_V1# error new include file used while CSF_V1 is defined#endif#ifndef INCLUDED_CSFTYPES#include "csftypes.h"#define INCLUDED_CSFTYPES#endif#ifdef __cplusplus extern "C" {#endif #include <stdio.h>#include "csfattr.h"/*****************************************************************//* *//* RUU CROSS SYSTEM MAP FORMAT *//* VERSION 2 *//*****************************************************************/extern int Merrno; /* declared in csfglob.c *//* CSF_VAR_TYPE can hold every possible *//* data type */typedef REAL8 CSF_VAR_TYPE;/* values for CSF_MAIN_HEADER.mapType : */#define T_RASTER 1/* CSF_FADDR can hold any location in the file * CSF_FADDR is always an offset from the begin * (0) of the file */typedef UINT4 CSF_FADDR32;typedef long CSF_FADDR;/* value for first 27 bytes of MAIN_HEADER.signature */#define CSF_SIG "RUU CROSS SYSTEM MAP FORMAT"#define CSF_SIZE_SIG (sizeof(CSF_SIG)-1)#define CSF_SIG_SPACE ((size_t)32)typedef struct CSF_MAIN_HEADER{ char signature[CSF_SIG_SPACE]; UINT2 version; UINT4 gisFileId; UINT2 projection; CSF_FADDR32 attrTable; UINT2 mapType; UINT4 byteOrder;} CSF_MAIN_HEADER;/******************************************************************//* Definition of the second header *//******************************************************************//* CSF_MAIN_HEADER.mapType decides which structure is *//* used as second header *//******************************************************************//******************************************************************//* Definition of the raster header *//******************************************************************/typedef struct CSF_RASTER_HEADER{ /* see #def's of VS_* */ UINT2 valueScale; /* see #def's of CR_* */ UINT2 cellRepr; /* minVal holds a value equal or less than the * minimum value in the cell matrix */ CSF_VAR_TYPE minVal; /* maxVal holds a value equal or greater than the * maximum value in the cell matrix */ CSF_VAR_TYPE maxVal; /* co-ordinate of upper left corner */ REAL8 xUL; REAL8 yUL; UINT4 nrRows; UINT4 nrCols; /* CSF version 1 problem: X and Y cellsize * could differ, no longer the case * even though cellSizeX and cellSizeY * are stored separate, they should be equal * all apps. are working with square pixels */ REAL8 cellSize; /* was cellSizeX */ REAL8 cellSizeDupl; /* was cellSizeY */ /* new in version 2 * rotation angle of grid */ REAL8 angle; /* remainder is not part of * file header */ /* cosine and sine of * the angle are computed * when opening or creating * the file */ REAL8 angleCos; REAL8 angleSin; CSF_PT projection; /* copy of main header */} CSF_RASTER_HEADER;/*******************************************************************//* mode values *//*******************************************************************//* bit-mapped values: */enum MOPEN_PERM { M_READ=1, /* open read only */ M_WRITE=2, /* open write only */ M_READ_WRITE=3 /* open for both reading and writing */};/****************************************************************//* Error listing return messages *//****************************************************************//* values for errolist *//* happens frequently * assure 0 value * bogs on mingw * # if NOERROR != 0 * # error EXPECT NOERROR TO BE 0 */# define NOERROR 0#define OPENFAILED 1#define NOT_CSF 2#define BAD_VERSION 3#define BAD_BYTEORDER 4#define NOCORE 5#define BAD_CELLREPR 6#define NOACCESS 7#define ROWNR2BIG 8#define COLNR2BIG 9#define NOT_RASTER 10#define BAD_CONVERSION 11#define NOSPACE 12#define WRITE_ERROR 13#define ILLHANDLE 14#define READ_ERROR 15#define BADACCESMODE 16#define ATTRNOTFOUND 17#define ATTRDUPL 18#define ILL_CELLSIZE 19#define CONFL_CELLREPR 20#define BAD_VALUESCALE 21#define XXXXXXXXXXXX 22#define BAD_ANGLE 23#define CANT_USE_AS_BOOLEAN 24#define CANT_USE_WRITE_BOOLEAN 25#define CANT_USE_WRITE_LDD 26#define CANT_USE_AS_LDD 27#define CANT_USE_WRITE_OLDCR 28#define ILLEGAL_USE_TYPE 29/* number of errors */#define ERRORNO 30typedef void (*CSF_CONV_FUNC)(size_t, void *);/* conversion function for reading * and writing */typedef size_t (*CSF_WRITE_FUNC)(void *buf, size_t size, size_t n, FILE *f);typedef size_t (*CSF_READ_FUNC)(void *buf, size_t size, size_t n, FILE *f);typedef struct MAP{ CSF_CONV_FUNC file2app; CSF_CONV_FUNC app2file; UINT2 appCR; CSF_MAIN_HEADER main; CSF_RASTER_HEADER raster; char *fileName; FILE *fp; int fileAccessMode; int mapListId; UINT2 minMaxStatus; CSF_WRITE_FUNC write; CSF_READ_FUNC read;}MAP;typedef CSF_RASTER_HEADER CSF_RASTER_LOCATION_ATTRIBUTES;/************************************************************//* *//* PROTOTYPES OF RUU CSF *//* *//************************************************************/MAP *Rcreate(const char *fileName, size_t nrRows, size_t nrCols, CSF_CR cellRepr, CSF_VS dataType, CSF_PT projection, REAL8 xUL, REAL8 yUL, REAL8 angle, REAL8 cellSize);MAP *Rdup(const char *toFile , const MAP *from, CSF_CR cellRepr, CSF_VS dataType);void *Rmalloc(const MAP *m, size_t nrOfCells);int RuseAs(MAP *m, CSF_CR useType);MAP *Mopen(const char *fname, enum MOPEN_PERM mode);enum MOPEN_PERM MopenPerm(const MAP *m);int Rcompare(const MAP *m1,const MAP *m2);int RgetLocationAttributes( CSF_RASTER_LOCATION_ATTRIBUTES *l, /* fill in this struct */ const MAP *m); /* map handle to copy from */int RcompareLocationAttributes( const CSF_RASTER_LOCATION_ATTRIBUTES *m1, /* */ const CSF_RASTER_LOCATION_ATTRIBUTES *m2); /* */int Mclose(MAP *map);void Merror(int nr);void Mperror(const char *userString);void MperrorExit(const char *userString, int exitCode);const char *MstrError(void);const char *MgetFileName(const MAP *m);void ResetMerrno(void);int RputAllMV(MAP *newMap);size_t RputRow(MAP *map, size_t rowNr, void *buf);size_t RputSomeCells (MAP *map, size_t somePlace, size_t nrCells, void *buf);size_t RputCell(MAP *map, size_t rowNr, size_t colNr, void *cellValue);size_t RgetRow(MAP *map, size_t rowNr, void *buf);size_t RgetSomeCells (MAP *map, size_t somePlace, size_t nrCells, void *buf);size_t RgetCell(MAP *map, size_t rowNr, size_t colNr, void *cellValue);int RputDoNotChangeValues(const MAP *map);int MnativeEndian(const MAP *map);UINT4 MgetMapDataType(const MAP *map);UINT4 MgetVersion(const MAP *map);UINT4 MgetGisFileId(const MAP *map);UINT4 MputGisFileId(MAP *map,UINT4 gisFileId);int IsMVcellRepr(CSF_CR cellRepr, const void *cellValue);int IsMV(const MAP *map, const void *cellValue);CSF_VS RgetValueScale(const MAP *map);CSF_VS RputValueScale(MAP *map, CSF_VS valueScale);int RvalueScaleIs(const MAP *m, CSF_VS vs);int RvalueScale2(CSF_VS vs);CSF_CR RdefaultCellRepr(CSF_VS vs);CSF_CR RgetCellRepr(const MAP *map);CSF_CR RgetUseCellRepr(const MAP *map);int RgetMinVal(const MAP *map, void *minVal);int RgetMaxVal(const MAP *map, void *maxVal);void RputMinVal(MAP *map, const void *minVal);void RputMaxVal(MAP *map, const void *maxVal);void RdontTrackMinMax(MAP *m);REAL8 RgetXUL(const MAP *map);REAL8 RgetYUL(const MAP *map);REAL8 RputXUL(MAP *map, REAL8 xUL);REAL8 RputYUL(MAP *map, REAL8 yUL);/* old names: */#define RgetX0 RgetXUL#define RgetY0 RgetYUL#define RputX0 RputXUL#define RputY0 RputYUL REAL8 RgetAngle(const MAP *map);REAL8 RputAngle(MAP *map, REAL8 Angle);size_t RgetNrCols(const MAP *map);size_t RgetNrRows(const MAP *map);REAL8 RgetCellSize(const MAP *map);REAL8 RputCellSize(MAP *map, REAL8 newCellSize);int RgetCoords( const MAP *m, int inCelPos, size_t row, size_t col, double *x, double *y);int RrowCol2Coords(const MAP *m, double row, double col, double *x, double *y);void RasterRowCol2Coords(const CSF_RASTER_LOCATION_ATTRIBUTES *m,double row, double col, double *x, double *y);CSF_PT MgetProjection(const MAP *map);CSF_PT MputProjection(MAP *map, CSF_PT p);void SetMV(const MAP *m, void *cell);void SetMVcellRepr(CSF_CR cellRepr, void *cell);void SetMemMV(void *dest,size_t nrElements,CSF_CR type);/* historical error, implemented twice * SetArrayMV => SetMemMV */int MattributeAvail(MAP *m, CSF_ATTR_ID id);CSF_ATTR_ID MdelAttribute(MAP *m, CSF_ATTR_ID id);size_t MgetNrLegendEntries(MAP *m);int MgetLegend(MAP *m, CSF_LEGEND *l);int MputLegend(MAP *m, CSF_LEGEND *l, size_t nrEntries);size_t MgetHistorySize(MAP *m);size_t MgetDescriptionSize(MAP *m);size_t MgetNrColourPaletteEntries(MAP *m);size_t MgetNrGreyPaletteEntries(MAP *m);int MgetDescription(MAP *m, char *des);int MgetHistory(MAP *m, char *history);int MgetColourPalette(MAP *m, UINT2 *pal);int MgetGreyPalette(MAP *m, UINT2 *pal);int MputDescription(MAP *m, char *des);int MputHistory(MAP *m, char *history);int MputColourPalette(MAP *m, UINT2 *pal, size_t nrTupels);int MputGreyPalette(MAP *m, UINT2 *pal, size_t nrTupels);int Rcoords2RowCol( const MAP *m, double x, double y, double *row, double *col);void RasterCoords2RowCol( const CSF_RASTER_LOCATION_ATTRIBUTES *m, double x, double y, double *row, double *col);int RasterCoords2RowColChecked( const CSF_RASTER_LOCATION_ATTRIBUTES *m, double x, double y, double *row, double *col);int RgetRowCol(const MAP *m, double x, double y, size_t *row, size_t *col);const char *RstrCellRepr(CSF_CR cr);const char *RstrValueScale(CSF_VS vs);const char *MstrProjection(CSF_PT p);int RgetValueScaleVersion(const MAP *m);void RcomputeExtend(REAL8 *xUL, REAL8 *yUL, size_t *nrRows, size_t *nrCols, double x_1, double y_1, double x_2, double y_2, CSF_PT projection, REAL8 cellSize, double rounding);#ifdef __cplusplus }#endif /* INCLUDED_CSF */#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?