elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Mensajes
Páginas: [1]
1  Comunicaciones / Dispositivos Móviles (PDA's, Smartphones, Tablets) / Google Maps + GPS en: 30 Septiembre 2013, 05:56 am
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

Código:
<?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);



?>

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

Código:
$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

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

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

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

Código:
<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:

Código:
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:

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";
}
//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  :(

Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines