📄 landclass_obj.c
字号:
#include <assert.h>#include <stdio.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include "ugm_defines.h"#include "ugm_macros.h"#include "landclass_obj.h"#include "scenario_obj.h"#include "globals.h"#include "grid_obj.h"#include "memory_obj.h"#include "utilities.h"/*****************************************************************************\********************************************************************************* **** MACROS **** *********************************************************************************\*****************************************************************************//*****************************************************************************\********************************************************************************* **** SCCS ID **** *********************************************************************************\*****************************************************************************/char landclass_obj_c_sccs_id[] = "@(#)landclass_obj.c 1.84 12/4/00";/*****************************************************************************\********************************************************************************* **** STATIC MEMORY FOR THIS OBJECT **** *********************************************************************************\*****************************************************************************/static Classes class_indices[MAX_NUM_CLASSES];static int new_indices[MAX_NEW_INDICES];static Classes landuse_classes[MAX_NUM_CLASSES];static int urban_code;static int num_landclasses;static char filename[MAX_FILENAME_LEN];static int max_landclass_num;static int num_reduced_classes;static char annual_prob_filename[MAX_FILENAME_LEN];static BOOLEAN ugm_read;/*****************************************************************************\********************************************************************************* **** STATIC FUNCTION PROTOTYPES **** *********************************************************************************\*****************************************************************************/static int landclass_process_user_color (char *string2process);static void landclass_SetMaxLandclassNum ();static void landclass_SetUrbanCode ();static void landclass_MapLandclassNum_2_idx ();static void landclass_CreateReducedClasses ();/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_MemoryLog** PURPOSE: log memory locations onto FILE* fp** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/void landclass_MemoryLog (FILE * fp){ LOG_MEM (fp, &class_indices[0], sizeof (Classes), MAX_NUM_CLASSES); LOG_MEM (fp, &new_indices[0], sizeof (int), MAX_NEW_INDICES); LOG_MEM (fp, &landuse_classes[0], sizeof (Classes), MAX_NUM_CLASSES); LOG_MEM (fp, &urban_code, sizeof (int), 1); LOG_MEM (fp, &num_landclasses, sizeof (int), 1); LOG_MEM_CHAR_ARRAY (fp, &filename, sizeof (char), MAX_FILENAME_LEN); LOG_MEM (fp, &max_landclass_num, sizeof (int), 1); LOG_MEM (fp, &num_reduced_classes, sizeof (int), 1); LOG_MEM_CHAR_ARRAY (fp, &annual_prob_filename, sizeof (char), MAX_FILENAME_LEN); LOG_MEM (fp, &ugm_read, sizeof (int), 1);}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetReducedClassesPtr** PURPOSE: return ptr to class_indices** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/Classes * landclass_GetReducedClassesPtr (){ return class_indices;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetClassesPtr** PURPOSE: return ptr to landuse_classes** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/Classes * landclass_GetClassesPtr (){ return landuse_classes;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetNewIndicesPtr** PURPOSE: return ptr to new_indices** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/int * landclass_GetNewIndicesPtr (){ return new_indices;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetUrbanCode** PURPOSE: return the urban code** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/int landclass_GetUrbanCode (){ return urban_code;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetNumLandclasses** PURPOSE: return num_landclasses** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/int landclass_GetNumLandclasses (){ return num_landclasses;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetNumReducedclasses** PURPOSE: return num_reduced_classes** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/int landclass_GetNumReducedclasses (){ return num_reduced_classes;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetMaxLandclasses** PURPOSE: return max_landclass_num** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/int landclass_GetMaxLandclasses (){ return max_landclass_num;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetClassNum** PURPOSE: return landclass num for a given index** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/int landclass_GetClassNum (int i){ return landuse_classes[i].num;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_IsAlandclass** PURPOSE: test if val is a landclass value** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/BOOLEAN landclass_IsAlandclass (int val){ char func[] = "landclass_IsAlandclass"; BOOLEAN rv = FALSE; int i; if (!ugm_read) { sprintf (msg_buf, "landclasses file has not been read yet!"); LOG_ERROR (msg_buf); EXIT (1); } for (i = 0; i < num_landclasses; i++) { if (landuse_classes[i].num == val) rv = TRUE; } return rv;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetClassIDX** PURPOSE: return idx for a given index** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/int landclass_GetClassIDX (int i){ return landuse_classes[i].idx;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetClassColor** PURPOSE: return color val for given landclass** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/int landclass_GetClassColor (int i){ return landuse_classes[i].red * 256 * 256 + landuse_classes[i].green * 256 + landuse_classes[i].blue;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetClassEXC** PURPOSE: is this an excluded class** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/BOOLEAN landclass_GetClassEXC (int i){ return landuse_classes[i].EXC;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetClassTrans** PURPOSE: is this a transition class** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/BOOLEAN landclass_GetClassTrans (int i){ return landuse_classes[i].trans;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetReducedNum** PURPOSE: return class num for given class_indices index** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/int landclass_GetReducedNum (int i){ return class_indices[i].num;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetReducedIDX** PURPOSE: return idx for a given class_indices index** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/int landclass_GetReducedIDX (int i){ return class_indices[i].idx;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetReducedColor** PURPOSE: return color for given class_indices index** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/int landclass_GetReducedColor (int i){ return class_indices[i].red * 256 * 256 + class_indices[i].green * 256 + class_indices[i].blue;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetReducedEXC** PURPOSE: is class at class_indices[i] excluded** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/BOOLEAN landclass_GetReducedEXC (int i){ return class_indices[i].EXC;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_GetReducedTrans** PURPOSE: is this a transition class** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/BOOLEAN landclass_GetReducedTrans (int i){ return class_indices[i].trans;}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_AnnualProbInit** PURPOSE: initializes the annual_class_probabilities file with 0's** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/void landclass_AnnualProbInit (){ char func[] = "landclass_AnnualProbInit"; FILE *fp; int i; int num_pixels; int num_written; int zero = 0; sprintf (annual_prob_filename, "%sannual_class_probabilities_%u", scen_GetOutputDir (), glb_mype); FILE_OPEN (fp, annual_prob_filename, "wb"); num_pixels = mem_GetTotalPixels () * landclass_GetNumLandclasses (); for (i = 0; i < num_pixels; i++) { num_written = fwrite (&zero, sizeof (PIXEL), 1, fp); if (num_written != 1) { sprintf (msg_buf, "Unable to write to file: %s", annual_prob_filename); LOG_ERROR (msg_buf); sprintf (msg_buf, "%s", strerror (errno)); LOG_ERROR (msg_buf); EXIT (1); } } if (scen_GetLogFlag ()) { scen_Append2Log (); if (scen_GetLogWritesFlag ()) { fprintf (scen_GetLogFP (), "%s %u %u zeroes written to %s\n", __FILE__, __LINE__, num_pixels, annual_prob_filename); } scen_CloseLog (); } fclose (fp);}/*************************************************************************************************************************************************************** FUNCTION NAME: landclass_AnnualProbUpdate** PURPOSE: update the annual_prob_filename** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/void landclass_AnnualProbUpdate (GRID_P land1_ptr){ char func[] = "landclass_AnnualProbUpdate"; FILE *fp; int total_pixels; int i; int cc; int rc; int offset; fpos_t pos_ptr; GRID_P current_class_ptr; if (!scen_GetDoingLanduseFlag ()) { return; } current_class_ptr = mem_GetWGridPtr (__FILE__, func, __LINE__); total_pixels = mem_GetTotalPixels (); if (scen_GetLogFlag ()) { scen_Append2Log (); if (scen_GetLogWritesFlag ()) { fprintf (scen_GetLogFP (), "%s %u updating file %s\n", __FILE__, __LINE__, annual_prob_filename); } scen_CloseLog (); } FILE_OPEN (fp, annual_prob_filename, "r+b"); for (cc = 0; cc < landclass_GetNumLandclasses (); cc++) { offset = cc * total_pixels * sizeof (PIXEL); rc = fseek (fp, offset, SEEK_SET); if (rc != 0) { printf ("%s %u ERROR\n", __FILE__, __LINE__); EXIT (1); } rc = fgetpos (fp, &pos_ptr); if (rc != 0) { printf ("%s %u ERROR\n", __FILE__, __LINE__); EXIT (1); } rc = fread (current_class_ptr, total_pixels * sizeof (PIXEL), 1, fp);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -