boat
C++23 geospatial library
Loading...
Searching...
No Matches
scene_json.hpp
Go to the documentation of this file.
1// Andrew Naplavkov
2
3#ifndef BOAT_GUI_SCENE_JSON_HPP
4#define BOAT_GUI_SCENE_JSON_HPP
5
6#include <boat/gui/detail/json.hpp>
7
8namespace boat::gui {
9
11inline scene read_scene_json(std::string const& text)
12{
13 auto root = json::parse(text);
14 check(root.is_object(), "scene");
15 auto ret = scene{};
16 for (auto const& source : array(root, "sources"))
17 ret.sources.push_back(read_source(source));
18 if (root.contains("center")) {
19 auto const& coords = array(root, "center");
20 check(coords.size() == 2, "center");
21 ret.view.center = {coords[0].get<double>(), coords[1].get<double>()};
22 }
23 ret.view.resolution = root.value("resolution", ret.view.resolution);
24 check(ret.view.resolution > 0, "resolution");
25 return ret;
26}
27
28inline std::string write_scene_json(scene const& in)
29{
30 check(std::isfinite(in.view.center.x()) &&
31 std::isfinite(in.view.center.y()) &&
32 std::isfinite(in.view.resolution) && in.view.resolution > 0,
33 "view");
34 auto root = json::object();
35 for (auto const& source : in.sources)
36 root["sources"].push_back(write_source(source));
37 if (in.view.center.x() != 0 || in.view.center.y() != 0)
38 root["center"] = {in.view.center.x(), in.view.center.y()};
39 if (in.view.resolution != view{}.resolution)
40 root["resolution"] = in.view.resolution;
41 return root.dump(2);
42}
43
44} // namespace boat::gui
45
46#endif // BOAT_GUI_SCENE_JSON_HPP
Definition cache.hpp:11
scene read_scene_json(std::string const &text)
Parse without interpreting addresses or generating names.
Definition scene_json.hpp:11
std::string write_scene_json(scene const &in)
Definition scene_json.hpp:28
T get(blob_view &in)
Definition blob.hpp:54
Definition scene.hpp:30
std::vector< source > sources
Definition scene.hpp:31
gui::view view
Definition scene.hpp:32
Definition scene.hpp:25
Definition scene.hpp:12
geometry::geographic::point center
Definition scene.hpp:13
double resolution
metres per pixel
Definition scene.hpp:14