FlatCityBuf C++ reader 0.8.0
Native C++17 reader for FlatCityBuf, the cloud-optimized CityJSON format
Loading...
Searching...
No Matches
reader.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <fcb/error.hpp>
4#include <fcb/feature.hpp>
5#include <fcb/header.hpp>
8#include <fcb/stree.hpp>
9
10#include <cstdint>
11#include <memory>
12#include <string>
13#include <vector>
14
15namespace fcb {
16
19 std::uint64_t offset; // relative to the features section
20 std::uint64_t index; // feature ordinal
21};
22
29enum class IterationMode {
32};
33
36 public:
37 FeatureIterator(std::shared_ptr<RangeReader> reader, HeaderView header, IterationMode mode,
38 std::vector<SearchResultItem> hits);
39
44
47 bool next();
48
49 const Feature& current() const { return current_; }
50
52 std::uint64_t features_count() const { return header_.info().features_count; }
53
54 private:
55 std::shared_ptr<RangeReader> reader_;
56 HeaderView header_;
57 IterationMode mode_;
58 std::vector<SearchResultItem> hits_;
59
60 Feature current_;
61 std::uint64_t cursor_ = 0; // absolute, for SequentialScan
62 std::size_t hit_index_ = 0; // for OffsetList
63 std::uint64_t produced_ = 0;
64};
65
67class FcbReader {
68 public:
69 static FcbReader open_file(const std::string& path);
70 static FcbReader open(std::shared_ptr<RangeReader> reader);
71
72 const HeaderView& header() const { return header_; }
73
76
81 FeatureIterator select_bbox(const BBox& query);
82
93
94 private:
95 FcbReader(std::shared_ptr<RangeReader> reader, HeaderView header);
96
97 std::shared_ptr<RangeReader> reader_;
98 HeaderView header_;
99};
100
101} // namespace fcb
The library's entry point.
Definition reader.hpp:67
FeatureIterator select_bbox(const BBox &query)
Iterate features whose 2D bounding box intersects query.
Definition reader.cpp:235
static FcbReader open(std::shared_ptr< RangeReader > reader)
Definition reader.cpp:230
FeatureIterator select_all()
Iterate every feature in stored (Hilbert) order.
Definition reader.cpp:496
const HeaderView & header() const
Definition reader.hpp:72
FeatureIterator select_attr(const AttrQuery &query, AttrQueryOptions opts={})
Iterate features matching every condition (AND).
Definition reader.cpp:344
static FcbReader open_file(const std::string &path)
Definition reader.cpp:226
Single-pass iterator over features. Not copyable.
Definition reader.hpp:35
bool next()
Advance.
Definition reader.cpp:126
std::uint64_t features_count() const
Total features the header claims, for progress reporting.
Definition reader.hpp:52
FeatureIterator & operator=(const FeatureIterator &)=delete
const Feature & current() const
Definition reader.hpp:49
FeatureIterator(const FeatureIterator &)=delete
FeatureIterator & operator=(FeatureIterator &&)=delete
FeatureIterator(FeatureIterator &&)=default
One decoded feature that OWNS the bytes it points into.
Definition feature.hpp:33
A parsed header that OWNS its backing bytes.
Definition header.hpp:108
const FileInfo & info() const
Definition header.hpp:112
IterationMode
How a FeatureIterator decides what to visit.
Definition reader.hpp:29
@ SequentialScan
walk the features section start to finish
@ OffsetList
visit exactly the offsets supplied (possibly none)
std::vector< AttrCondition > AttrQuery
Definition stree.hpp:26
RangeReader & reader
Definition stree.cpp:162
A 2D query rectangle.
std::uint64_t features_count
Definition header.hpp:45
One hit from an index traversal.
Definition reader.hpp:18
std::uint64_t offset
Definition reader.hpp:19
std::uint64_t index
Definition reader.hpp:20