⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ptapi.c

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 C
📖 第 1 页 / 共 5 页
字号:
	    /* Check for empty fields */	    /* ---------------------- */	    if (slen[i] == 0)	    {		status = -1;		HEpush(DFE_GENAPP, "PTdeflevel", __FILE__, __LINE__);		HEreport("\"Empty\" field in fieldlist: %s.\n",			 fieldlist);		break;	    }	    /* Check fieldname for length */	    /* -------------------------- */	    memcpy(utlbuf, pntr[i], slen[i]);	    utlbuf[slen[i]] = 0;	    if (slen[i] > FIELDNAMELENMAX)	    {		status = -1;		HEpush(DFE_GENAPP, "PTdeflevel", __FILE__, __LINE__);		HEreport("Fieldname \"%s\" more than %d characters.\n",			 utlbuf, FIELDNAMELENMAX);	    }	}	/* If no problems proceed ... */	/* -------------------------- */	if (status == 0)	{	    /* Get Data Vgroup ID */	    /* ------------------ */	    vgid = PTXPoint[pID].VIDTable[0];	    /* Get number of levels in point */	    /* ----------------------------- */	    nlevels = Vntagrefs(vgid);	    /* Get new vdata ID */	    /* ---------------- */	    vdataID = VSattach(fid, -1, "w");	    /* Store Vdata ID in external array */	    /* -------------------------------- */	    PTXPoint[pID].vdID[nlevels] = vdataID;	    /* For all fields in fieldlist ... */	    /* ------------------------------- */	    for (i = 0; i < nfields; i++)	    {		/* Copy fieldname into utlbuf */		/* -------------------------- */		memcpy(utlbuf, pntr[i], slen[i]);		utlbuf[slen[i]] = 0;		/* Get field order (change order = 0 to order = 1) */		/* ----------------------------------------------- */		order = fieldorder[i];		if (order == 0)		{		    order = 1;		}		/* Define the field within vdata */		/* ----------------------------- */		status = VSfdefine(vdataID, utlbuf, fieldtype[i], order);		if(status != 0)		{		    status = -1;		    HEpush(DFE_GENAPP, "PTdeflevel", __FILE__, __LINE__);		    HEreport("Cannot define %d th field. One probable cause can be exceeding of HDF's limits for MAX_ORDER and/or MAX_FIELD_SIZE \"%d\".\n",i+1,MAX_ORDER);		    break;		}	    }	    if(status == 0)	    {		/* Set all fields within vdata */		/* --------------------------- */		status = VSsetfields(vdataID, fieldlist);		if(status != 0)		{		    status = -1;		    HEpush(DFE_GENAPP, "PTdeflevel", __FILE__, __LINE__);		    HEreport("Cannot set fields. Probably exceeded HDF's limit MAX_FIELD_SIZE \"%d\" for the fields.\n",MAX_FIELD_SIZE);		}  	    }	    if(status == 0)	    {		/* Get size in bytes of vdata record */		/* --------------------------------- */		size = VSsizeof(vdataID, fieldlist);		if(size <= 0)		{		    status = -1;		    HEpush(DFE_GENAPP, "PTdeflevel", __FILE__, __LINE__);		    HEreport("Size of Vdata is not greater than zero.\n");		}  	    } 	    if(status == 0)	    {		/* Write out empty buffer to establish vdata */		/* ----------------------------------------- */		zerobuf = (char *) calloc(size, 1);		if(zerobuf == NULL)		{ 		    HEpush(DFE_NOSPACE,"PTdeflevel", __FILE__, __LINE__);		    return(-1);		}		VSwrite(vdataID, (VOIDP) zerobuf, 1, FULL_INTERLACE);		free(zerobuf);						/* Set name of vdata to levelname */		/* ------------------------------ */		VSsetname(vdataID, levelname);						/* Insert within data Vgroup */		/* ------------------------- */		Vinsert(vgid, vdataID);								/* Setup Back & Forward Pointer Vdatas */		/* ----------------------------------- */				/* If previous levels exist ... */		/* ---------------------------- */		if (nlevels > 0)		{		    /* Get Vgroup ID of Linkage Vgroup */		    /* ------------------------------- */		    vgid = PTXPoint[pID].VIDTable[1];		    		    		    /* Get new vdata ID for BCKPOINTER Vdata */		    /* ------------------------------------- */		    vdataID = VSattach(fid, -1, "w");		    		    		    /* Define & set BCKPOINTER field within BCKPOINTER Vdata */		    /* ----------------------------------------------------- */		    VSfdefine(vdataID, "BCKPOINTER", DFNT_INT32, 1);		    VSsetfields(vdataID, "BCKPOINTER");		    		    		    /* Get size in bytes of BCKPOINTER record */		    /* -------------------------------------- */		    size = VSsizeof(vdataID, "BCKPOINTER");		    		    		    /* Write out empty buffer to establish vdata */		    /* ----------------------------------------- */		    zerobuf = (char *) calloc(size, 1);		    if(zerobuf == NULL)		    { 			HEpush(DFE_NOSPACE,"PTdeflevel", __FILE__, __LINE__);			return(-1);		    }		    VSwrite(vdataID, (VOIDP) zerobuf, 1, FULL_INTERLACE);		    free(zerobuf);		    		    		    /* Set name of BCKPOINTER Vdata */		    /* ---------------------------- */		    sprintf(utlbuf, "%s%d%s%d", "BCKPOINTER:", nlevels,			    "->", nlevels - 1);		    VSsetname(vdataID, utlbuf);		    		    		    /* Insert BCKPOINTER Vdata in Linkage Vgroup */		    /* ----------------------------------------- */		    Vinsert(vgid, vdataID);		    		    		    /* Detach BCKPOINTER Vdata */		    /* ----------------------- */		    VSdetach(vdataID);		    		    		    /* Get new vdata ID for FWDPOINTER Vdata */		    /* ------------------------------------- */		    vdataID = VSattach(fid, -1, "w");		    		    		    /* Define & set BEGIN & EXTENT field within FWDPOINTER		       Vdata */		    /* ------------------------------------------------- */		    VSfdefine(vdataID, "BEGIN", DFNT_INT32, 1);		    VSfdefine(vdataID, "EXTENT", DFNT_INT32, 1);		    VSsetfields(vdataID, "BEGIN,EXTENT");		    		    		    /* Get size in bytes of FWDPOINTER record */		    /* -------------------------------------- */		    size = VSsizeof(vdataID, "BEGIN,EXTENT");		    		    		    /* Write out buffer (with -1 fill value) to establish 		       vdata */		    /* ------------------------------------------------- */		    zerobuf = (char *) calloc(size, 1);		    if(zerobuf == NULL)		    { 			HEpush(DFE_NOSPACE,"PTdeflevel", __FILE__, __LINE__);			return(-1);		    }		    memcpy(zerobuf, &m1, 4);		    VSwrite(vdataID, (VOIDP) zerobuf, 1, FULL_INTERLACE);		    free(zerobuf);		    		    		    /* Set name of FWDPOINTER Vdata */		    /* ---------------------------- */		    sprintf(utlbuf, "%s%d%s%d", "FWDPOINTER:", nlevels - 1,			    "->", nlevels);		    VSsetname(vdataID, utlbuf);		    		    		    /* Insert FWDPOINTER Vdata in Linkage Vgroup */		    /* ----------------------------------------- */		    Vinsert(vgid, vdataID);		    		    		    /* Detach FWDPOINTER Vdata */		    /* ----------------------- */		    VSdetach(vdataID);		}	    }	}	if (status == 0)	{	    /* Insert Point Level metadata */	    /* --------------------------- */	    Vgetname(PTXPoint[pointID % idOffset].IDTable, pointname);	    status = EHinsertmeta(sdInterfaceID, pointname, "p", 10L,				  levelname, &dum);	    for (i = 0; i < nfields; i++)	    {		/* Concatenate fieldname with level name */		/* ------------------------------------- */		memcpy(utlbuf, pntr[i], slen[i]);		utlbuf[slen[i]] = 0;		strcat(utlbuf, ":");		strcat(utlbuf, levelname);		/* Get field order (change order = 0 to order = 1) */		/* ----------------------------------------------- */		order = fieldorder[i];		if (order == 0)		{		    order = 1;		}		/* Load fieldtype and field order into metadata input array */		/* -------------------------------------------------------- */		metadata[0] = fieldtype[i];		metadata[1] = order;		/* Insert point field metadata */		/* --------------------------- */		status = EHinsertmeta(sdInterfaceID, pointname, "p", 11L,				      utlbuf, metadata);	    }	}    }    return (status);}/*----------------------------------------------------------------------------||  BEGIN_PROLOG                                                               ||                                                                             ||  FUNCTION: PTdeflinkage                                                     ||                                                                             ||  DESCRIPTION: Defines link field to use between two levels.                 ||                                                                             ||                                                                             ||  Return Value    Type     Units     Description                             ||  ============   ======  =========   =====================================   ||  status         intn                return status (0) SUCCEED, (-1) FAIL    ||                                                                             ||  INPUTS:                                                                    ||  pointID        int32               point structure ID                      ||  parent         char                parent level name                       ||  child          char                child level name                        ||  linkfield      char                linkage field name                      ||                                                                             ||                                                                             ||  OUTPUTS:                                                                   ||             None                                                            ||                                                                             ||  NOTES:                                                                     ||                                                                             ||                                                                             ||   Date     Programmer   Description                                         ||  ======   ============  =================================================   ||  Jun 96   Joel Gales    Original Programmer                                 ||  Nov 96   Joel Gales    Fix problem with spurious "Level Not Found" error   ||                                                                             ||  END_PROLOG                                                                 |-----------------------------------------------------------------------------*/intnPTdeflinkage(int32 pointID, char *parent, char *child, char *linkfield){    intn            i;		/* Loop index */    intn            status = 0;	/* routine return status variable */    int32           fid;	/* HDF-EOS file id */    int32           sdInterfaceID;	/* HDF SDS interface ID */    int32           idOffset = PTIDOFFSET;	/* Point ID offset */    int32           ptVgrpID;	/* Point Vgroup ID */    int32           nlevels;	/* Number of levels in point */    int32           vdataID;	/* Vdata ID */    int32           dum;	/* Dummy variable */    int32           foundParent = -1;	/* Found parent level flag */    int32           foundChild = -1;	/* Found child level flag */    char            pointname[80];	/* Point name */    char            utlbuf[256];/* Utility buffer */    char           *mess1 =    "Linkage Field \"%s\" not found in Parent Level: \"%s\".\n";    char           *mess2 =    "Linkage Field \"%s\" not found in Child Level: \"%s\".\n";    /* Check for valid point ID */    /* ----

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -