From 3d19bc3f4087782be2e6177baa19bf2b8209e0ff Mon Sep 17 00:00:00 2001 From: Swrup Date: Tue, 30 Jan 2024 00:48:37 +0100 Subject: [PATCH] add polyline layer --- src/layer.ml | 29 ++++++++++++++++++++--------- src/layer.mli | 5 +++++ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/layer.ml b/src/layer.ml index ec9bb68..12c35c3 100644 --- a/src/layer.ml +++ b/src/layer.ml @@ -5,59 +5,61 @@ type _ t = | Geojson : Jv.t -> [> `Geojson ] t | Marker : Jv.t -> [> `Marker ] t | Tile : Jv.t -> [> `Tile ] t + | Vector : Jv.t -> [> `Vector ] t type _ sub = | Basic : [> `Basic ] sub | Geojson : [> `Geojson ] sub | Marker : [> `Marker ] sub | Tile : [> `Tile ] sub + | Vector : [> `Vector ] sub (** Basic layers *) let add_to : type kind. Map.t -> kind t -> unit = fun map -> function - | Basic l | Geojson l | Marker l | Tile l -> + | Basic l | Geojson l | Marker l | Tile l | Vector l -> let (_ : Jv.t) = Jv.call l "addTo" [| Map.to_jv map |] in () let remove : type kind. kind t -> unit = function - | Basic l | Geojson l | Marker l | Tile l -> + | Basic l | Geojson l | Marker l | Tile l | Vector l -> let (_ : Jv.t) = Jv.call l "remove" [||] in () let remove_from : type kind. Map.t -> kind t -> unit = fun map -> function - | Basic l | Geojson l | Marker l | Tile l -> + | Basic l | Geojson l | Marker l | Tile l | Vector l -> let (_ : Jv.t) = Jv.call l "removeFrom" [| Map.to_jv map |] in () let bind_popup : type kind. Popup.t -> kind t -> unit = fun popup -> function - | Basic layer | Geojson layer | Marker layer | Tile layer -> + | Basic layer | Geojson layer | Marker layer | Tile layer | Vector layer -> let (_ : Jv.t) = Jv.call layer "bindPopup" [| Popup.to_jv popup |] in () let unbind_popup : type kind. kind t -> unit = function - | Basic l | Geojson l | Marker l | Tile l -> + | Basic l | Geojson l | Marker l | Tile l | Vector l -> let (_ : Jv.t) = Jv.call l "unbindPopup" [||] in () let open_popup : type kind. kind t -> unit = function - | Basic l | Geojson l | Marker l | Tile l -> + | Basic l | Geojson l | Marker l | Tile l | Vector l -> let (_ : Jv.t) = Jv.call l "openPopup" [||] in () let close_popup : type kind. kind t -> unit = function - | Basic l | Geojson l | Marker l | Tile l -> + | Basic l | Geojson l | Marker l | Tile l | Vector l -> let (_ : Jv.t) = Jv.call l "closePopup" [||] in () let get_popup : type kind. kind t -> Popup.t = function - | Basic l | Geojson l | Marker l | Tile l -> + | Basic l | Geojson l | Marker l | Tile l | Vector l -> Jv.call l "getPopup" [||] |> Popup.of_jv let to_jv : type kind. kind t -> Jv.t = function - | Basic l | Geojson l | Marker l | Tile l -> l + | Basic l | Geojson l | Marker l | Tile l | Vector l -> l let of_jv : type kind. kind sub -> Jv.t -> kind t = fun tag l -> @@ -66,6 +68,7 @@ let of_jv : type kind. kind sub -> Jv.t -> kind t = | Geojson -> Geojson l | Marker -> Marker l | Tile -> Tile l + | Vector -> Vector l let on : type kind. kind Event.sub -> (kind Event.t -> 'b) -> 'c t -> unit = fun event handler layer -> @@ -225,3 +228,11 @@ let create_tile_osm : tile_layer_opt list -> [ `Tile ] t = contributors" in create_tile url ~attribution options + +(* Vector Layers *) + +let create_polyline : Latlng.t list -> [ `Vector ] t = + fun l -> + let l = Jv.of_list Latlng.to_jv l in + let jv_t = Jv.call Global.leaflet "polyline" [| l |] in + Vector jv_t diff --git a/src/layer.mli b/src/layer.mli index 5c28258..1f34363 100644 --- a/src/layer.mli +++ b/src/layer.mli @@ -5,12 +5,14 @@ type _ t = | Geojson : Jv.t -> [> `Geojson ] t | Marker : Jv.t -> [> `Marker ] t | Tile : Jv.t -> [> `Tile ] t + | Vector : Jv.t -> [> `Vector ] t type _ sub = | Basic : [> `Basic ] sub | Geojson : [> `Geojson ] sub | Marker : [> `Marker ] sub | Tile : [> `Tile ] sub + | Vector : [> `Vector ] sub (** Basic layers *) @@ -97,3 +99,6 @@ val create_tile : attribution set to [openstreetmap.org]. See {:https://wiki.openstreetmap.org/wiki/Tile_servers} *) val create_tile_osm : tile_layer_opt list -> [ `Tile ] t + +(** [create_polyline l] create a polyline layer from [l] *) +val create_polyline : Latlng.t list -> [ `Vector ] t