Skip to content

Instantly share code, notes, and snippets.

@hungtrn75
Created July 8, 2019 03:06
Show Gist options
  • Save hungtrn75/828c92ebcddeef5c744dfdaada3ba1a5 to your computer and use it in GitHub Desktop.
Save hungtrn75/828c92ebcddeef5c744dfdaada3ba1a5 to your computer and use it in GitHub Desktop.
function distance(lat1, lon1, lat2, lon2, unit) {
var radlat1 = Math.PI * lat1 / 180
var radlat2 = Math.PI * lat2 / 180
var theta = lon1 - lon2
var radtheta = Math.PI * theta / 180
var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
if (dist > 1) {
dist = 1;
}
dist = Math.acos(dist)
dist = dist * 180 / Math.PI
dist = dist * 60 * 1.1515
if (unit == "K") {
dist = dist * 1.609344
}
if (unit == "N") {
dist = dist * 0.8684
}
return dist.toFixed(3)
}
async function getLocation() {
return new Promise((resolve, reject) => {
if (Platform.OS === 'android') {
PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, {
'title': '',
'message': ''
}
).then(granted => {
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
const onSuccess = location => resolve(location.coords);
const onFail = error => {
reject(error)
}
const options = {
enableHighAccuracy: false,
timeout: 15000,
maximumAge: 100,
showLocationDialog: true
}
navigator.geolocation.getCurrentPosition(onSuccess, onFail, options)
} else {
reject("App do not have location permission.")
}
})
} else {
const onSuccess = location => resolve(location.coords)
const onFail = error => reject(error)
const options = {
enableHighAccuracy: true,
timeout: 15000,
maximumAge: 100,
showLocationDialog: true
}
navigator.geolocation.getCurrentPosition(onSuccess, onFail, options)
}
});
}
export {
getLocation,
distance
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment