stats

GPS coordinaten

Vanouds werd in de zeevaart de geo positie bepaald door de positie van hemellichamen op te nemen.
De N-Z positie op aarde is evenredig aan de hoek van de (Pool)ster met de horizon.
De O-W positie werd vastgelegd als cirkel hoek met Greenwich als nulpunt en berekend vanuit het moment van zonsopgang. Deze 'breedtegraad' kon pas echt nauwkeurig bepaald worden met de ontwikkeling van nauwkeurige klokken.

De notatie is zo een mix van kompas en klok : richting, graden, minuten en seconden. Het rekenen met eenheden zoals graden, minuten en seconden is lastig en om die reden metrisch gebruikt als decimale X en Y coordinaten. Google gebruikt 7 cijfers achter de punt / komma.

Deze Latitude en Longtitude opslaan als een float (getal met tig cijfers achter de punt) vergt van eenvoudige cpu's - zoals een Arduino - nogal wat rekenkracht. Een float is wel 4 byte, maar daarvan worden slechts 23 bit gebruikt voor het getal, de rest is voor de punt positie en neg sign. De notatie 52.1234567 wordt dus afgerond naar 52.12346 en daar leveren we aan nauwkeurigheid tot enkele meters in!

Door de Latitude en Longtitude met 10e6 te vermenigvuldigen werken we die lastige decimale punt weg en past het in een long. Een (unsigned) long is ook 4 byte maar kan max. het getal 4294967296 bevatten.

Het weer terug-toveren van de punt is wat lastiger, want dan komen we snel weer op een float uit... Het alternatief is de long op te splitsen in het deel voor en na de punt. Om deze truc breed te kunnen toepassen gebruik ik de volgende functie:

Hier is 'fac' het getal waarmee we de Lat en de Lon - maar ook een hoeknotatie - vermenigvuldigden om deze zonder punt op te slaan. Het resultaat wordt weergegeven als een character String.

Mogelijk is het injecteren van de punt (op X posities van achteren) ook wel mogelijk zonder rekenen, want deze ligt toch vast in de eerdere vermenigvuldiging, maar in mijn optiek is die aanpak bewerkelijker...

Heb je vragen of opmerkingen? Stuur me een berichtje en je krijgt alle gewenste informatie!

HOME