Lo estoy haciendo con linux (diran por que en linux, si hay personas que utilizan mas el S.O. windows, lo hago por que mis intenciones son que me funcione en linux por cuestiones de proyecto)
Utilizo un parser de NMEA a GPRMC del cual
Código:
Si recibo la información del Puerto directamente con esta linea:<?php set_time_limit(10); // Converts DMS ( Degrees / minutes / seconds ) // to decimal format longitude / latitude function DMStoDEC($dms, $longlat){ if($longlat == 'lattitude'){ $deg = substr($dms, 0, 2); $min = substr($dms, 2, 8); $sec = ''; } if($longlat == 'longitude'){ $deg = substr($dms, 0, 3); $min = substr($dms, 3, 8); $sec=''; } return $deg+((($min*60)+($sec))/3600); } //Set timezone date_default_timezone_set('America/Cancun'); //Connect to GPS $gps = fopen("/dev/ttyUSB0", "r"); //Leerlo desde el puerto //$gps = fopen("/home/saul/Escritorio/gps.txt", "r"); //Leerlo desde ubuntu saul //$gps = fopen("/home/pi/Desktop/gps.txt", "r"); //Leer archivo en RPi //Read data from GPS while(!feof($gps)){ $buffer = fgets($gps); if(substr($buffer, 0, 6)=='$GPRMC'){ //echo $buffer."-----------------------"."\n"; $gprmc = explode(',',$buffer); $data['timestamp'] = strtotime('now'); $data['sat_status'] = $gprmc[2]; $data['lattitude_dms'] = $gprmc[3]; $data['lattitude_decimal'] = DMStoDEC($gprmc[3],'lattitude'); $data['lattitude_direction'] = $gprmc[4]; $data['longitude_dms'] = $gprmc[5]; $data['longitude_decimal'] = DMStoDEC($gprmc[5],'longitude'); $data['longitude_direction'] = $gprmc[6]; if($gprmc[6]=='W'){ $data['longitude_decimal']= '-'.DMStoDEC($gprmc[5],'longitude'); } $data['speed_knots'] = $gprmc[7]; $data['bearing'] = $gprmc[8]; $data['google_map'] = 'http://maps.google.com/maps?q='.$data['lattitude_decimal'].','.$data['longitude_decimal']; /*print_r($data);*/ echo "\n\n"; } } fclose($gps); ?>
Código:
Procesa esta información y nunca se detiene... pero con un cat /dev/ttyUSB0 >> gps.txt y lo leo desde ese archivo$gps = fopen("/dev/ttyUSB0", "r"); //Leerlo desde el puerto
Código:
Y me ubica en el ultimo punto captura del documento con esto:$gps = fopen("/home/saul/Escritorio/gps.txt", "r"); //Leerlo desde ubuntu
Código:
//Read data from GPS while(!feof($gps)){ $buffer = fgets($gps); if(substr($buffer, 0, 6)=='$GPRMC'){ //echo $buffer."-----------------------"."\n"; $gprmc = explode(',',$buffer); $data['timestamp'] = strtotime('now'); $data['sat_status'] = $gprmc[2]; $data['lattitude_dms'] = $gprmc[3]; $data['lattitude_decimal'] = DMStoDEC($gprmc[3],'lattitude'); $data['lattitude_direction'] = $gprmc[4]; $data['longitude_dms'] = $gprmc[5]; $data['longitude_decimal'] = DMStoDEC($gprmc[5],'longitude'); $data['longitude_direction'] = $gprmc[6]; if($gprmc[6]=='W'){ $data['longitude_decimal']= '-'.DMStoDEC($gprmc[5],'longitude'); } $data['speed_knots'] = $gprmc[7]; $data['bearing'] = $gprmc[8]; $data['google_map'] = 'http://maps.google.com/maps?q='.$data['lattitude_decimal'].','.$data['longitude_decimal']; /*print_r($data);*/ echo "\n\n"; }} fclose($gps);
Y en el javascript mando las coordenadas que me hace el parser hecho en php asi:
Código:
con el html en la marca del <body> asi:function initialize() { var myLatlng = new google.maps.LatLng(<?php echo $data['lattitude_decimal'];?>,<?php echo $data['longitude_decimal'];?>); var mapOptions = { center: myLatlng, zoom: 16, mapTypeId: google.maps.MapTypeId.ROADMAP } var map = new google.maps.Map(document.getElementById("map_canvas"),mapOptions); var marker = new google.maps.Marker({ position: myLatlng, map: map, title: 'Hello World!' }); }
Código:
Y como les digo desde el archivo sin ningún problema pero desde el puerto tengo problemas...<body onload="initialize()">
Lo que quiero es hacer que cada determinado tiempo me lea desde el puerto para que primero no procese toda la información que va recibiendo y pueda hacer un Tracking (Rastreo) sin ningún problema con el google maps, solo eso me falta.
¡INTENTE! con el javascript el settimeout asi:
Código:
Y ni si quiera me muestra el Google Maps, e intente en el PHP con un sleep dentro del while:function gps(){ setTimeout( function initialize() { var myLatlng = new google.maps.LatLng(<?php echo $data['lattitude_decimal'];?>,<?php echo $data['longitude_decimal'];?>); var mapOptions = { center: myLatlng, zoom: 16, mapTypeId: google.maps.MapTypeId.ROADMAP } var map = new google.maps.Map(document.getElementById("map_canvas"),mapOptions); var marker = new google.maps.Marker({ position: myLatlng, map: map, title: 'Hello World!' }); },3000); )
Código:
Y no me funciona... practicamente lo que quiero es estar recibiendo la información desde el puerto (donde tengo conectado mi dispositivo gps) y procesarlo cada 3 segundos con el google maps para que pueda realizar el rastreo en "Tiempo real", alguien que sepa? y que me pueda ayudar porfavor u.u no encuentro la solución a este (considero yo...) pequeño detalle :( //Read data from GPS while(!feof($gps)){ $buffer = fgets($gps); if(substr($buffer, 0, 6)=='$GPRMC'){ //echo $buffer."-----------------------"."\n"; $gprmc = explode(',',$buffer); $data['timestamp'] = strtotime('now'); $data['sat_status'] = $gprmc[2]; $data['lattitude_dms'] = $gprmc[3]; $data['lattitude_decimal'] = DMStoDEC($gprmc[3],'lattitude'); $data['lattitude_direction'] = $gprmc[4]; $data['longitude_dms'] = $gprmc[5]; $data['longitude_decimal'] = DMStoDEC($gprmc[5],'longitude'); $data['longitude_direction'] = $gprmc[6]; if($gprmc[6]=='W'){ $data['longitude_decimal']= '-'.DMStoDEC($gprmc[5],'longitude'); } $data['speed_knots'] = $gprmc[7]; $data['bearing'] = $gprmc[8]; $data['google_map'] = 'http://maps.google.com/maps?q='.$data['lattitude_decimal'].','.$data['longitude_decimal']; /*print_r($data);*/ echo "\n\n"; } //sleep for 3 seconds sleep(3); }