Какую библиотеку GPS вы порекомендуете для Python? - PullRequest
8 голосов
/ 05 июня 2009

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

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

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

Ответы [ 5 ]

9 голосов
/ 10 июня 2009

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

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

В нашем особом случае отсутствуют функции:

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

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

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

4 голосов
/ 05 июня 2009

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

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

3 голосов
/ 05 июня 2009

Предложения 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:)

3 голосов
/ 05 июня 2009

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

1 голос
/ 23 октября 2015

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

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

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

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

...