diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2023-07-24 14:16:33 +0200 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2023-07-24 14:16:33 +0200 |
commit | fb795285ca99d2c7d66a0771b4859e1fa5967da1 (patch) | |
tree | ca508a3f2e0ad7227b3642aa9aa45dd834bbc20f /python/experiments/decode_gps.py | |
parent | 4d169139e964884e30cc6b24153a783964cf2eb8 (diff) | |
download | lora-aprs-hb9egm-fb795285ca99d2c7d66a0771b4859e1fa5967da1.tar.gz lora-aprs-hb9egm-fb795285ca99d2c7d66a0771b4859e1fa5967da1.tar.bz2 lora-aprs-hb9egm-fb795285ca99d2c7d66a0771b4859e1fa5967da1.zip |
Add decode_gps.py experiment
Diffstat (limited to 'python/experiments/decode_gps.py')
-rwxr-xr-x | python/experiments/decode_gps.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/python/experiments/decode_gps.py b/python/experiments/decode_gps.py new file mode 100755 index 0000000..da7904a --- /dev/null +++ b/python/experiments/decode_gps.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python +import struct +from math import pow + +EXAMPLE_MSG = b"<\xff\x01HB9EGM-7>APLRT1,WIDE1-1:!/7%=6P\')8[I#Q" + +def decodeEncodedGPS(packet): + """Returns a string with decoded latitude and longitude, or raises ValueError""" + ix = packet.index(b":!/") + gps_packet = packet[ix+3:] + encoded_latitude = gps_packet[:4] + encoded_longitude = gps_packet[4:8] + + (y1, y2, y3, y4) = struct.unpack("<bbbb", encoded_latitude) + + decodedLatitude = 90.0 - ((((y1-33) * pow(91,3)) + ((y2-33) * pow(91,2)) + ((y3-33) * 91) + y4-33) / 380926.0); + + (x1, x2, x3, x4) = struct.unpack("<bbbb", encoded_longitude) + + decodedLongitude = -180.0 + ((((x1-33) * pow(91,3)) + ((x2-33) * pow(91,2)) + ((x3-33) * 91) + x4-33) / 190463.0); + return f"{decodedLatitude}N / {decodedLongitude}E" + +print(decodeEncodedGPS(EXAMPLE_MSG)) |