In uno script precedente abbiamo visto come catturare i dati dal GPS, utilizzando le Geolocation API di HTML5 da un dispositivo mobile equipaggiato degli opportuni sensori.
https://www.html5italia.com/script/47/Sfruttare-Funzionalita-GPS-HTML5-Geolocation-API.aspx
In questo script utilizzeremo le coordinate della posizione corrente per calcolare la distanza da un punto di interesse, per farlo ricorreremo alla formula dell'emisenoverso (haversine) di seguito implementata nello script:
function degreeToRadians(value) { return value * Math.PI / 180; } function getDistanceKm(lat1, lon1, lat2, lon2) { // R: raggio della terra (paragonabile ad una sfera) in chilometri var R = 6371; var deltaLat = degreeToRadians(lat2-lat1); var deltaLon = degreeToRadians(lon2-lon1); lat1 =degreeToRadians(lat1); lat2 =degreeToRadians(lat2); var a = Math.sin(deltaLat/2) * Math.sin(deltaLat/2) + Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltaLon/2) * Math.sin(deltaLong/2); var c = 2 * Math.atan2(Math.sqrt(a),Math.sqrt(1-a)); var d = R * c; return d; } function updateDistances(){ var poi = document.querySelectorAll(".dist"); //Scorro gli elementi rappresentanti i punti di interesse, calcolando la distanza dalla posizione attuale for (var i = 0; i < poi.length; i++) { poi<i>.innerHTML = distance(startPosition.coords.latitude, startPosition.coords.longitude, poi<i>.dataset.lat, poi<i>.dataset.lon); } } var startPosition; //Gestione dell'evento di cambio posizione function updateLocation(position) { startPosition = position; updateDistances(); } //inizio il campionamento dei dati dal GPS var watchId = navigator.geolocation.watchPosition(updateLocation, handleLocationError);
<h3>Distanze</h3> <dl> <dd>Capo di Leuca<span class="dist" data-lat="39.783333" data-lon="18.333333"></span> Km</dd> <dd>Capo Spartivento<span class="dist" data-lat="38.8784" data-lon="8.8455"></span> Km</dd> <dd>Capo Passero<span class="dist" data-lat="36.685" data-lon="15.14"></span> Km</dd> <dd>...</dd> </dl>
Maggiori dettagli sui principi applicati nella formula dell'emisenoverso sono disponibili su wikipedia a questo indirizzo: http://it.wikipedia.org/wiki/Emisenoverso
La specifica completa delle Geolocation API è disponibile qui: http://www.w3.org/TR/geolocation-API/
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Introduzione ai web component HTML
Estrarre dati randomici da una lista di oggetti in C#
Utilizzare una qualunque lista per i parametri di tipo params in C#
Disabilitare automaticamente un workflow di GitHub (parte 2)
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Utilizzare QuickGrid di Blazor con Entity Framework
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Gestione dell'annidamento delle regole dei layer in CSS
Utilizzare Azure Cosmos DB con i vettori
Effettuare il refresh dei dati di una QuickGrid di Blazor
Eseguire script pre e post esecuzione di un workflow di GitHub