С помощью возможностей HTML5
Итак, снова великий и могучий HTML5 протягивает нам руку помощи. Делаем все поэтапно.
Сначала определим, поддерживается ли данный функционал текущим браузером:
function checkGeoLocation() {
return navigator.geolocation;
}
Затем пишем метод обновления позиции (пример функции fn будет ниже):
var callback;
function updateLocation(fn) {
if (checkGeoLocation()){
callback = fn;
navigator.geolocation.getCurrentPosition(savePosition);
return true;
} else {
console.log('Device not capable of geo-location.');
fn(false);
return false;
} }
Теперь нам нужно вызвать сами функции записи координат в локальные переменные:
var latitude, longitude;
function savePosition(position) {
latitude = position.coords.latitude;
longitude = position.coords.longitude;
if (callback) {
callback(getLocation());
}
}
function getLocation() {
if (latitude && longitude) {
return {
latitude: latitude,
longitude: longitude
}
} else {
console.log('No location available.Try calling updateLocation() first.');
return false;
}
}
Теперь достаточно просто вызвать из кода нужную функцию
updateLocation(function(coords) {
if (coords) {
alert('Latitude: ' + coords.latitude +
'<br />Longitude: ' + coords.longitude);
} else {
alert('Device not capable of geo-location.');
}});
С помощью возможностей Google Gears
Если предыдущий способ нам не подошел, то помочь нам может не менее великий и могучий Google со своим Gears.
Чтобы воспользоваться данным способом необходимо перейти на
<script type="text/javascript" charset="utf-8" src="geo.js">
</script>
<script type="text/javascript" charset="utf-8"
src="http://code.google.com/apis/gears/gears_init.js" >
</script>
В самом коде вызов методов получения координат будет следующим:
function success_callback(p) {
alert( p.coords.latitude.toFixed(2) + " "+ p.coords.longitude.toFixed(2));
}
function error_callback(p) {
alert('error=' + p.message);
}
function init() {
if (geo_position_js.init()) {
geo_position_js.getCurrentPosition(success_callback,
error_callback, {enableHighAccuracy:true});
}else {
alert("Functionality not available");
}
}
Profit!
Комментариев нет:
Отправить комментарий