3#ifndef BOAT_GDAL_CATALOG_HPP
4#define BOAT_GDAL_CATALOG_HPP
9#include <boat/gdal/detail/raster.hpp>
10#include <boat/gdal/detail/vector.hpp>
17 std::vector<db::source>
sources()
override
19 return gdal::subdatasets(
dataset.get()) |
20 std::views::transform(
21 [](
auto p) {
return db::source(p.first, p.second); }) |
22 std::ranges::to<std::vector>();
25 std::vector<db::layer>
layers()
override
27 auto ret = std::vector<db::layer>{};
28 if (GDALGetRasterCount(
dataset.get()))
29 ret.push_back({
"",
"_layer",
"raster",
true});
30 ret.append_range(vectors(
dataset.get()));
36 return gdal::get_table(GDALDatasetGetLayerByName(
37 dataset.get(), std::string{table_name}.data()));
44 if (
auto col = OGR_L_GetFIDColumn(GDALDatasetGetLayerByName(
46 col && std::strlen(col))
47 q <<
" FID as \"" << col <<
"\",";
49 for (
auto sep{
"\n order by "};
auto& key : rq.
order_by)
50 q << std::exchange(sep,
", ") <<
db::id{key.column_name}
51 << (key.descending ?
" desc" :
"");
52 q <<
"\n limit " << to_chars(rq.
limit) <<
"\n offset "
54 if (
auto lyr = execute(
dataset.get(), q.text(
'"', {}).data(),
"OGRSQL"))
64 auto fd = OGR_L_GetLayerDefn(lyr);
65 OGR_L_SetSpatialFilterRectEx(
67 std::max<>(0, OGR_FD_GetGeomFieldIndex(fd, rq.
layer_column.data())),
78 std::stop_token tok = {})
override
82 gdal::insert(lyr, rs, tok);
87 return gdal::get_table(add_table(
dataset.get(), tbl));
90 void drop(std::string_view, std::string_view table_name)
override
92 delete_table(
dataset.get(), table_name);
97 return gdal::get_raster(
dataset.get());
100 std::generator<std::pair<tile, gil::any_image>>
read(
102 std::vector<tile> ts)
override
105 co_yield {t, gdal::read(
dataset.get(), rast, t)};
113 gdal::write(
dataset.get(), rast, rect, img);
118 gdal::set_autocommit(
dataset.get(), on);
Definition catalog.hpp:12
typename any_image::const_view_t any_image_view
Definition gil.hpp:51
Spatial filter for row selection.
Definition meta.hpp:70
double xmin
Definition meta.hpp:73
double ymax
Definition meta.hpp:76
double ymin
Definition meta.hpp:74
int limit
Definition meta.hpp:77
std::string layer_column
Definition meta.hpp:72
std::vector< std::string > select_list
Definition meta.hpp:71
double xmax
Definition meta.hpp:75
Uniform access to vector and raster data.
Definition catalog.hpp:16
Pagination filter for row selection.
Definition meta.hpp:86
int limit
Definition meta.hpp:90
std::vector< order_key > order_by
Definition meta.hpp:88
size_t offset
Definition meta.hpp:89
std::vector< std::string > select_list
Definition meta.hpp:87
std::string table_name
Definition meta.hpp:57
Definition catalog.hpp:14
db::table get_table(std::string_view, std::string_view table_name) override
Definition catalog.hpp:34
std::vector< db::source > sources() override
May include nested data sources.
Definition catalog.hpp:17
std::generator< std::pair< tile, gil::any_image > > read(db::raster rast, std::vector< tile > ts) override
Definition catalog.hpp:100
void drop(std::string_view, std::string_view table_name) override
Definition catalog.hpp:90
std::vector< db::layer > layers() override
Definition catalog.hpp:25
db::rowset select(db::table const &tbl, db::bbox const &rq) override
Definition catalog.hpp:60
void commit() override
Definition catalog.hpp:121
dataset_ptr dataset
Definition catalog.hpp:15
db::table create(db::table const &tbl) override
Returns metadata reported by the backend after creation.
Definition catalog.hpp:85
void set_autocommit(bool on) override
Definition catalog.hpp:116
void write(db::raster const &rast, db::rect const &rect, gil::any_image_view img) override
rect coordinates are pixels.
Definition catalog.hpp:108
db::raster get_raster(db::layer const &) override
Definition catalog.hpp:95
void insert(db::table const &tbl, db::rowset const &rs, std::stop_token tok={}) override
Cancellation may leave a partially inserted range.
Definition catalog.hpp:75
db::rowset select(db::table const &tbl, db::page const &rq) override
Definition catalog.hpp:40