使用gpsd或cgps返回纬度和经度然后退出

时间:2015-02-07 20:51:33

标签: unix gps gpsd

我想用一种简单的方法从unix命令行中的usb加密狗查询我的gps位置。

现在,我知道我有一个正常运行的软件和硬件系统,cgps命令成功告诉我我的位置就证明了这一点。我现在希望能够从命令行对我的gps位置(lat,长十进制)做出简短请求。我的usb序列的路径是/dev/ttyUSB0,我正在使用全局Sat加密狗输出通用的NMEA句子

我怎么能做到这一点?

由于

4 个答案:

答案 0 :(得分:2)

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个句子,然后grep lat / lon到临时文件,然后清理。

或者,从GPS3 github repository将alpha 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()

答案 1 :(得分:1)

更简单的解决方案:

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

source

答案 2 :(得分:0)

eadmaster的答案上进行改进是一种更为优雅的解决方案:

gpspipe -w -n 10 | jq -r '.lon' | grep "[[:digit:]]" | tail -1

说明:

  1. gpsd 询问10倍数据
  2. 使用 jq
  3. 解析接收到的JSON
  4. 我们只需要数字值,因此请使用 grep
  5. 进行过滤
  6. 我们想要最后一个收到的值,所以为此使用 tail

示例:

$ gpspipe -w -n 10 | jq -r '.lon' | grep "[[:digit:]]" | tail -1
28.853181286

答案 3 :(得分:0)

您可以使用我的脚本:gps.sh返回“ x,y”

#!/bin/bash
x=$(gpspipe -w -n 10 |grep lon|tail -n1|cut -d":" -f9|cut -d"," -f1)
y=$(gpspipe -w -n 10 |grep lon|tail -n1|cut -d":" -f10|cut -d"," -f1)
echo "$x,$y" 

sh gps.sh 43.xx4092000,6.xx1269167