From e8bb75758e01b1a9a624e32cc667e0050ed9a50c Mon Sep 17 00:00:00 2001 From: Swrup Date: Mon, 27 Jun 2022 19:45:58 +0200 Subject: [PATCH] better geolocation --- src/js/babillard.ml | 1 + src/js/map.ml | 27 +++++++++++++++++++-------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/js/babillard.ml b/src/js/babillard.ml index 7d36a27..1d1a317 100644 --- a/src/js/babillard.ml +++ b/src/js/babillard.ml @@ -112,6 +112,7 @@ let on_click_set_latlng e = in Leaflet.Map.open_popup popup map; + (* TODO add a marker with special icon here *) let lat = Leaflet.Latlng.lat latlng |> Jstr.of_float in let lng = Leaflet.Latlng.lng latlng |> Jstr.of_float in let value_jstr = Jstr.of_string "value" in diff --git a/src/js/map.ml b/src/js/map.ml index 5b471ed..31151b5 100644 --- a/src/js/map.ml +++ b/src/js/map.ml @@ -76,13 +76,24 @@ module Geolocalize = struct let geolocalize _ = log "geolocalize@\n"; - let l = Brr_io.Geolocation.of_navigator Brr.G.navigator in - ignore @@ Fut.await (Brr_io.Geolocation.get l) update_location - - let () = - let button = find_by_id "geolocalize" in - let (_ : Brr.Ev.listener) = - Brr.Ev.listen Brr.Ev.click geolocalize (Brr.El.as_target button) + let update_location geo = + log "update_location@\n"; + match geo with + | Error e -> + (* todo: popup error message for user *) + log "geolocation failure: %s@\n" + @@ Jstr.to_string + @@ Brr_io.Geolocation.Error.message e + | Ok geo -> + (* todo: add a special marker to map *) + let lat = Brr_io.Geolocation.Pos.latitude geo in + let lng = Brr_io.Geolocation.Pos.longitude geo in + let latlng = Leaflet.Latlng.create lat lng in + Leaflet.Map.set_view latlng ~zoom:(Some 17) map in - () + + let l = Brr_io.Geolocation.of_navigator Brr.G.navigator in + let opts = Brr_io.Geolocation.opts ~high_accuracy:true () in + (* todo: use `Geolocation.watch` instead ? it may improve precision *) + ignore @@ Fut.await (Brr_io.Geolocation.get l ~opts) update_location end