Page
Library
Module
Module type
Parameter
Class
Class type
Source
TopojsoneSourceA library for manipulating large TopoJSON documents without reading the whole document into memory using the Jsone streaming, JSON parser.
module Jsone = Geojsone.Jsonemodule Ezjsone = Geojsone.EzjsoneTopojsone 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) resultmap_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) resultfold_object f initial_acc src is much like map_object but allows you to accumulate some result that is then returned to you.