Google Maps + GPS

Iniciado por SVR91, 30 Septiembre 2013, 05:56 AM

0 Miembros y 1 Visitante están viendo este tema.

SVR91

Saludos, tengo un dispositivo gps el cual he configurado para recibir únicamente comandos GPRMC lo que quiero es utilizar el Google Maps para que reciba esos comandos cada 3 segundos o un determinado tiempo para que pueda hacer el rastreo en el Google Maps, sinceramente ya he buscado mucho en "San Google" pero me quedo asi de:  :huh: por que encuentro que muchos se rinden y se van con la geolocalización de los navegadores (Definitivamente esto no quiero usar, si ya tengo mi dispositivo gps)

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

<?php
set_time_limit
(10);
// Converts DMS ( Degrees / minutes / seconds ) 
// to decimal format longitude / latitude
function DMStoDEC($dms$longlat){
    if(
$longlat == 'lattitude'){
      
$deg substr($dms02);
      
$min substr($dms28);
      
$sec '';
    }
    if(
$longlat == 'longitude'){
      
$deg substr($dms03);
      
$min substr($dms38);
      
$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($buffer06)=='$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);



?>


Si recibo la información del Puerto directamente con esta linea:

$gps = fopen("/dev/ttyUSB0", "r"); //Leerlo desde el puerto

Procesa esta información y nunca se detiene... pero con un cat /dev/ttyUSB0 >> gps.txt y lo leo desde ese archivo

$gps = fopen("/home/saul/Escritorio/gps.txt", "r"); //Leerlo desde ubuntu

Y me ubica en el ultimo punto captura del documento con esto:


//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:

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!'
         });

       }


con el html en la marca del <body> asi:


<body onload="initialize()">


Y como les digo desde el archivo sin ningún problema pero desde el puerto tengo problemas...

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:

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);
)


Y ni si quiera me muestra el Google Maps, e intente en el PHP con un sleep dentro del while:


//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);
}


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  :(

Conoce lo que se hacer y compartamos conocimientos desde: http://www.webonactivo.blogspot.com/

Shell Root

Hace como 1 año estaba realizando un proyecto parecido al que tienes, usaba win$, aunque no tiene nada que ver... El caso es qué,

Tenia una base de datos en postgresql, -supongo que ese motor de base de datos, por ser agil-, y se realizo un daemon en C, el cual capturaba los datos cada X tiempo, generaba un archivo CSV y después lo subía a la base de datos, como tambien dependiendo de un parámetro, los subía directamente a la base de datos.

La ultima acción realizaba muchas peticiones al motor de base de datos, pero era para verlo en tiempo real.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.