Files
mips/_old/src/kml2rte.c
T
jens 26291bca3d - initial import
git-svn-id: http://moon:8086/svn/mips@1 a8ebac50-d88d-4704-bea3-6648445a41b3
2014-07-20 15:01:37 +00:00

188 lines
5.9 KiB
C

/***************************************************************/
/* main.c */
/* Digital PLL */
/***************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define TYPE_AP_DEP 1
#define TYPE_AP_ARR 2
#define TYPE_DIRECT 3
#define TYPE_LEG 4
/***************************************************************/
typedef struct _srtentry_t
{
char name[257];
int type;
char typestr[257];
char long_prefix;
double longitude;
char lat_prefix;
double latitude;
int ground_level;
} rtentry_t;
typedef struct _splan_t
{
char name[1025];
FILE *pFile;
} plant_t;
/***************************************************************/
int entry_print(FILE *pFile, rtentry_t *pEnt)
{
int err = 0;
switch (pEnt->type)
{
case TYPE_AP_DEP:
fprintf(pFile, "%s\n", pEnt->name);
fprintf(pFile, "1\n");
fprintf(pFile, "%s\n", pEnt->typestr);
fprintf(pFile, "1 %c %.5f %c %.6f %d\n", toupper(pEnt->long_prefix), pEnt->longitude, toupper(pEnt->lat_prefix), pEnt->latitude, pEnt->ground_level);
fprintf(pFile, "-----\n");
fprintf(pFile, "1\n"); // departure
fprintf(pFile, "0\n");
fprintf(pFile, "\n");
fprintf(pFile, "1\n");
fprintf(pFile, "%d\n", pEnt->ground_level);
fprintf(pFile, "-\n");
fprintf(pFile, "-1000000\n");
fprintf(pFile, "-1000000\n");
fprintf(pFile, "\n");
break;
case TYPE_AP_ARR:
fprintf(pFile, "%s\n", pEnt->name);
fprintf(pFile, "1\n"); // Airport
fprintf(pFile, "-\n");
fprintf(pFile, "1 %c %.5f %c %.6f %d\n", toupper(pEnt->long_prefix), pEnt->longitude, toupper(pEnt->lat_prefix), pEnt->latitude, pEnt->ground_level);
fprintf(pFile, "-----\n");
fprintf(pFile, "0\n"); // arrival
fprintf(pFile, "0\n");
fprintf(pFile, "\n");
fprintf(pFile, "1\n");
fprintf(pFile, "%d\n", pEnt->ground_level);
fprintf(pFile, "-\n");
fprintf(pFile, "-1000000\n");
fprintf(pFile, "-1000000\n");
fprintf(pFile, "\n");
break;
case TYPE_DIRECT:
fprintf(pFile, "%s\n", pEnt->name);
fprintf(pFile, "2\n"); // Direct
fprintf(pFile, "%s\n", pEnt->typestr);
fprintf(pFile, "1 %c %.5f %c %.6f %d\n", toupper(pEnt->long_prefix), pEnt->longitude, toupper(pEnt->lat_prefix), pEnt->latitude, pEnt->ground_level);
fprintf(pFile, "0\n");
fprintf(pFile, "0\n");
fprintf(pFile, "0\n");
fprintf(pFile, "\n");
break;
case TYPE_LEG:
fprintf(pFile, "%s\n", pEnt->name);
fprintf(pFile, "5\n"); // LEG
fprintf(pFile, "%s\n", pEnt->typestr);
fprintf(pFile, "1 %c %.5f %c %.6f %d\n", toupper(pEnt->long_prefix), pEnt->longitude, toupper(pEnt->lat_prefix), pEnt->latitude, pEnt->ground_level);
fprintf(pFile, "0\n");
fprintf(pFile, "0\n");
fprintf(pFile, "0\n");
fprintf(pFile, "\n");
break;
default:
err = -1;
break;
}
return err;
}
int entry_set(rtentry_t *pEnt, int type, char *pName, char *pTypeStr, double latitude, double longitude, int gl)
{
strcpy(pEnt->typestr, pTypeStr);
if (longitude < 0)
pEnt->long_prefix = 'S';
else
pEnt->long_prefix = 'N';
pEnt->longitude = fabs(longitude);
if (latitude < 0)
pEnt->lat_prefix = 'E';
else
pEnt->lat_prefix = 'W';
pEnt->latitude = fabs(latitude);
if (!pName)
{
if (TYPE_DIRECT != type)
return -1;
sprintf(pEnt->name, "%c%.0f%c%.0f", pEnt->long_prefix, pEnt->longitude, pEnt->lat_prefix, pEnt->latitude);
}
else
{
strcpy(pEnt->name, pName);
}
pEnt->ground_level = gl;
pEnt->type = type;
return 0;
}
#define NUM_WP 17
int main(void)
{
int i;
rtentry_t ent[NUM_WP];
FILE *pFile;
// pFile = fopen("C:\\Programme\\Microsoft Games\\Flight Simulator 9\\PMDG\\FLIGHTPLANS\\test.rte", "w");
pFile = stderr;
/*
entry_set(&ent[0], TYPE_AP_DEP, "EDDF", "DIRECT", -8.543125, 50.12642, 364);
entry_set(&ent[1], TYPE_DIRECT, "NAPSI", "DIRECT", -6.021389, 51.85528, 0);
entry_set(&ent[2], TYPE_LEG, "GOMUP", "UN572", 10, 57, 0);
entry_set(&ent[3], TYPE_DIRECT, NULL, "DIRECT", 10.321, 60.123, 0);
entry_set(&ent[4], TYPE_AP_ARR, "KSFO", "-", 122.543125, 37.12642, 13);
*/
i = 0;
entry_set(&ent[i++], TYPE_AP_DEP, "EDDF", "DIRECT", -8.543125, 50.12642, 364);
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.495517678260868,50.08917173742456,0 );
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.437482727705472,50.09692405502469,0 );
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.314112693383819,50.12183705278613,0 );
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.282904310172924,50.19787276231849,0 );
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.310346569009369,50.43053520194942,0 );
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.310814943566584,50.7757798665427,0 );
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.339329466837882,51.98034086955558,0 );
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.24621634315524,52.92949698506673,0 );
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.192535830735153,53.12125289919808,0 );
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.279381463623494,53.18778726201814,0 );
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.444951496795227,53.16928101451241,0 );
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.503513867383489,53.07199210889475,0 );
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.571512947137819,53.04267405471422,0 );
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.648398246256804,53.0469130539089,0 );
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.723907341812861,53.0466716799862,0 );
entry_set(&ent[i++], TYPE_AP_ARR, "EDDW", "-", -8.723907341812861, 53.0466716799862, 13);
fprintf(pFile, "Generated by kml2rte v0.1\n\n%d\n\n", NUM_WP);
for (i=0; i < NUM_WP; i++)
entry_print(pFile, &ent[i]);
// fclose (pFile);
return EXIT_SUCCESS;
}