36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
export type Coordinates = {
|
|
latitude: number
|
|
longitude: number
|
|
}
|
|
|
|
function geolocation_to_simple_coords(coordinates: GeolocationCoordinates): Coordinates {
|
|
return { latitude: coordinates.latitude, longitude: coordinates.longitude }
|
|
}
|
|
|
|
export function get_coords(): Promise<{ coords: Coordinates | null; error: string | null }> {
|
|
return new Promise((resolve) => {
|
|
if (!navigator.geolocation) {
|
|
resolve({ coords: null, error: "Geolocation is not supported by your browser" })
|
|
return
|
|
}
|
|
|
|
const error_callback = (gps_error: GeolocationPositionError) => {
|
|
console.log(gps_error)
|
|
resolve({
|
|
coords: null,
|
|
error: `Unable to retrieve your location: (${gps_error.message})`,
|
|
})
|
|
return
|
|
}
|
|
|
|
const success_callback = (gps_position: GeolocationPosition) => {
|
|
resolve({
|
|
coords: geolocation_to_simple_coords(gps_position.coords),
|
|
error: null,
|
|
})
|
|
return
|
|
}
|
|
|
|
navigator.geolocation.getCurrentPosition(success_callback, error_callback)
|
|
})
|
|
}
|