Aqui explica el formato GPRMC: http://gonzalo.aro.c...standard-gprmc/
La aplicación que utilizo es esta, y se puede encontrar en el market de android:
https://market.andro...gps2opengtsfree
Para recoger los datos he subido a mi web un poco de código php que se encarga de recibir los datos y guardarlos en una base de datos
<?php
error_reporting(0);
main();
?>
<?php
function remoteip()
{
$ip = 0;
if (!empty($_SERVER["HTTP_CLIENT_IP"]))
$ip = $_SERVER["HTTP_CLIENT_IP"];
if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
$iplist = explode(", ", $_SERVER["HTTP_X_FORWARDED_FOR"]);
if ($ip)
{
array_unshift($iplist, $ip);
$ip = 0;
}
foreach($iplist as $v)
if (!eregi("^(192\.168|172\.16|10|224|240|127|0)\.", $v))
return $v;
}
return ($ip) ? $ip : $_SERVER["REMOTE_ADDR"];
}
function checksum($str)
{
$result = 0;
for ($i=1;$i<strlen($str);$i++)
{
if ($str[$i]=='*')
return $result;
$result = $result ^ ord($str[$i]);
}
return -1;
}
function main()
{
if ((isset($_GET['acct'])) && (isset($_GET['dev'])) && (isset($_GET['gprmc'])))
{
$host = remoteip();
$keys = explode(',', 'command,time,fix,lat,lath,lon,lonh,knots,bearing,date,empty,checksum');
$values = explode(',', $_GET['gprmc']);
if ($data = array_combine($keys, $values))
{
if ($data['command'] == '$GPRMC' )
if (hexdec($data['checksum'])==checksum($_GET['gprmc']))
{
$con = mysql_connect("localhost","usuario","password");
if ($con)
{
mysql_select_db("tracker", $con);
$sql = sprintf("INSERT INTO updates (acct,dev,host,time,fix,lat,lath,lon,lonh,date) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
mysql_real_escape_string($_GET['acct'],$con),
mysql_real_escape_string($_GET['dev'],$con),
mysql_real_escape_string($host,$con),
mysql_real_escape_string($data['time'],$con),
mysql_real_escape_string($data['fix'],$con),
mysql_real_escape_string($data['lat'],$con),
mysql_real_escape_string($data['lath'],$con),
mysql_real_escape_string($data['lon'],$con),
mysql_real_escape_string($data['lonh'],$con),
mysql_real_escape_string($data['date'],$con)
);
if (mysql_query($sql,$con))
{
echo 'OK';
return;
}
mysql_close($con);
}
}
}
}
if (isset($_GET['cmd']))
{
if (($_GET['cmd']=='last') && (isset($_GET['acct'])) && (isset($_GET['dev'])) && (isset($_GET['count'])) && (is_numeric($_GET['count'])))
{
$con = mysql_connect("localhost","usuario","password");
if ($con)
{
mysql_select_db("tracker", $con);
$sql = sprintf("select lath,lat,lonh,lon,timestamp,host,date,time from updates where acct='%s' and dev='%s' order by timestamp desc limit %s",
mysql_real_escape_string($_GET['acct'],$con),
mysql_real_escape_string($_GET['dev'],$con),
mysql_real_escape_string($_GET['count'],$con));
if ($query = mysql_query($sql,$con))
{
header('Content-type: text/plain');
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
echo '<kml xmlns="http://www.opengis.net/kml/2.2">'."\n";
echo " <Document>\n";
while($thisrow=mysql_fetch_row($query))
{
if (is_numeric($thisrow[1]) && is_numeric($thisrow[3]))
{
$lat=((float)substr($thisrow[1],0,2)) + (((float)substr($thisrow[1],2,16))/60);
$lon=((float)substr($thisrow[3],0,3)) + (((float)substr($thisrow[3],3,16))/60);
echo " <Placemark>\n";
echo sprintf(" <name>%s</name>\n",htmlentities($thisrow[4]));
echo sprintf(" <description>%s / %s / %s</description>\n",
htmlentities($thisrow[5]),
htmlentities($thisrow[6]),
htmlentities($thisrow[7]));
echo " <Point>\n";
echo sprintf(" <coordinates>%s%f,%s%f</coordinates>\n",
$thisrow[2]=='E'?'':'-',$lon,
$thisrow[0]=='N'?'':'-',$lat);
echo " </Point>\n";
echo " </Placemark>\n";
}
}
echo " </Document>\n";
echo "</kml>\n";
return;
}
mysql_close($con);
}
}
}
echo 'ERROR';
}
?>
Para mostrar los datos estaba pensando en usar los componentes de Cadetill y hacer un bonito programa en delphi, pero todavía no he podido revisarlos con detenimiento, así que he optado por algo mas sencillo generar un fichero KML que pude ser interpretado por google maps
Tutorial sobre ficheros KML: http://code.google.c...on/kml_tut.html
El código para generar el fichero KML esta incluido en el código PHP que puse más arriba, solamente hay que pasar como parametros el nombre de usuario, la id del dispositivo y el numero de posiciones que queremos que nos devuelva y automáticamente se generara el fichero con las ultimas posiciones registradas.
Por ejemplo, el siguiente enlace genera un fichero KML con la ruta que he seguido en mi ultimo paseo:
http://delphi.jmrds....oane&dev=test01
Y una vez que tenemos el fichero solamente nos queda cargarlos en el google maps, para eso solo le tenemos que pasar la ruta como cadena de búsqueda, algo así:
http://maps.google.c...oane&dev=test01
Por si tenéis curiosidad la ruta que se muestra (al menos a dia de hoy) soy yo yendo a comprar un libro (el ultimo de Santiago Posteguillo)
Saludos