To get the user’s location you can use HTML5 Geolocation which is supported on all modern browsers and mobile devices (though a user may choose to conceal their location). The example code below looks up the user’s location and creates two variables that you can use with the longitude and latitude coordinates:

navigator.geolocation.getCurrentPosition(function onShowPosition(position) {
  var latitude = position.coords.latitude;
  var longitude = position.coords.longitude;
}, function onError(error) {
  var errorMessage = error.message;
});

Taking this example further, we’ll use the user’s location to place a marker on a Google map or let a user share it as a URL with others. See the code below:

function getLocation() {
  // Here we are getting the user’s location and passing it to the showPosition function
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition, onError);
  } else {
    alert('Geolocation is not supported by this browser.');
  }
}

function showPosition(position) {
  // Here we using the location to create a URL for a Google map
  var latitude = position.coords.latitude;
  var longitude = position.coords.longitude;
  var latlong = latitude + ',' + longitude;
  var mapUrl = 'https://www.google.com/maps?q=' + latlong;


  // We let the user decide if they want to open the URL or
  // Share the URL with someone else
  Fliplet.UI.Actions({
    title: 'What do you want with this address?',
    labels: [{
        label: 'Open in Google Maps',
        action: {
          action: 'url',
          url: mapUrl
        }
      },
      {
        label: 'Share URL',
        action: function () {
          Fliplet.Communicate.shareURL(mapUrl);
        }
      }
    ],
    cancel: 'Dismiss'
  });
}

function onError(error) {
  // If there’s an error with retrieving the geolocation data we can do something here eg display an error message
  var errorMessage = error.message;
}


// Above we’ve only been defining the code
// We actually start it running with the command below
getLocation();

The above code is only called once, when the user opens the app or navigates to a screen that contains the code. If you would like to repeatedly call the code (ie, to continuously check a user’s location as they move) you would change navigator.geolocation.getCurrentPosition() to navigator.geolocation.watchPosition()

This will repeatedly send requests to get a user’s location. While this can be helpful it can also be a drain on a mobile devices battery. So it’s important to stop watching for a user’s location when we no longer need to.

To stop watching for location changes you can use the following code (this will also happen if a user navigates to another screen)

navigator.geolocation.clearWatch();
Was this article helpful?
YesNo