Page
Library
Module
Module type
Parameter
Class
Class type
Source
Topojsone
SourceA library for manipulating large TopoJSON documents without reading the whole document into memory using the Jsone
streaming, JSON parser.
module Jsone = Geojsone.Jsone
module Ezjsone = Geojsone.Ezjsone
Topojsone comes with an implementation of a TopoJSON parser using Ezjsone
. This is like Ezjsonm
but uses Jsone
for providing a non-blocking interface.
Topojsone is intended to be used with a non-blocking IO library using OCaml 5's effect support to provide a direct-style buffer filling and buffer writing functions.
Here's an example using the Eio
library:
let src_of_flow ?(size = 2048) flow =
let buff = Cstruct.create size in
fun () ->
let got = Eio.Flow.(single_read flow buff) in
let t = Cstruct.sub buff 0 got in
t
let with_src cwd f func =
Eio.Path.(with_open_in (cwd / f)) @@ fun ic -> func @@ src_of_flow ic
let buffer_to_dst buf bs =
Eio.Flow.(copy (cstruct_source [ bs ]) (Eio.Flow.buffer_sink buf))
Maps are functions that allow you to manipulate common structure in TopoJson objects. These will be written directly back to the destination that you provide.
val map_object :
((string * Topojson.Geometry.t) -> string * Topojson.Geometry.t) ->
Jsone.src ->
Jsone.dst ->
(unit, Err.t) result
map_object f src dst
will apply f
to all TopoJson objects. The map will recurse into TopoJson Object. Note for the moment if you have a single geometry object as your document, this will not work.
val fold_object :
('acc -> (string * Topojson.Geometry.t) -> 'acc) ->
'acc ->
Jsone.src ->
('acc, Err.t) result
fold_object f initial_acc src
is much like map_object
but allows you to accumulate some result that is then returned to you.