HTML5: limiti della Geolocation API

Short link

Le nuove API HTML5 per la geolocalizzazione hanno il grande limite di affidarsi unicamente all'indirizzo IP per quanto riguarda l'individuazione della posizione di un utente. Ciò significa che se il nodo Internet a cui fa riferimento l'utente si trova a 100 chilometri dalla posizione effettiva dell'utente, la sua posizione visualizzata sulla mappa (per esempio sulle Google Maps) risulterà fuori misura di 100 chilometri. Vediamo un esempio.

Sul sito HTML5 Rocks potete testare dal vivo il seguente codice:


var initialLocation;
var siberia = new google.maps.LatLng(60, 105);
var newyork = new google.maps.LatLng(40.69847032728747, -73.9514422416687);
var map;
var infowindow = new google.maps.InfoWindow();
var mapOptions = {
  zoom: 13,
  mapTypeId: google.maps.MapTypeId.ROADMAP
};

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(showPosition, onError);
  // also monitor position as it changes
  navigator.geolocation.watchPosition(showPosition);
} else {
  onError();
}

function showPosition(position) {
  map = new google.maps.Map(document.getElementById("content"), mapOptions);
  
  var lat = position.coords.latitude;
  var lng = position.coords.longitude;
  
  initialLocation = new google.maps.LatLng(lat, lng);
  map.setCenter(initialLocation);
  infowindow.setContent(lat + " " + lng);
  infowindow.setPosition(initialLocation);
  infowindow.open(map);
}

function onError() {
  if (navigator.geolocation) {
    initialLocation = newyork;
    contentString = "Error: The Geolocation service failed.";
  } else {
    initialLocation = siberia;
    contentString = "Error: Your browser doesn't support geolocation. Are you in Siberia?";
  }
  mapOptions.zoom = 4;
  map = new google.maps.Map(document.getElementById("content"), mapOptions);
  map.setCenter(initialLocation);
  infowindow.setContent(contentString);
  infowindow.setPosition(initialLocation);
  infowindow.open(map);
}

Che nel mio caso specifico restituisce la seguente posizione (errata) sulla mappa:

La soluzione al problema sta nell'affidarsi ad un sistema di rilevamento diverso dall'IP, come per esempio il GPS, che ci permette di avere un margine di pochi metri dall'esatta posizione dell'utente.