Геолокация с помощью Internet Explorer 9

 

В IE9 вошли функции геолокации, которые работают на базе данных Wi-Fi точек доступа и IP адресов.

Процесс определения координат в браузере осуществляется с помощью обьекта geolocation который является потомком window.navigator.

Собственно geolocation объект достаточно прост, у него есть метод получения текущих координат getCurrentPosition и событие изменения координат watchPosition.

Каждый из этих методов сразу приводит к результату, и это не координаты, методы эти асинхронны. На вход этих функций надо обязательно подать callback метод который уже будет вызван в случае успешного определения координат.

window.navigator.geolocation.getCurrentPosition(show_map);

 

function show_map(position) {

    var latitude = position.coords.latitude;

    var longitude = position.coords.longitude;

}

 

 

 

Важно понимать, что раз мы имеем дело с асинхронным вызовом, невозможно предсказать через какой промежуток времени придут координаты. Поэтому в реальных проектах лучше указывать время таймаута, после которого пользователь будет уведомлен о том что определить координаты не удается.

Простая страница которая будет выводить текущие координаты выглядит так:

<!DOCTYPE html>

<html>

<head>

<title>Geolocation API Example</title>

<meta http-equiv="X-UA-Compatible" content="IE=9" />

<script type="text/javascript">

 

function setText(val, e) {

    document.getElementById(e).value = val;

}

 

function insertText(val, e) {

    document.getElementById(e).value += val;

}

 

var nav = null;

 

function requestPosition() {

  if (nav == null) {

      nav = window.navigator;

  }

  if (nav != null) {

      var geoloc = nav.geolocation;

      if (geoloc != null) {

          geoloc.getCurrentPosition(successCallback);

      }

      else {

          alert("geolocation not supported");

      }

  }

  else {

      alert("Navigator not found");

  }

}

 

 

 

function successCallback(position)

{

   setText(position.coords.latitude, "latitude");

   setText(position.coords.longitude, "longitude");

}

 

 

 

</script>

</head>

<body>

<label for="latitude">Latitude: </label><input id="latitude" /> <br />

<label for="longitude">Longitude: </label><input id="longitude" /> <br />

<input type="button" onclick="requestPosition()" value="Get Latitude and Longitude" />

 

</body>

</html>