Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/11/2015, 18:51
asturver
 
Fecha de Ingreso: noviembre-2011
Mensajes: 8
Antigüedad: 12 años, 5 meses
Puntos: 1
Calcular tiempo estimado de llegada

Hola a tod@s. Estoy realizando unas pruebas con [URL="https://github.com/herverenault/Self-Hosted-GPS-Tracker"]"Self-hosted-gps-tracker"[/URL] y la verdad es que funciona bastante bien. Envio las coordenadas desde android al servidor, las almaceno en un fichero.txt y luego las extraigo mediante php para mostrarlas en un mapa (puede ser osm / google maps... etc). Este es el código que utilizo:

Código HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset=utf-8>
<title>I am here</title>

<!-- Google Maps version -->
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>

<!-- OpenStreetMap + Leaflet.js version -->
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.3/leaflet.css" />
<script src="http://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.3/leaflet.js"></script>

</head>
<body>

<h1>I was here on <span id="date"></span></h1>
<p>(last known position where I had a GPS signal, a network connection, and some battery power)</p>

<h2>Google Maps version</h2>
<div id="googlemap" style="width: 800px; height: 600px">
    <div id="interlude" style="text-align: center; line-height: 600px; font-weight: bold; border: 1px dotted grey; background-color: #eee;">
        Map currently unavailable.
    </div>
</div>

<h2>OpenStreetMap + Leaflet.js version</h2>
<div id="openstreetmap" style="width: 800px; height: 600px">
    <div id="interlude" style="text-align: center; line-height: 600px; font-weight: bold; border: 1px dotted grey; background-color: #eee;">
        Map currently unavailable.
    </div>
</div>

<script>
var gmap, gmarker;
var osmap, osmarker;
var dte, lat, lon, utc;

function createGMap() {
    var latlng = new google.maps.LatLng(lat, lon);
    var myOptions = {
        zoom: 12,
        center: latlng,
        mapTypeControl: false,
        navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    gmap = new google.maps.Map(document.getElementById("googlemap"), myOptions);
    gmarker = new google.maps.Marker({
          position: latlng,
          map: gmap,
          title:"I'm here"
    });
    google.maps.event.addListener(gmarker, "click", function(e) {
        alert("GPS coordinates:\nLatitude: " + gmarker.getPosition().lat() + "\nLongitude: " + gmarker.getPosition().lng());
    });
}

function createOSMap() {
    osmap = L.map('openstreetmap').setView([lat, lon], 12);

    L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
        attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
    }).addTo(osmap);

    osmarker = L.marker([lat, lon]);

    osmarker
        .addTo(osmap)
        .bindPopup("<p>GPS coordinates :</p><p>" + lat + ", " + lon + "</p>");
}

function updateGMap() {
    var latlng = new google.maps.LatLng(lat, lon);
    gmarker.setPosition(latlng);
    gmap.panTo(latlng);
}

function updateOSMap() {
    osmarker.setLatLng([lat, lon]);
    osmarker.bindPopup("<p>GPS coordinates :</p><p>" + lat + ", " + lon + "</p>");
    osmap.panTo([lat, lon]);
}

function doRefresh() {
    var xhr;
    try {
        xhr = new XMLHttpRequest();
    } catch (e) {
        xhr = false;
    }

    xhr.onreadystatechange  = function() {
        if (xhr.readyState  == 4) {
            if (xhr.status  == 200) {
                var param = xhr.responseText.split('_');
                dte = param[0];
                lat = param[1];
                lon = param[2];
                utc = param[3];
                if (dte && lat && lon) {
                    if (!gmap) {
                        createGMap();
                    } else {
                        updateGMap(lat, lon);
                    }
                    if (!osmap) {
                        createOSMap();
                    } else {
                        updateOSMap();
                    }
                    if (utc) {
                        utc_dte = new Date(parseInt(utc));
                        document.querySelector("#date").innerHTML = utc_dte.toLocaleString();
                    } else {
                        document.querySelector("#date").innerHTML = dte + " (server time)";
                    }
                }
            }
        }
    };
    xhr.open("GET", "i-am-here-position.php?" + Math.random(),  true);
    xhr.send(null);
    setTimeout('doRefresh()', 30000);
}

doRefresh();

</script> 
La cuestión es que me gustaría saber la manera de lograr averiguar el tiempo de llegada respecto al último punto geolocalizado y otro marcador en el mapa y mostrarlo ¿alguien sabe como hacerlo?

También se me ocurre que se podría aprovechar la variable latlng (que está definida por la latitud y longitud obtenida mediante geoposicionamiento en el terminal android), para ser introducida en una url y abrir esta en una ventana aparte. Por ejemplo, introducir los valores de la variable latlng (es decir, la última latitud y langitud enviada por el móvil) en una url de este tipo: https://www.google.es/maps/dir/37.4204828,-1.5539009/"latitud y longitud extraidas de geoposicionamiento" para abrir en maps la ruta en la cual se visualiza el tiempo de llegada.

Gracias y un saludo.