используйте gpsd или cgps, чтобы вернуть широту и долготу, а затем выйти

используйте gpsd или cgps, чтобы вернуть широту и долготу, а затем выйти

07.02.2015 11:51:32 Просмотров 19 Источник

Я хотел бы получить простой способ запроса моего местоположения gps с помощью USB-ключа из командной строки unix.

Прямо сейчас я знаю, что у меня есть функционирующая программно-аппаратная система, о чем свидетельствует успех команды cgps, показавшей мне мою позицию. Теперь я хотел бы иметь возможность делать короткие запросы на мое местоположение gps (lat,long in decimals) из командной строки. мой USB-последовательный путь - это /dev/ttyUSB0, и я использую глобальный SAT-ключ, который выводит общие предложения NMEA

Как я могу добиться этого?

Спасибо

У вопроса есть решение - Посмотреть?

Ответы - используйте gpsd или cgps, чтобы вернуть широту и долготу, а затем выйти / use gpsd or cgps to return latitude and longitude then quit

Является ответом!
Nodak

08.02.2015 04:11:18

telnet 127.0.0.1 2947

?WATCH={"enable":true}

?POLL;

дает вам свой ответ, но вам все равно нужно отделить зерна от плевел. Он также предполагает, что gps не приходит с холодного старта.

Короткий сценарий может быть вызван, например:;

#!/bin/bash
exec 2>/dev/null
# get positions
gpstmp=/tmp/gps.data
gpspipe -w -n 40 >$gpstmp"1"&
ppid=$!
sleep 10
kill -9 $ppid
cat $gpstmp"1"|grep -om1 "[-]\?[[:digit:]]\{1,3\}\.[[:digit:]]\{9\}" >$gpstmp
size=$(stat -c%s $gpstmp)
if [ $size -gt 10 ]; then
   cat $gpstmp|sed -n -e 1p >/tmp/gps.lat
   cat $gpstmp|sed -n -e 2p >/tmp/gps.lon
fi
rm $gpstmp $gpstmp"1"  

Это приведет к выводу 40 предложений, а затем greplat/lon во временные файлы, а затем очистить.

Или, из репозитория GPS3 github поместите Альфа gps3.pyв том же каталоге, что и следующий скрипт Python2.7-3.4, и выполните его.

from time import sleep
import gps3

the_connection = gps3.GPSDSocket()
the_fix = gps3.DataStream()

try:
    for new_data in the_connection:
        if new_data:
            the_fix.refresh(new_data)
        if not isinstance(the_fix.TPV['lat'], str):  # check for valid data
            speed = the_fix.TPV['speed']
            latitude = the_fix.TPV['lat']
            longitude = the_fix.TPV['lon']
            altitude = the_fix.TPV['alt']
            print('Latitude:', latitude, 'Longitude:', longitude)
            sleep(1)
except KeyboardInterrupt:
    the_connection.close()
    print("\nTerminated by user\nGood Bye.\n")

Если вы хотите, чтобы он закрылся после одной итерации, также import sys, а затем замените sleep(1)на sys.exit()

https://stackoverflow.com/questions/28387230/use-gpsd-or-cgps-to-return-latitude-and-longitude-then-quit/28389456#comment45116869_28389456
мой USB-последовательный путь - это /dev/ttyUSB0. Можете ли вы создать этот ответ, чтобы работать с этим?
https://stackoverflow.com/questions/28387230/use-gpsd-or-cgps-to-return-latitude-and-longitude-then-quit/28389456#comment45116889_28389456
Для сценария оболочки я изменил строку gpstemp на "/dev/ttyUSB0" и запустил ее, но программа ничего не вернула. Хотя ошибок нет
https://stackoverflow.com/questions/28387230/use-gpsd-or-cgps-to-return-latitude-and-longitude-then-quit/28389456#comment45117382_28389456
Вы используете gpsd для предоставления данных. gpspipeвызывает gpsd для передачи выходных данных во временный файл (gpstmp=/tmp/gps.data). Вы не видите никаких ошибок, потому что они (будут) посланы в эфир. Вставьте баш скрипт, например, ll.sh ; вызов скрипта sh ./ll.sh перейдите в /tmp/gps.lat& /tmp/gps.lonдля вашего вывода...или удалите перенаправление файла (>/tmp/gps.latи др.) для вывода в терминал.
https://stackoverflow.com/questions/28387230/use-gpsd-or-cgps-to-return-latitude-and-longitude-then-quit/28389456#comment45131077_28389456
хорошо, вариант-nявляется ключевым. gpspipe -r -n 40 > temp.txtзаставил меня начать. спасибо
eadmaster

26.01.2020 03:22:34

гораздо более простое решение:

$ gpspipe -w -n 10 |   grep -m 1 lon
{"class":"TPV","device":"tcp://localhost:4352","mode":2,"lat":11.1111110000,"lon":22.222222222}

источник

Закрыть X