我对python有点新意,我正在努力完成一项任务。
我想要实现的目标
我有这个代码从while循环中的一个线程收集GPS数据,我将这些数据发布到我的网络服务器。
问题
这里的问题是,在第一次运行时,纬度/经度总是为零,之后是正确的值。 while循环从5-10开始随机抽取gps坐标,它们都写在我的数据库中。
这是不正确的行为,因为我只想在任何时间点将一个结果实例写入数据库。我尝试在while循环中放入一个IF语句,说“如果latitude> 0将结果上传到数据库并且中断,则继续循环,但我似乎得到了错误的语法。
正如您所看到的那样,发布到我的数据库的代码位于while循环中,所以
try:
gpsp.start() # start it up
print ' GPS'
while True:
print ' GPS reading'
print 'latitude ' , gpsd.fix.latitude
print 'longitude ' , gpsd.fix.longitude
if gpsd.fix.latitude > 0:
payload={'id':"P8",'lat':gpsd.fix.latitude,'lon':gpsd.fix.longitude}
r= requests.post("http://my-server.com/Pi/Loc.php",data=payload)
break
elif gpsd.fix.latutde=0:
except (KeyboardInterrupt, SystemExit): #when you press ctrl+c
print "\nKilling Thread..."
gpsp.running = False
gpsp.join() # wait for the thread to finish what it's doing
print "Done.\nExiting."
任何帮助都将不胜感激。
我的问题不是“捕获”坐标,但我正在寻找帮助纠正语法只记录一条记录,我知道我所显示的代码有点不正确,这正是我所拥有的现在
这是运行代码的结果(我修复了缩进并删除了if)。实际上有更多的行,但我为了简单起见删除了它们。 我只是想找到一种方法来选择最后一个到我的网络服务器
GPS
GPS reading
latitude 0.0
longitude 0.0
GPS reading
latitude **.292548333
longitude **.379363333
GPS reading
latitude **.292548333
longitude **.379363333
GPS reading
latitude **.292546667
longitude **.379365
GPS reading
latitude **.292546667
longitude **.379365
GPS reading
latitude **.292546667
longitude **.379365
GPS reading
latitude **.292546667
longitude **.379365
GPS reading
latitude **.292503333
longitude **.379376667
GPS reading
latitude **.292498333
longitude **.379376667
答案 0 :(得分:0)
如果您只想写一个结果,请更改循环条件:
try:
gpsp.start()
except SomethingHere:
print('Oops, GPS failed!')
sys.exit()
while not gpsp.fix.latitude:
time.sleep(4) # Pause till the GPS has obtained a fix
lat = gpsp.fix.latitude
lon = gpsp.fix.longitude
payload = {'vehic':"PJ048",'lat':lat,'lon':lon}
r = requests.post("http://my-server.com/Pi/Loc.php",data=payload)
r.raise_for_status()
答案 1 :(得分:0)
对于下一个问题(运行多个脚本),无需更改服务器,您可以删除CRON条目,并从/etc/init.d中的服务运行它。 在循环时永远添加delay()方法和另一个方法:
try:
gpsp.start()
except SomethingHere:
print('Oops, GPS failed!')
sys.exit()
def delay():
time.sleep(60) # sleep 60 seconds
while True:
while not gpsp.fix.latitude:
time.sleep(4) # Pause till the GPS has obtained a fix
lat = gpsp.fix.latitude
lon = gpsp.fix.longitude
payload = {'vehic':"PJ048",'lat':lat,'lon':lon}
r = requests.post("http://my-server.com/Pi/Loc.php",data=payload)
r.raise_for_status()
delay()