Предложения GPS, которые вы получаете от устройства GPS, довольно легко декодировать, и это выглядит как забавный проект. Я не уверен, что вы получаете от gspd, но если это такие предложения, мне действительно пришлось сделать что-то подобное для школы несколько недель назад (но в LabView):
$GPGGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx
hhmmss.ss = UTC of position
llll.ll = latitude of position
a = N or S
yyyyy.yy = Longitude of position
a = E or W
x = GPS Quality indicator (0=no fix, 1=GPS fix, 2=Dif. GPS fix)
xx = number of satellites in use
x.x = horizontal dilution of precision
x.x = Antenna altitude above mean-sea-level
M = units of antenna altitude, meters
x.x = Geoidal separation
M = units of geoidal separation, meters
x.x = Age of Differential GPS data (seconds)
xxxx = Differential reference station ID
Таким образом, вы можете просто выполнить gpsstring.split (','), и вы получите массив всех элементов, которые затем сможете проанализировать. Чтобы увидеть больше об этих предложениях (есть другие, которые я думаю о скорости и направлении), нажмите здесь .
Например, чтобы получить приблизительное расстояние между двумя точками, вы можете использовать формула Haversine :
distance=R*2*asin(sqrt((sin((lat1-lat2)/2))**2
+cos(lat1)*cos(lat2)*(sin((long1-long2)/2))**2))
Где R - радиус Земли в единице измерения, в которой вы хотите получить свой результат (например, R = 6372 км). Эта фактическая строка взята из программы LabView, которая у меня лежала, но синтаксис очень похож на синтаксис Python (возможно, проверьте оператор Division , вы можете захотеть сделать это из future import деление».
Кроме того, lat1, lat2, long1 и long2 должны быть выражены в радианах. Формат, в котором вы их получаете, довольно странный (hhmm.ff, где ff - доли минут, поэтому они идут от 0 до 99 вместо 0 до 59 (в секундах)).
Код, который я использовал для этого:
h=floor(x/100);
m=floor(x-(h*100));
s=(x-floor(x))*60;
deg=sgn*(h+(m/60)+(s/3600));
rad=deg*pi/180;
Где знак равен 1 для севера и востока и -1 для юга и востока. Опять же, остерегайтесь деления.
Проверка границ, я думаю, самая легкая часть. Если у вас уже есть положения в радианах или градусах, вы можете просто проверить, находится ли широта между двумя границами широты, и сделать то же самое для долготы.
Напишите обертку вокруг всего, и вы получите свою библиотеку GPS:)