Satellite Observers Workbench. NOT yet complete, just published for forum posters to \"cherry pick\" pieces of code as requiered as an example.
utils/stations.c@0:0a841b89d614, 2010-10-11 (annotated)
- Committer:
- AjK
- Date:
- Mon Oct 11 10:34:55 2010 +0000
- Revision:
- 0:0a841b89d614
Totally Alpha quality as this project isn\t completed. Just publishing it as it answers many questions asked in the forums
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AjK | 0:0a841b89d614 | 1 | /**************************************************************************** |
AjK | 0:0a841b89d614 | 2 | * Copyright 2010 Andy Kirkham, Stellar Technologies Ltd |
AjK | 0:0a841b89d614 | 3 | * |
AjK | 0:0a841b89d614 | 4 | * This file is part of the Satellite Observers Workbench (SOWB). |
AjK | 0:0a841b89d614 | 5 | * |
AjK | 0:0a841b89d614 | 6 | * SOWB is free software: you can redistribute it and/or modify |
AjK | 0:0a841b89d614 | 7 | * it under the terms of the GNU General Public License as published by |
AjK | 0:0a841b89d614 | 8 | * the Free Software Foundation, either version 3 of the License, or |
AjK | 0:0a841b89d614 | 9 | * (at your option) any later version. |
AjK | 0:0a841b89d614 | 10 | * |
AjK | 0:0a841b89d614 | 11 | * SOWB is distributed in the hope that it will be useful, |
AjK | 0:0a841b89d614 | 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
AjK | 0:0a841b89d614 | 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
AjK | 0:0a841b89d614 | 14 | * GNU General Public License for more details. |
AjK | 0:0a841b89d614 | 15 | * |
AjK | 0:0a841b89d614 | 16 | * You should have received a copy of the GNU General Public License |
AjK | 0:0a841b89d614 | 17 | * along with SOWB. If not, see <http://www.gnu.org/licenses/>. |
AjK | 0:0a841b89d614 | 18 | * |
AjK | 0:0a841b89d614 | 19 | * $Id: main.cpp 5 2010-07-12 20:51:11Z ajk $ |
AjK | 0:0a841b89d614 | 20 | * |
AjK | 0:0a841b89d614 | 21 | ***************************************************************************/ |
AjK | 0:0a841b89d614 | 22 | |
AjK | 0:0a841b89d614 | 23 | #include "stations.h" |
AjK | 0:0a841b89d614 | 24 | |
AjK | 0:0a841b89d614 | 25 | /** COSPAR observing stations around the World. |
AjK | 0:0a841b89d614 | 26 | */ |
AjK | 0:0a841b89d614 | 27 | const STATION_t stations[] = { |
AjK | 0:0a841b89d614 | 28 | |
AjK | 0:0a841b89d614 | 29 | { 2010, "MM", 30.3340, -97.7610, 160., "5105 Crestway Dr." }, |
AjK | 0:0a841b89d614 | 30 | { 2011, "MM", 30.3150, -97.8661, 300., "Bee Caves Rsrch Ctr" }, |
AjK | 0:0a841b89d614 | 31 | { 2420, "RE", 55.9486, -3.1386, 40., "Russell Eberst" }, |
AjK | 0:0a841b89d614 | 32 | { 2675, "DB", 52.1358, -2.3264, 70., "David Brierley" }, |
AjK | 0:0a841b89d614 | 33 | { 2676, "DB", 52.1273, -2.3365, 107., "David Brierley" }, |
AjK | 0:0a841b89d614 | 34 | { 2018, "PW", 51.0945, -1.1188, 150., "Peter Wakelin" }, |
AjK | 0:0a841b89d614 | 35 | { 2701, "TM", 43.6876, -79.3924, 230., "Ted Molczan" }, |
AjK | 0:0a841b89d614 | 36 | { 3022, "JC", 48.7389, 3.4589, 52., "Jean-Paul Cornec" }, |
AjK | 0:0a841b89d614 | 37 | { 5917, "BG", 59.3418, 18.0545, 33., "Bjorn Gimle" }, |
AjK | 0:0a841b89d614 | 38 | { 5918, "BG", 59.2985, 18.1045, 44., "Bjorn Gimle" }, |
AjK | 0:0a841b89d614 | 39 | { 5919, "BG", 59.2615, 18.6206, 33., "Bjorn Gimle" }, |
AjK | 0:0a841b89d614 | 40 | { 9987, "BF", 59.3418, 18.0545, 30., "Bjorn Gimle" }, |
AjK | 0:0a841b89d614 | 41 | { 100, "SG", 59.4628, 17.9137, 30., "Sven Grahn" }, |
AjK | 0:0a841b89d614 | 42 | { 8305, "PG", 26.2431, -98.2163, 30., "Paul Gabriel" }, |
AjK | 0:0a841b89d614 | 43 | { 2563, "PN", 51.0524, 2.4043, 10., "Pierre Nierinck" }, |
AjK | 0:0a841b89d614 | 44 | { 6226, "SC", 28.4861, -97.8194, 110., "Scott Campbell" }, |
AjK | 0:0a841b89d614 | 45 | { 8539, "SN", 39.4707, -79.3388, 839., "Steve Newcomb" }, |
AjK | 0:0a841b89d614 | 46 | { 2751, "BM", 51.3440, -1.9849, 125., "Bruce MacDonald" }, |
AjK | 0:0a841b89d614 | 47 | { 2756, "AK", 56.0907, -3.1623, 25., "Andy Kirkham" }, /* wow, that's me! Shame I no longer live there. */ |
AjK | 0:0a841b89d614 | 48 | { 433, "GR", -33.9406, 18.5129, 10., "Greg Roberts" }, |
AjK | 0:0a841b89d614 | 49 | { 4541, "AR", 41.9639, 12.4531, 80., "Alberto Rango" }, |
AjK | 0:0a841b89d614 | 50 | { 4542, "AR", 41.9683, 12.4545, 80., "Alberto Rango" }, |
AjK | 0:0a841b89d614 | 51 | { 4641, "AR", 41.1060, 16.9010, 70., "Alberto Rango" }, |
AjK | 0:0a841b89d614 | 52 | { 2115, "MW", 51.3286, 0.7950, 75., "Mike Waterman" }, |
AjK | 0:0a841b89d614 | 53 | { 1775, "KF", 44.6062, -75.6910, 200., "Kevin Fettner" }, |
AjK | 0:0a841b89d614 | 54 | { 1747, "DD", 45.7275, -72.3526, 191., "Daniel Deak" }, |
AjK | 0:0a841b89d614 | 55 | { 8597, "TB", -34.9638, 138.6333, 100., "Tony Beresford" }, |
AjK | 0:0a841b89d614 | 56 | { 8730, "EC", 30.3086, -97.7279, 150., "Ed Cannon" }, |
AjK | 0:0a841b89d614 | 57 | { 9730, "MM", 30.3150, -97.8660, 280., "BCRC (0002)" }, |
AjK | 0:0a841b89d614 | 58 | { 4353, "ML", 52.1541, 4.4908, 0., "Marco Langbroek" }, |
AjK | 0:0a841b89d614 | 59 | { 4354, "ML", 52.1168, 4.5602, -2., "Marco Langbroek" }, |
AjK | 0:0a841b89d614 | 60 | { 710, "LS", 52.3261, 10.6756, 85., "Lutz Schindler" }, |
AjK | 0:0a841b89d614 | 61 | { 1056, "MK", 57.0122, 23.9833, 4., "Martins Keruss" }, |
AjK | 0:0a841b89d614 | 62 | { 110, "LK", 32.5408, -96.8906, 200., "Lyn Kennedy" }, |
AjK | 0:0a841b89d614 | 63 | { 11, "VA", 44.7269, 34.0167, 580., "Crimea Astrophysical Observ." }, |
AjK | 0:0a841b89d614 | 64 | { 70, "BC", 53.2233, -0.6003, 30., "Bob Christy" }, |
AjK | 0:0a841b89d614 | 65 | { 8335, "BY", 35.8311, -96.1471, 335., "Brad Young" }, |
AjK | 0:0a841b89d614 | 66 | { 8336, "BY", 36.1397, -95.9838, 205., "Brad Young" }, |
AjK | 0:0a841b89d614 | 67 | { 8337, "BY", 36.9557, -96.5518, 395., "Brad Young" }, |
AjK | 0:0a841b89d614 | 68 | { 4160, "BD", 51.2793, 5.4768, 35., "Bram Dorreman" }, |
AjK | 0:0a841b89d614 | 69 | { 9011, "RM", 50.9310, 2.4053, 72., "Richard Miles" }, |
AjK | 0:0a841b89d614 | 70 | { 20, "PM", 50.7453, 2.1107, 70., "Paul Marsh" }, |
AjK | 0:0a841b89d614 | 71 | { 40, "IR", 50.7453, 2.1107, 70., "Ian Roberts" }, |
AjK | 0:0a841b89d614 | 72 | { 90, "RF", 50.7453, 2.1107, 70., "Richard Flagg" }, |
AjK | 0:0a841b89d614 | 73 | { 1, "AK", 56.1923, -3.0340, 53., "SOWB Test Station" }, /* Used for testing the SOWB. */ |
AjK | 0:0a841b89d614 | 74 | { 0, "uk", 0.0000, 0.0000, 0., "Unknown station location" } /* Always the last entry. */ |
AjK | 0:0a841b89d614 | 75 | }; |
AjK | 0:0a841b89d614 | 76 | |
AjK | 0:0a841b89d614 | 77 | /** cospar_station_at |
AjK | 0:0a841b89d614 | 78 | * |
AjK | 0:0a841b89d614 | 79 | * Given a latitude and longitude is the point within a +/-0.0005 degree |
AjK | 0:0a841b89d614 | 80 | * box of a given station? If so, return a handle (array index) for that |
AjK | 0:0a841b89d614 | 81 | * station. |
AjK | 0:0a841b89d614 | 82 | * |
AjK | 0:0a841b89d614 | 83 | * @param double latitude |
AjK | 0:0a841b89d614 | 84 | * @param double longitude |
AjK | 0:0a841b89d614 | 85 | * @return int index |
AjK | 0:0a841b89d614 | 86 | */ |
AjK | 0:0a841b89d614 | 87 | int cospar_station_at(double latitude, double longitude) { |
AjK | 0:0a841b89d614 | 88 | int i; |
AjK | 0:0a841b89d614 | 89 | double high, low; |
AjK | 0:0a841b89d614 | 90 | |
AjK | 0:0a841b89d614 | 91 | for (i = 0; stations[i].cospar != 0; i++) { |
AjK | 0:0a841b89d614 | 92 | high = stations[i].latitude + 0.0005; |
AjK | 0:0a841b89d614 | 93 | low = stations[i].latitude - 0.0005; |
AjK | 0:0a841b89d614 | 94 | if (latitude <= high && latitude >= low) { |
AjK | 0:0a841b89d614 | 95 | high = stations[i].longitude + 0.0005; |
AjK | 0:0a841b89d614 | 96 | low = stations[i].longitude - 0.0005; |
AjK | 0:0a841b89d614 | 97 | if (longitude <= high && longitude >= low) { |
AjK | 0:0a841b89d614 | 98 | return i; |
AjK | 0:0a841b89d614 | 99 | } |
AjK | 0:0a841b89d614 | 100 | } |
AjK | 0:0a841b89d614 | 101 | } |
AjK | 0:0a841b89d614 | 102 | |
AjK | 0:0a841b89d614 | 103 | return i; |
AjK | 0:0a841b89d614 | 104 | } |
AjK | 0:0a841b89d614 | 105 | |
AjK | 0:0a841b89d614 | 106 | /** station |
AjK | 0:0a841b89d614 | 107 | * |
AjK | 0:0a841b89d614 | 108 | * Given an array index value, return a pointer to the station information structure. |
AjK | 0:0a841b89d614 | 109 | * The proceedure is basically a look-up opertaion. |
AjK | 0:0a841b89d614 | 110 | * |
AjK | 0:0a841b89d614 | 111 | * @param int index |
AjK | 0:0a841b89d614 | 112 | * @return STATION_t * |
AjK | 0:0a841b89d614 | 113 | */ |
AjK | 0:0a841b89d614 | 114 | const STATION_t * cospar_station(int index) { |
AjK | 0:0a841b89d614 | 115 | return &stations[index]; |
AjK | 0:0a841b89d614 | 116 | } |