EGNOSS
RTCM-korrektioner
MySQL - Client
Exel eksport
RTCM konvertering
Eksport af korrektionsdata i en simpel ASCII-fil [i0702] med data fra udvalgte satellitter og udvalgte perioder til import i Excel. Denne facilitet muliggør analyse af data, hvis dette ikke nås i programmeringsdelen.
Problemet er at identificere det subset af databasen som brugeren er interesseret i, udtrække dette af databasen og gemme dette udtræk i en fil på brugerens harddisk.
Der skal opsættes et interface hvor man kan
afkrydse de ønskede satelitter
afkrydse de ønskede felter fra databasen
afkrydse de ønskede kilder
vælge en tidsperiode (start - slut)
CSV specifikation
Data, som exporteres til Comma Sepereret Vektor (CVS) formattet, har følgende opbygning:
Der er valgt tabulator til at adskille felterne og linjeskift til at adskille linjerne. I en senere version af programmet kan man evt indføre mulighed for at vælge hvilke tegn der skal bruges. Første række indeholder navne pÂ søjlerne. En enkelt satelit er repræsenteret med en række. Der er følgende informationer i hver række:
time: en tekststreng med datoen
Scale factor datatype: int
UDRE datatype: int
Satellite ID datatype: int
Issue of data datatype: int
Pseudorange Correction datatype: double; enhed: meter
Range Rate Correction datatype: double; enhed: meter/sekund)
Modified_Z-Count datatype: double; enhed: sekunder)
tidsstempel datatype: long int; enhed: millisekunder siden 1/1-1970
Brugeren skal være i stand til at udvælge et subset af de i databasen registrerede satelitter. Interfacet skal således afspejle både den totale mængde satelitter samt hvilke af disse rent faktisk findes i databasen. At identificere hvilke satelitter der er i databasen kræver derfor en forespørgsel til denne. Det giver ikke rent umiddelbar mening ikke at specificere mindst en satelit, så hvis brugeren ikke har valgt mindst en sådan, skal der gives en fejlmeddelelse, og forespørgslen gennemføres ikke. Vi bruger denne konstruktion : satelliteId in (<nummer>,<nummer>,...) til at vælge satelitter i databasen. Vi har valgt at dele dette op i to: mindre end halvdelen af satelitterne og flere end halvdelen af satelitterne og så konstruere en betingelse baseret på disse to situationer. Hvis alle satelitterne er valgt dannes der ingen betingelse.
Brugeren skal være i stand til at vælge hvilke felter i databasen der ønskes exporteret. Bemærk her at der kan være (og faktisk i løsningen er) flere felter i databasen end brugeren kan vælge. Disse ekstra felter bruges til administration og identifikation af de enkelte poster i databasen. I dette tilfælde er de ekstra felter tidspunktet for registreringen i databasen samt tidspunktet for en evt opdatering af registreringen. Da felterne i databasen er explicit kendte, kræver dette ikke noget opslag databasen. Hvis man på et tidspunkt skulle finde på at have et mere flydende antal felter, kan disse findes ved at tilgå databasen og forespørger på dennes metadata og analysere denne. Det giver overhovedet ikke nogen mening ikke at have specificeret mindst et felt, så hvis brugeren ikke har valgt mindst et sådan, skal der gives en fejlmeddelelse, og forespørgslen gennemføres ikke. De her angivene valg bruges til at konstruere den første del af select hvor valget af felter foretages. Hvis alle felter er valgt af brugeren kunne man så umiddelbart tro, at man bare kunne sige: select * from ... , men da tabellen indeholder flere felter (til bogholderi) end brugeren kan være interesseret i, er vi nødt til i alle tilfælde eksplicit at specificere hvilke felter der er blevet valgt.
Brugeren skal være i stand til at vælge mellem data-kilderne. Det vides ikke på forhånd hvilke kilder der er registreret i databasen, så det kræver en forespørgsel i databasen at identificere disse. Det giver ikke rent umiddelbar mening ikke at specificere mindst en kilde, så hvis brugeren ikke har valgt mindst en sådan, skal der gives en fejlmeddelelse, og forespørgslen gennemføres ikke. Vi bruger denne konstruktion : device in (<navn>,<navn>,...) til at vælge kilder i databasen. Vi har valgt at dele dette op i to: mindre end halvdelen af kilderne og flere end halvdelen af kilderne og så konstruere en betingelse baseret på disse to situationer. Hvis alle kilderne er valgt dannes der ingen betingelse.
Brugeren skal være i stand til at specificere en tidsperiode i hvilken data ønskes udtrukket. Da det ikke på forhånd vides, hvornår registreringen er startet, eller, hvornår den er sluttet, skal disse tidspunkter findes ved opslag i databasen. Hvis brugeren specificerer tidspunkter udenfor disse yderpunkter eller en sluttid, der ligger førend starttiden, skal der gives en fejlmeddelelse, og forespørgslen gennemføres ikke. Hvis brugeren eksplicit angiver, at man ønsker fra det første eller til det sidste tidspunkt, genereres den relevante del af betingelsen ikke. Det vil så også sige, at hvis man ønsker hele tidsperioden dannes der slet ingen betingelse på tidsperioden.
Programmet starter med at finde ud af om nogen af de foranstående betjenings-fejl er til stede, og afbryder så processen.
På basis af de af brugeren angivne valg, konstrueres der en MySQL select statement, der sendes til databasenserveren. 'where' parten er så sammensat ud fra valgene foretaget under satelitter, kilder og tidsperiode. Disse individuelle betingelser knyttes logisk sammen med 'and'.
behandling af udtræk
Da vi ikke på forhånd ved hvilke felter brugeren har valgt er vi nødt til at analyserer resultatet. Dette gøres ved at kigge på resultatets meta-data for at finde navn og datatype for hver enkelt felt i det returnerede resultat. Hvert felt i hver linje bliver så behandlet alt efter hvilken datatype det har og udskrevet som ascii tekst i filen.