Какую библиотеку gps вы бы порекомендовали для python?

Я ищу бесплатную библиотеку для python, которая может рассчитать ваше направление и скорость по координатам GPS и, возможно, может рассчитать, находитесь ли вы в некоторых границах или что-то вроде этого.

есть ли библиотеки, которые вы знаете и которые хорошо работали для вас?

Edit: Ok кажется, я должен указать это немного. Мы используем python на linux-машине и получаем данные из gpsd. Поэтому я надеюсь, нет необходимости для библиотеки speciel для только разговаривает с устройством. То, что я ищу, - это код python, выполняющий некоторые базовые вычисления с данными. Например, сравнение последних позиций и расчет скорости и направления.

5 ответов


по-видимому, модуль python, который поставляется с gpsd, является лучшим модулем для нас. Для начала посмотрите здесь (сайт перенаправляет на спам).

модуль gps приходит с gpsd имеет некоторые очень полезные функции. Первый-получение данных из gpsd и преобразование этих данных в полезную структуру данных. Затем модули дают вам доступ к вашей скорости и вашему текущему курсу относительно Севера. Также включена функция для вычисления расстояния между двумя координатами на земле с учетом сферической природы Земли.

функции, которые отсутствуют для нашего специального случая:

  • вычисление заголовка между точками. Значит я в точку с видом на север до какой степени я должен повернуться лицом того, что я хочу перейти.

  • принимая данные первой функции и нашего текущего заголовка, чтобы вычислить поворот в градусах, которые мы должны сделать чтобы столкнуться с желаемой точкой (не важно, потому что это в основном только вычитание)

самая большая проблема для работы с этой библиотекой заключается в том, что это в основном оболочка для gpsd, поэтому, если вы программируете на другой ОС, то вы gpscode должны работать, как Windows или MacOS, вы не можете запустить код или установить модуль.


Я не уверен, что понимаю ваши точные требования, но, в зависимости от вашего устройства и, кажется, есть много возможных кандидатов, таких как:

Если вы имеете в виду, что вы уже получили выход блока GPS и просто должны проанализировать его и c, я подозреваю, что один или несколько из приведенных выше примеров (к сожалению, я не пробовали) будет содержать хорошо изолированные модули для этой задачи, которые, в зависимости от условий лицензирования, вы можете перепрофилировать;это так вопрос может также помочь, если это то, что вы делаете.


книга "начало визуализации Python" включает в себя именно такой пример - разбор данных GPS и вывод скорости и местоположения из него. Его исходный код доступен в интернете по адресуhttp://www.apress.com/


предложения 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=6372km). Эта фактическая строка взята из программы LabView, которая у меня была, но синтаксис очень похож на Python (возможно, проверьте отдела оператор, вы могли бы хотите сделать " от будущее импорт дивижн".

кроме того, 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 для Юга и Востока. Опять же, следите за разделением.

проверка границы, я думаю, самая легкая часть. Если у вас уже есть позиции в радианах или градусах, Вы можете просто проверить, находится ли широта между двумя границами lat, и сделать то же самое для долготы.

напишите обертку вокруг всего, и у вас есть ваша библиотека GPS:)


большинств хорошие блоки GPS (мы используем Oncore M12M) фактически передадут вам, как выход, ваши скорость и заголовок. Сначала я бы проверил документацию вашего GPS-приемника, чтобы узнать, уже ли эта информация отправляется, или если такое сообщение может быть включено. По моему опыту, эти данные обычно являются частью стандартной телеметрии, которую вам даст приемник.

Если это не работает, я думаю, что лучше всего использовать детали WGS-84 (система координат GPS) для получения фактического (x, y, z) координата, а затем разница его со следующим, чтобы найти свой курс и принять величину разницы в течение интервала времени, чтобы найти вашу скорость. Некоторые подробности здесь: http://topex.ucsd.edu/geodynamics/14gravity1_2.pdf

Если вы действительно хотите пакет, который делает все это, я думаю, pyEphem довольно хорошо, хотя я думаю, что вы могли бы сэкономить немного времени на поиск и получить некоторые хорошие знания, написав его самостоятельно.

(Извините, если бесполезно, во-первых время плаката, все еще учимся стекать переполнение)