Skip to content
Leaflet.AccuratePosition aims to provide an accurate device location when simply calling map.locate() doesn’t.
JavaScript HTML CSS
Branch: master
Clone or download
This branch is 9 commits ahead of gregsramblings:master.


Type Name Latest commit message Commit time
Failed to load latest commit information.
example Rewrite to Leaflet plugin Aug 4, 2014
LICENSE Rewrite to Leaflet plugin Aug 4, 2014
Leaflet.AccuratePosition.js Update Apr 27, 2015


Leaflet.AccuratePosition aims to provide an accurate device location when simply calling map.locate() doesn’t.

(It’s Greg Wilson’s getAccurateCurrentPosition() forked to be a Leaflet plugin.)


map.locate() relies on navigator.geolocation.getCurrentPosition() to return the device location. However geolocation.getCurrentPosition() quickly returns the last position available which might not be very accurate if the device’s GPS has not been used recently. Firing this method several times will eventually give you better results because the GPS has had more time to acquire satellites.

A better way to do this is to use navigator.geolocation.watchPosition() that fires a callback every time the location changes (and seems to include accuracy improvements). After several callbacks the greatest possible accuracy can be expected, a fact this plugin works upon.


Check out the demo at
and how it's done at

QR Code


var map ='map').setView([51.505, -0.09], 13);

function onAccuratePositionProgress (e) {

function onAccuratePositionFound (e) {

function onAccuratePositionError (e) {

map.on('accuratepositionprogress', onAccuratePositionProgress);
map.on('accuratepositionfound', onAccuratePositionFound);
map.on('accuratepositionerror', onAccuratePositionError);

    maxWait: 15000, // defaults to 10000
    desiredAccuracy: 30 // defaults to 20

This will attempt to find the device location with an accuracy of at least 30 meters in max. 15 seconds.


The option parameters are identical to getCurrentPosition() with the following additions:

  • desiredAccuracy: The accuracy in meters that you consider "good enough". Once a location is found that meets this criterion, the accuratepositionfound event fires. Defaults to 20.
  • maxWait: How long you are willing to wait (in milliseconds) for your desired accuracy. Once the function runs for maxWait milliseconds, it will stop trying and return the last location it was able to acquire. NOTE: If the desired accuracy is not achieved before the timeout, the onSuccess is still called. You will need to check the accuracy to confirm that you got what you expected. It's a desired accuracy, not a required accuracy. Defaults to 10000.

The following params also exist for getCurrentPosition() but are set for you by default:

  • timeout: If no timeout is specified, it will be set to the maxWait value
  • enableHighAccuracy: This is forced to true (otherwise, why are you using this function?!)
  • maximumAge: This is forced to zero since we only want current location information


Leaflet.AccuratePosition is free software, and may be redistributed under the MIT-LICENSE.

You can’t perform that action at this time.