Writing /var/lib/dokuwiki/data/meta/teaching/ie0117/proyectos/2013/ii/proyecto_gpg_-_drivecr/coordenadasgps-cel.meta failed
teaching:ie0117:proyectos:2013:ii:proyecto_gpg_-_drivecr:coordenadasgps-cel
This code transform the NMEA data that ShareGPS send to the port 50000 in latitude and longitude coordinates that Openstreetmaps can recognize.
#!/bin/bash # -*- ENCODING: UTF-8 -*- ./adb forward tcp:50000 tcp:50000 ./gpsread2.py exit
#!/usr/bin/python # -*- coding: utf-8 -*- ############################## gpsread2.py ############################################### #********** #sudo apt-get install python-mechanize python-beautifulsoup #**********Revisar si el webbrowser esta instalado import socket, string, sys, mechanize, webbrowser from bs4 import BeautifulSoup try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('localhost', 50000)) except : print '\n\n\n************No se ha establecido la comunicacion con el GPS********' raise SystemExit### def Muestra(datosa,datosc): #Muestras los datos obtenidos por el gps lat1, long1,gl,ml,sl,glo,mlo,slo= DEC (datosa[2],datosa[4]) direc= obtdirec() opensm(lat1,long1) #print '[-] Latitud Hemisferio: ',gl,' grados ',ml, ' minutos',sl,' segundos.',datosa[3] print '\n[-] Las coordenadas son: ' , lat1, long1 print '\n[-] La rápidez es: ', float(datosc)[7]*1.85, 'km/h' print '\n[-] La dirección es: '+direc save = raw_input('Desea guardar los datos?: (YES/no) ') if save == "" or save == 'YES' or save == 'yes' or save == 'Yes' or save == 'Y' or save == 'y': saved(lat1,long1,float(datosc)[7]*1.85,direc ) opensm (str(lat1), str(lon1)) def obtdirec(): #Extrae la direccion de los datos NMEA infov=s.recv(250) while '$GPGMC' not in infov: infov=s.recv(250) indv=info.find('$GPGMC') #Encuentra el inicio de $GPGGA $ endv=info.find('$',indv+6,) #Encuentra el final strgv = infov[indv:endv].rsplit(',') #Separa los elementos del strin print '[-] Hora actual: '+datos[0][0:2]+':'+datos[0][2:4]+':'+datos[0][4:6] azimut=int(datos[7]) rumbo='' if(azimut==0): rumbo='Norte' elif(azimut<90 and azimut>0): rumbo='Noreste' elif(azimut==90): rumbo='Este' if(azimut>90 and azimut < 180): rumbo='Sureste' if(azimut==180): rumbo='Sur' if(azimut>180 and azimut<360): rumbo='Suroeste' if(azimut==270): rumbo='Oeste' if(azimut>270 and azimut<360): rumbo='Suroeste' return (rumbo) def saved(lat1,long1,rapid,direc ): #Guarda los datos en un archivo llamado listGPS.txt en el directorio donde est[a el script de python try: desc=raw_input('\n\n\tDescripcion: ') f= open ('listGPS.txt', 'r') if f.readline() == "": f.close() f= open ('listGPS.txt', 'w') f.write ('\t\t\tLista de coordenadas GPS\n') f.close() else: pass f= open ('listGPS.txt', 'a') f.write ('\n---->\t'+lat1+'\t'+long1+'\t'+rapid+' km/h '+direc+'\t\t'+desc ) f.close() print '\n\nSe guardaron los datos en listGPS.txt' except: print '\n\n\n Error en la escritura de los datos.' def DEC (gms1,gms2): #Convierte los datos de Lat y Long grados, minutos y segundos en decimales seplat = gms1.rsplit('.') seplong= gms2.rsplit('.') gl=float(seplat[0][:2]) ml=float(seplat[0][2:]) sl=float('0.'+seplat[1])*60 glo=float(seplong[0][:3]) mlo=float(seplong[0][3:]) slo=(float('0.'+seplong[1])*60) lat= gl+(ml/60)+(sl/3600) #No hago casos para saber que signo llevan la latidud y la longitud, debido a q es restringido a Costa Rica, por tanto los signos no van a cambiar longi=-(glo+mlo/60+(slo/3600)) return (lat,str(longi),gl,ml,sl,glo,mlo,slo) def opensm(lat, lon): #Abre la posicion en OSM try: url= 'http://nominatim.openstreetmap.org/search.php' br = mechanize.Browser() br.set_handle_robots(False) # ignore robots br.set_handle_refresh(False) # can sometimes hang without this response = br.open(url) #for form in br.forms(): #Encuentra formularios #print "Form name:", form.name #print form br.form = list(br.forms())[0] # seleccion del formulario br.set_all_readonly(False) # allow everything to be written to control1 = br.form.find_control("q") #Selecciona el control por nombre control2 = br.form.find_control ("polygon") ll= lat+' '+lon control1.value= ll control2.value=['1'] resp = br.submit() response.close() html = br.response().read() # soup = BeautifulSoup(html) for link in soup.find_all(): x=(link.get('href')) #print "------>",type( x), x if type(x)== str: for i in lat: if i in x: es = True else: es = False if es == True: linkm=x break else: pass else: pass webbrowser.open_new(linkm) #Abre el link obtenido except: print '\n\n\n Revise la conexión a internet.' def detec(lectura): if lectura[2]== '': print 'NO HAY SEÑAL DE SATELITES, ASEGURESE DE NO ESTAR EN LUGARES CUBIERTOS' resp= raw_input('\n\n\nQuiere intentarlo de nuevo?: (YES/no) ') if resp == '' or resp == 'YES' or resp == 'yes' or resp == 'Yes' or resp == 'Y' or resp== 'y': try: main() except IndexError: main() else: return raise SystemExit else: pass def main(): info=s.recv(250) while '$GPGGA' not in info: info=s.recv(100) print info ind=info.find('$GPGGA') #Encuentra el inicio de $GPGGA en el codigo NMEA obtenido end=info.find('$',ind+6,) #Encuentra el final strg = info[ind:end].rsplit(',') #Separa los elementos del string resultante print strg detec(strg) #Detecta la señal de los satélites Muestra(strg,strgc,strgv) #opensm('10.08985','-84.47398') main()
***The problem in that method is about no satellites signal, in that case shareGPS sends empty NMEA data.
teaching/ie0117/proyectos/2013/ii/proyecto_gpg_-_drivecr/coordenadasgps-cel.txt · Last modified: 2022/09/20 00:08 (external edit)