31#include <wx/datetime.h>
35#include "tc_error_code.h"
51#define M_PI 3.141592654
54#define TIDE_MAX_DERIV (2)
58#define TIDE_TIME_PREC (15)
64#define TIDE_BLEND_TIME (3600)
70#define TIDE_TIME_STEP (TIDE_TIME_PREC)
71#define TIDE_BAD_TIME ((time_t) - 1)
94 TC_Error_Code LoadDataSources(std::vector<std::string> &sources);
95 std::vector<std::string> GetDataSet() {
return m_sourcefile_array; }
97 bool IsReady() {
return bTCMReady; }
99 bool GetTideOrCurrent(time_t t,
int idx,
float &value,
float &dir);
100 bool GetTideOrCurrentMeters(time_t t,
int idx,
float &value,
float &dir);
101 bool GetTideOrCurrent15(time_t t,
int idx,
float &tcvalue,
float &dir,
103 bool GetTideFlowSens(time_t t,
int sch_step,
int idx,
float &tcvalue_now,
104 float &tcvalue_prev,
bool &w_t);
105 void GetHightOrLowTide(time_t t,
int sch_step_1,
int sch_step_2,
106 float tide_val,
bool w_t,
int idx,
float &tcvalue,
109 int GetStationTimeOffset(
IDX_entry *pIDX);
110 int GetNextBigEvent(time_t *tm,
int idx);
111 std::wstring GetTidalEventStr(
int station_id, wxDateTime ref_dt,
double lat,
112 double lon,
int dt_type);
116 const IDX_entry *GetIDX_entry(
int index)
const;
118 int Get_max_IDX()
const {
return m_Combined_IDX_array.size() - 1; }
120 std::map<double, const IDX_entry *> GetStationsForLL(
double xlat,
123 int GetStationIDXbyName(
const wxString &prefix,
double xlat,
125 int GetStationIDXbyNameType(
const wxString &prefix,
double xlat,
double xlon,
127 void ScrubCurrentDepths();
138 wxString pmru_file_name;
140 ArrayOfTCDSources m_source_array;
141 std::vector<std::string> m_sourcefile_array;
143 std::vector<IDX_entry *> m_Combined_IDX_array;
149#ifndef __OAML_TIDES_H__
150#define __OAML_TIDES_H__
174#include <sys/types.h>
179#define NV_BYTE int8_t
180#define NV_INT16 int16_t
181#define NV_INT32 int32_t
182#define NV_INT64 int64_t
183#define NV_U_BYTE uint8_t
184#define NV_U_INT16 uint16_t
185#define NV_U_INT32 uint32_t
186#define NV_U_INT64 uint64_t
188#define NV_BYTE unsigned char
189#define NV_INT16 short
192#define NV_U_BYTE unsigned char
193#define NV_U_INT16 unsigned short
194#define NV_U_INT32 unsigned int
195#define NV_U_INT64 unsigned long
200#define NV_BOOL unsigned char
202#define NV_U_CHAR unsigned char
203#define NV_FLOAT32 float
204#define NV_FLOAT64 double
209#define NV_U_INT32_MAX 4294967295
210#define NV_INT32_MAX 2147483647
211#define NV_U_INT16_MAX 65535
212#define NV_INT16_MAX 32767
214#define LIBTCD_VERSION "PFM Software - libtcd v2.2.5 - 2010-08-17"
215#define LIBTCD_MAJOR_REV 2
216#define LIBTCD_MINOR_REV 2
229#undef USE_PRAGMA_MESSAGE
232#ifdef USE_PRAGMA_MESSAGE
233#pragma message("WARNING: COMPAT114 is enabled! See libtcd.html.")
235#warning COMPAT114 is enabled! See libtcd.html.
242#define ONELINER_LENGTH 90
244#define MONOLOGUE_LENGTH 10000
245#define MAX_CONSTITUENTS 255
255 NV_CHAR version[ONELINER_LENGTH];
256 NV_U_INT32 major_rev;
257 NV_U_INT32 minor_rev;
258 NV_CHAR last_modified[ONELINER_LENGTH];
259 NV_U_INT32 number_of_records;
261 NV_U_INT32 number_of_years;
262 NV_U_INT32 constituents;
263 NV_U_INT32 level_unit_types;
264 NV_U_INT32 dir_unit_types;
265 NV_U_INT32 restriction_types;
266 NV_U_INT32 datum_types;
267 NV_U_INT32 countries;
269 NV_U_INT32 legaleses;
272 NV_U_INT32 pedigree_types;
278enum TIDE_RECORD_TYPE { REFERENCE_STATION = 1, SUBORDINATE_STATION = 2 };
281 NV_INT32 record_number;
282 NV_U_INT32 record_size;
283 NV_U_BYTE record_type;
285 NV_FLOAT64 longitude;
286 NV_INT32 reference_station;
288 NV_CHAR name[ONELINER_LENGTH];
298 NV_CHAR source[ONELINER_LENGTH];
299 NV_U_BYTE restriction;
300 NV_CHAR comments[MONOLOGUE_LENGTH];
301 NV_CHAR notes[MONOLOGUE_LENGTH];
303 NV_CHAR station_id_context[ONELINER_LENGTH];
304 NV_CHAR station_id[ONELINER_LENGTH];
305 NV_U_INT32 date_imported;
306 NV_CHAR xfields[MONOLOGUE_LENGTH];
307 NV_U_BYTE direction_units;
308 NV_INT32 min_direction;
309 NV_INT32 max_direction;
310 NV_U_BYTE level_units;
313 NV_FLOAT32 datum_offset;
315 NV_INT32 zone_offset;
316 NV_U_INT32 expiration_date;
317 NV_U_INT16 months_on_station;
318 NV_U_INT32 last_date_on_station;
319 NV_U_BYTE confidence;
320 NV_FLOAT32 amplitude[MAX_CONSTITUENTS];
321 NV_FLOAT32 epoch[MAX_CONSTITUENTS];
324 NV_INT32 min_time_add;
325 NV_FLOAT32 min_level_add;
326 NV_FLOAT32 min_level_multiply;
327 NV_INT32 max_time_add;
328 NV_FLOAT32 max_level_add;
329 NV_FLOAT32 max_level_multiply;
330 NV_INT32 flood_begins;
337 NV_U_BYTE avg_level_units;
338 NV_FLOAT32 min_avg_level;
339 NV_FLOAT32 max_avg_level;
350#define NULLSLACKOFFSET 0xA00
354#define AMPLITUDE_EPSILON 0.00005
357#define NINT(a) ((a) < 0.0 ? (NV_INT32)((a) - 0.5) : (NV_INT32)((a) + 0.5))
369const NV_CHAR *get_country(NV_INT32 num);
370const NV_CHAR *get_tzfile(NV_INT32 num);
371const NV_CHAR *get_level_units(NV_INT32 num);
372const NV_CHAR *get_dir_units(NV_INT32 num);
373const NV_CHAR *get_restriction(NV_INT32 num);
374const NV_CHAR *get_datum(NV_INT32 num);
375const NV_CHAR *get_legalese(NV_INT32 num);
380const NV_CHAR *get_constituent(NV_INT32 num);
385const NV_CHAR *get_station(NV_INT32 num);
389NV_FLOAT64 get_speed(NV_INT32 num);
394NV_FLOAT32 get_equilibrium(NV_INT32 num, NV_INT32 year);
395NV_FLOAT32 get_node_factor(NV_INT32 num, NV_INT32 year);
402NV_FLOAT32 *get_equilibriums(NV_INT32 num);
403NV_FLOAT32 *get_node_factors(NV_INT32 num);
410NV_INT32 get_time(
const NV_CHAR *
string);
411NV_CHAR *ret_time(NV_INT32 time);
412NV_CHAR *ret_time_neat(NV_INT32 time);
419NV_CHAR *ret_date(NV_U_INT32 date);
425NV_INT32 search_station(
const NV_CHAR *
string);
429NV_INT32 find_station(
const NV_CHAR *name);
430NV_INT32 find_tzfile(
const NV_CHAR *name);
431NV_INT32 find_country(
const NV_CHAR *name);
432NV_INT32 find_level_units(
const NV_CHAR *name);
433NV_INT32 find_dir_units(
const NV_CHAR *name);
434NV_INT32 find_restriction(
const NV_CHAR *name);
435NV_INT32 find_datum(
const NV_CHAR *name);
436NV_INT32 find_constituent(
const NV_CHAR *name);
437NV_INT32 find_legalese(
const NV_CHAR *name);
460void set_speed(NV_INT32 num, NV_FLOAT64 value);
465void set_equilibrium(NV_INT32 num, NV_INT32 year, NV_FLOAT32 value);
466void set_node_factor(NV_INT32 num, NV_INT32 year, NV_FLOAT32 value);
472NV_BOOL open_tide_db(
const NV_CHAR *file);
480NV_BOOL create_tide_db(
const NV_CHAR *file, NV_U_INT32 constituents,
481 NV_CHAR
const *
const constituent[],
482 const NV_FLOAT64 *speed, NV_INT32 start_year,
483 NV_U_INT32 num_years,
484 NV_FLOAT32
const *
const equilibrium[],
485 NV_FLOAT32
const *
const node_factor[]);
503NV_INT32 get_nearest_partial_tide_record(NV_FLOAT64 lat, NV_FLOAT64 lon,
510NV_INT32 read_tide_record(NV_INT32 num,
TIDE_RECORD *rec);
526NV_BOOL update_tide_record(NV_INT32 num,
TIDE_RECORD *rec);
528NV_BOOL update_tide_record(NV_INT32 num,
TIDE_RECORD *rec,
543#define NAME_LENGTH ONELINER_LENGTH
544#define SOURCE_LENGTH ONELINER_LENGTH
545#define COMMENTS_LENGTH MONOLOGUE_LENGTH
546NV_CHAR *get_pedigree(NV_INT32 num);
547NV_INT32 find_pedigree(
const NV_CHAR *name);
604#ifndef __TIDE_HEADER__
605#define __TIDE_HEADER__
610 const NV_CHAR *keyphrase;
611 const NV_CHAR *datatype;
621 NV_CHAR **constituent;
623 NV_FLOAT32 **equilibrium;
624 NV_FLOAT32 **node_factor;
625 NV_CHAR **level_unit;
627 NV_CHAR **restriction;
632 NV_U_INT32 header_size;
633 NV_U_INT32 speed_bits;
634 NV_U_INT32 speed_scale;
635 NV_INT32 speed_offset;
636 NV_U_INT32 equilibrium_bits;
637 NV_U_INT32 equilibrium_scale;
638 NV_INT32 equilibrium_offset;
639 NV_U_INT32 node_bits;
640 NV_U_INT32 node_scale;
641 NV_INT32 node_offset;
642 NV_U_INT32 amplitude_bits;
643 NV_U_INT32 amplitude_scale;
644 NV_U_INT32 epoch_bits;
645 NV_U_INT32 epoch_scale;
646 NV_U_INT32 constituent_bits;
647 NV_U_INT32 record_type_bits;
648 NV_U_INT32 latitude_scale;
649 NV_U_INT32 latitude_bits;
650 NV_U_INT32 longitude_scale;
651 NV_U_INT32 longitude_bits;
652 NV_U_INT32 record_size_bits;
653 NV_U_INT32 station_bits;
654 NV_U_INT32 level_unit_bits;
655 NV_U_INT32 dir_unit_bits;
656 NV_U_INT32 restriction_bits;
657 NV_U_INT32 max_restriction_types;
658 NV_U_INT32 tzfile_bits;
659 NV_U_INT32 max_tzfiles;
660 NV_U_INT32 country_bits;
661 NV_U_INT32 max_countries;
662 NV_U_INT32 datum_bits;
663 NV_U_INT32 max_datum_types;
664 NV_U_INT32 legalese_bits;
665 NV_U_INT32 max_legaleses;
666 NV_U_INT32 datum_offset_bits;
667 NV_U_INT32 datum_offset_scale;
668 NV_U_INT32 date_bits;
669 NV_U_INT32 months_on_station_bits;
670 NV_U_INT32 confidence_value_bits;
671 NV_U_INT32 time_bits;
672 NV_U_INT32 level_add_bits;
673 NV_U_INT32 level_add_scale;
674 NV_U_INT32 level_multiply_bits;
675 NV_U_INT32 level_multiply_scale;
676 NV_U_INT32 direction_bits;
677 NV_U_INT32 constituent_size;
678 NV_U_INT32 level_unit_size;
679 NV_U_INT32 dir_unit_size;
680 NV_U_INT32 restriction_size;
681 NV_U_INT32 tzfile_size;
682 NV_U_INT32 country_size;
683 NV_U_INT32 datum_size;
684 NV_U_INT32 legalese_size;
685 NV_U_INT32 end_of_file;
688 NV_U_INT32 pedigree_bits;
689 NV_U_INT32 pedigree_size;
699static KEY keys[] = {{
702 {(NV_CHAR *)hd.pub.version},
707 {(NV_CHAR *)&hd.pub.major_rev},
712 {(NV_CHAR *)&hd.pub.minor_rev},
717 {(NV_CHAR *)hd.pub.last_modified},
720 "[NUMBER OF RECORDS]",
722 {(NV_CHAR *)&hd.pub.number_of_records},
727 {(NV_CHAR *)&hd.pub.start_year},
732 {(NV_CHAR *)&hd.pub.number_of_years},
737 {(NV_CHAR *)&hd.pub.constituents},
740 "[LEVEL UNIT TYPES]",
742 {(NV_CHAR *)&hd.pub.level_unit_types},
745 "[DIRECTION UNIT TYPES]",
747 {(NV_CHAR *)&hd.pub.dir_unit_types},
750 "[RESTRICTION TYPES]",
752 {(NV_CHAR *)&hd.pub.restriction_types},
757 {(NV_CHAR *)&hd.pub.pedigree_types},
762 {(NV_CHAR *)&hd.pub.tzfiles},
767 {(NV_CHAR *)&hd.pub.countries},
772 {(NV_CHAR *)&hd.pub.datum_types},
777 {(NV_CHAR *)&hd.pub.legaleses},
782 {(NV_CHAR *)&hd.header_size},
787 {(NV_CHAR *)&hd.speed_bits},
792 {(NV_CHAR *)&hd.speed_scale},
797 {(NV_CHAR *)&hd.speed_offset},
800 "[EQUILIBRIUM BITS]",
802 {(NV_CHAR *)&hd.equilibrium_bits},
805 "[EQUILIBRIUM SCALE]",
807 {(NV_CHAR *)&hd.equilibrium_scale},
810 "[EQUILIBRIUM OFFSET]",
812 {(NV_CHAR *)&hd.equilibrium_offset},
817 {(NV_CHAR *)&hd.node_bits},
822 {(NV_CHAR *)&hd.node_scale},
827 {(NV_CHAR *)&hd.node_offset},
832 {(NV_CHAR *)&hd.amplitude_bits},
837 {(NV_CHAR *)&hd.amplitude_scale},
842 {(NV_CHAR *)&hd.epoch_bits},
847 {(NV_CHAR *)&hd.epoch_scale},
850 "[CONSTITUENT BITS]",
852 {(NV_CHAR *)&hd.constituent_bits},
857 {(NV_CHAR *)&hd.level_unit_bits},
860 "[DIRECTION UNIT BITS]",
862 {(NV_CHAR *)&hd.dir_unit_bits},
865 "[RESTRICTION BITS]",
867 {(NV_CHAR *)&hd.restriction_bits},
872 {(NV_CHAR *)&hd.pedigree_bits},
877 {(NV_CHAR *)&hd.tzfile_bits},
882 {(NV_CHAR *)&hd.country_bits},
887 {(NV_CHAR *)&hd.datum_bits},
892 {(NV_CHAR *)&hd.legalese_bits},
895 "[RECORD TYPE BITS]",
897 {(NV_CHAR *)&hd.record_type_bits},
902 {(NV_CHAR *)&hd.latitude_scale},
907 {(NV_CHAR *)&hd.latitude_bits},
912 {(NV_CHAR *)&hd.longitude_scale},
917 {(NV_CHAR *)&hd.longitude_bits},
920 "[RECORD SIZE BITS]",
922 {(NV_CHAR *)&hd.record_size_bits},
927 {(NV_CHAR *)&hd.station_bits},
930 "[DATUM OFFSET BITS]",
932 {(NV_CHAR *)&hd.datum_offset_bits},
935 "[DATUM OFFSET SCALE]",
937 {(NV_CHAR *)&hd.datum_offset_scale},
942 {(NV_CHAR *)&hd.date_bits},
945 "[MONTHS ON STATION BITS]",
947 {(NV_CHAR *)&hd.months_on_station_bits},
950 "[CONFIDENCE VALUE BITS]",
952 {(NV_CHAR *)&hd.confidence_value_bits},
957 {(NV_CHAR *)&hd.time_bits},
962 {(NV_CHAR *)&hd.level_add_bits},
967 {(NV_CHAR *)&hd.level_add_scale},
970 "[LEVEL MULTIPLY BITS]",
972 {(NV_CHAR *)&hd.level_multiply_bits},
975 "[LEVEL MULTIPLY SCALE]",
977 {(NV_CHAR *)&hd.level_multiply_scale},
982 {(NV_CHAR *)&hd.direction_bits},
985 "[CONSTITUENT SIZE]",
987 {(NV_CHAR *)&hd.constituent_size},
992 {(NV_CHAR *)&hd.level_unit_size},
995 "[DIRECTION UNIT SIZE]",
997 {(NV_CHAR *)&hd.dir_unit_size},
1000 "[RESTRICTION SIZE]",
1002 {(NV_CHAR *)&hd.restriction_size},
1007 {(NV_CHAR *)&hd.pedigree_size},
1012 {(NV_CHAR *)&hd.tzfile_size},
1017 {(NV_CHAR *)&hd.country_size},
1022 {(NV_CHAR *)&hd.datum_size},
1027 {(NV_CHAR *)&hd.legalese_size},
1032 {(NV_CHAR *)&hd.end_of_file},
Represents an index entry for tidal and current data.
Amplitude measurement container.
Tide datasource container on top of TCDataSource.
TCMgr * ptcmgr
Global instance.