# Geolocation API

The Geolocation API allows the user to provide their location to web applications if they so desire. For privacy reasons, the user is asked for permission to report location information.

## 1. Checking for Support

Before using the API, check if the browser supports it.

```javascript
if ("geolocation" in navigator) {
  console.log("Geolocation is available");
} else {
  console.log("Geolocation is not available");
}
```

## 2. Getting the Current Position

To get the user's current location, use the `getCurrentPosition()` method. It takes a success callback, an optional error callback, and an optional options object.

```javascript
navigator.geolocation.getCurrentPosition(
  (position) => {
    const latitude = position.coords.latitude;
    const longitude = position.coords.longitude;
    console.log(`Latitude: ${latitude}, Longitude: ${longitude}`);
  },
  (error) => {
    console.error(`Error Code: ${error.code}, Message: ${error.message}`);
  }
);
```

## 3. Watching the Position

If you need to track the user's location as they move (like a GPS navigation app), use `watchPosition()`. It fires the callback every time the location changes.

```javascript
const watchId = navigator.geolocation.watchPosition(
  (position) => {
    console.log(`New Position: ${position.coords.latitude}, ${position.coords.longitude}`);
  },
  (error) => {
    console.error(error);
  }
);

// To stop watching:
// navigator.geolocation.clearWatch(watchId);
```

## 4. Handling Errors

The error callback receives a `GeolocationPositionError` object.

*   `1` (PERMISSION_DENIED): The user denied the request for Geolocation.
*   `2` (POSITION_UNAVAILABLE): Location information is unavailable.
*   `3` (TIMEOUT): The request to get user location timed out.

## 5. Options

You can fine-tune the request using the options object.

```javascript
const options = {
  enableHighAccuracy: true, // Use GPS if available (consumes more battery)
  timeout: 5000,            // Time in ms to wait for a position
  maximumAge: 0             // Maximum age in ms of a cached position
};

navigator.geolocation.getCurrentPosition(success, error, options);
```

[[programming/javascript/vanilla/javascript]]