/* weather.c -- plots NOAA Weather data * Copyright (C) 1998, 1999 FastIO Systems, All Rights Reserved. * For conditions of use, license, and distribution, see LICENSE.txt or LICENSE.pdf. cc -Wall -o weather -I/usr/local/include weather.c -lcpdfpm 1999-08-22 [io] for ver 2.00 1998 [io] original version */ #include #include #include #include /* #include */ #include #define CITYNAME "OAKLAND" #define MAXDATA 1500 char *tempUnit[] = { "degrees F", "degrees C", "" }; /* Some plot data and globals for settings */ /* --------------------------------------------------------------------------- */ static int Ndata = 0; /* # data points */ static float temp[MAXDATA]; /* temp F */ static float humidity[MAXDATA]; static struct tm xtime[MAXDATA]; static struct tm axStart, axEnd, recStart, recEnd; static CPDFaxis *tAxis; static char sky[128]; /* --------------------------------------------------------------------------- */ void plot_temp(CPDFdoc *pdf, int useC); void plot_rHumidity(CPDFdoc *pdf); void do_TextStuff(CPDFdoc *pdf, int useC); int read_datafile(char *gafile, int useC); void plot_temp(CPDFdoc *pdf, int useC) { int i; float vtmax= -999.0, vtmin = 9999.0; float recmin = 50.0, recmax = 100.0; float xt; CPDFplotDomain *tempDomain, *oldDomain; CPDFaxis *yAxis; /* get data max and min values */ for(i=0; i vtmax) vtmax = temp[i]; if(temp[i] < vtmin) vtmin = temp[i]; } cpdf_suggestMinMaxForLinearDomain(vtmin, vtmax, &recmin, &recmax); /* recmin = vtmin; */ /* recmax = vtmax; */ /* fprintf(stderr, "(%g, %g) -->rec axis min,max = (%g, %g)\n", vtmax, vtmin, recmin, recmax); */ memcpy(&axStart, &xtime[0], sizeof(struct tm)); axStart.tm_sec = 0; axStart.tm_min = 0; axStart.tm_hour = 0; mktime(&axStart); /* this rebuilds all the fields */ memcpy(&axEnd, &xtime[Ndata-1], sizeof(struct tm)); axEnd.tm_sec = 0; axEnd.tm_min = 0; axEnd.tm_hour = 0; axEnd.tm_mday++; mktime(&axEnd); /* this rebuilds all the fields */ cpdf_suggestTimeDomainParams(&axStart, &axEnd, &recStart, &recEnd); tempDomain = cpdf_createTimePlotDomain( 1.7*inch, 5.5*inch, 6.0*inch, 2.5*inch, &recStart, &recEnd, recmin, recmax, TIME, LINEAR, 0); oldDomain = cpdf_setPlotDomain(pdf, tempDomain); /* save oldDomain for later restore */ if(useC) cpdf_setLinearMeshParams(tempDomain, Y_MESH, recmin, 5.0, recmin, 1.0); else cpdf_setLinearMeshParams(tempDomain, Y_MESH, recmin, 10.0, recmin, 5.0); cpdf_fillDomainWithRGBcolor(tempDomain, 1.0, 0.9, 0.9); /* color of domain: light pink */ cpdf_drawMeshForDomain(tempDomain); cpdf_setgray(pdf, 0.0); /* X-Axis --------------------------------------------------------------------------------- */ tAxis = cpdf_createTimeAxis(0.0, 6.0*inch, TIME, &recStart, &recEnd); cpdf_attachAxisToDomain(tAxis, tempDomain, 0.0, -0.2*inch ); cpdf_setTimeAxisNumberFormat(tAxis, MONTH_NAME, YEAR_2DIGIT, "Helvetica", 12.0); /* YEAR_FULL for 1998 or YEAR_2DIGIT for 98 */ cpdf_setAxisLabel(tAxis, "Date", "Times-Roman", "MacRomanEncoding", 16.0); cpdf_drawAxis(tAxis); /* cpdf_freeAxis(tAxis); */ /* we use it again for plotting other things */ /* Y-Axis --------------------------------------------------------------------------------- */ yAxis = cpdf_createAxis(90.0, 2.5*inch, LINEAR, recmin, recmax); cpdf_attachAxisToDomain(yAxis, tempDomain, -0.2*inch, 0.0); /* give a little X offset left */ cpdf_setAxisNumberFormat(yAxis, "%.f", "Helvetica", 12.0); if(useC) cpdf_setAxisLabel(yAxis, "Temperature [degrees C]", "Times-Roman", "MacRomanEncoding", 16.0); else cpdf_setAxisLabel(yAxis, "Temperature [degrees F]", "Times-Roman", "MacRomanEncoding", 16.0); if(useC) cpdf_setLinearAxisParams(yAxis, recmin, 5.0, recmin, 1.0); else cpdf_setLinearAxisParams(yAxis, recmin, 10.0, recmin, 5.0); cpdf_drawAxis(yAxis); cpdf_freeAxis(yAxis); /* Do the tuning curve first */ cpdf_comments(pdf, "\n%% plot the temperature curve.\n"); cpdf_setlinewidth(pdf, 1.5); cpdf_setrgbcolorStroke(pdf, 1.0, 0.0, 0.0); /* red */ for(i=0; i vtmax) vtmax = humidity[i]; if(humidity[i] < vtmin) vtmin = humidity[i]; } /* recmin = vtmin; */ /* recmax = vtmax; */ cpdf_suggestMinMaxForLinearDomain(vtmin, vtmax, &recmin, &recmax); /* fprintf(stderr, "rec axis min=%g, max=%g\n", recmin, recmax); */ cpdf_suggestTimeDomainParams(&axStart, &axEnd, &recStart, &recEnd); rhDomain = cpdf_createTimePlotDomain( 1.7*inch, 1.7*inch, 6.0*inch, 2.5*inch, &recStart, &recEnd, recmin, recmax, TIME, LINEAR, 0); oldDomain = cpdf_setPlotDomain(pdf, rhDomain); /* save oldDomain for later restore */ cpdf_setLinearMeshParams(rhDomain, Y_MESH, recmin, 10.0, recmin, 5.0); cpdf_fillDomainWithRGBcolor(rhDomain, 1.0, 0.9, 0.9); /* color of domain: light pink */ cpdf_drawMeshForDomain(rhDomain); cpdf_setgray(pdf, 0.0); /* X-Axis - we already have the time axis for temp plot ----------------------------------- */ /* tAxis = cpdf_createTimeAxis(0.0, 6.0*inch, TIME, &recStart, &recEnd); */ cpdf_attachAxisToDomain(tAxis, rhDomain, 0.0, -0.2*inch ); /* cpdf_setTimeAxisNumberFormat(tAxis, MONTH_NAME, YEAR_2DIGIT, "Helvetica", 12.0); */ /* YEAR_FULL for 1998 or YEAR_2DIGIT for 98 */ /* cpdf_setAxisLabel(tAxis, "Date", "Times-Roman", "MacRomanEncoding", 16.0); */ cpdf_drawAxis(tAxis); cpdf_freeAxis(tAxis); /* we are done, no more use */ /* Y-Axis --------------------------------------------------------------------------------- */ yAxis = cpdf_createAxis(90.0, 2.5*inch, LINEAR, recmin, recmax); cpdf_attachAxisToDomain(yAxis, rhDomain, -0.2*inch, 0.0); /* give a little X offset left */ cpdf_setAxisNumberFormat(yAxis, "%.f", "Helvetica", 12.0); cpdf_setAxisLabel(yAxis, "Humidity [%]", "Times-Roman", "MacRomanEncoding", 16.0); cpdf_setLinearAxisParams(yAxis, recmin, 10.0, recmin, 5.0); cpdf_drawAxis(yAxis); cpdf_freeAxis(yAxis); /* Do the tuning curve first */ cpdf_comments(pdf, "\n%% plot the humidity curve.\n"); cpdf_setlinewidth(pdf, 1.5); cpdf_setrgbcolorStroke(pdf, 0.0, 0.0, 1.0); /* blue */ for(i=0; i