The current position is retrieved using the
getCurrentPosition
API method which takes three arguments.
void getCurrentPosition(successCallback, errorCallback, options);
getCurrentPosition
and
watchPosition
mirror each other and take the same arguments:
•
successCallback - success handler
•
errorCallback - error handler
•
options - geolocation options
snippet
navigator.geolocation.getCurrentPosition(function (position) {
alert('We found you!');
// now do something with the position data
});
Success Callback
The success callback is passed a position object that contains a '
coordinates' object and a '
timestamp'.
The coordinates object contains the following:
Properties | Description |
---|
latitude | which is specified in decimal degrees. |
longitude | which is specified in decimal degrees. |
accuracy | which is specified in meters. |
altitude | which is specified in meters above the ellipsoid. |
altitudeAccuracy | which is specified in meters. |
heading | which is direction of travel specified in degrees |
speed | which is specified in meters per second. |
Of those 7, only 3 are guaranteed to be there: latitude, longitude, and accuracy. The heading and speed attributes are only relevant if we're tracking the user across multiple positions.
Grabbing the Latitude and Longitude:-To get the latitude and longitude use the following code.
snippet
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var coords = position.coords;
showMap(coords.latitude, coords.longitude,
coords.accuracy);
});
}
Our
successCallback is set to the function displayOnMap. Here's what this function looks like:
snippet
/* todo-clari
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(displayOnMap);
}*/
function displayOnMap(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
// Let's use Google Maps to display the location
}
Error Callback
The second argument to the
getCurrentPosition
and
watchPosition
method is the error handler.
If you want to notify the user of any errors in getting the position use the error handler callback. The error handler may trigger if the user denies their their location.
The error handler receives a single argument containing a position error object containing two properties:
(i) code
(ii) message
The code property will be only one of the following:
PERMISSION_DENIED (numeric value 1)
POSITION_UNAVAILABLE (numeric value 2)
TIMEOUT (numeric value 3)
The message property is useful for developing and debugging but wouldn't be appropriate to show the user. The message property isn't always available (as it's not currently in Firefox 3.6+).
snippet
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
function(position) {
var coords = position.coords;
showMap(coords.latitude, coords.longitude, coords.accuracy);
},
function(error) {
var errorTypes = {
1: 'Permission denied',
2: 'Position is not available',
3: 'Request timeout'
};
alert(errorTypes[error.code] + ": means we can't
determine your position ");
});
}
Options - Configuring the geolocation
The third argument to both
getCurrentPosition
and
watchPosition
are the geolocation options which are optional.
• enableHighAccuracy (Boolean, default false)
• timeout (in milliseconds, default infinity/0)
• maximumAge (in milliseconds, default 0)
For example, to request high accuracy, a two-second timeout, and to never use old geo data, call
getCurrentPosition
using the following options (where success and error are predefined functions):
snippet
navigator.geolocation.getCurrentPosition(success, error, {
enableHighAccuracy: true,
timeout: 2000,
maximumAge: 0
});
Properties | Description |
---|
enableHighAccuracy | The tells the device to try to get a more accurate reading on the latitude and longitude. By default enableHighAccuracy is set to false. On a mobile device, this may be to make use of the GPS on a phone, which could consume more power on the mobile device. |
timeout | The timeout tells the geolocation lookup how long it should wait before giving up and triggering the error handler (but won't start counting down if it's waiting for the user to approve the request). If it does timeout, the error code is set to 3 (TIMEOUT). Setting a zero time out (the current default) tells the browser to never time out. |
maximumAge | maximumAge can be used to tell the browser whether to use recently cached position data. If there is a request that is within the maximumAge (in milliseconds), it is returned instead of requesting a new position. maximumAge can also be Infinity, which tells the browser to always use a cached position. Setting the maximumAge to zero (the default value) means the browser must look up a new position on each request. |