boat
C++23 geospatial library
Loading...
Searching...
No Matches
drivers.hpp
Go to the documentation of this file.
1// Andrew Naplavkov
2
3#ifndef BOAT_GDAL_DRIVERS_HPP
4#define BOAT_GDAL_DRIVERS_HPP
5
6#if __has_include(<gdal.h>)
7#include <boat/gdal/detail/utility.hpp>
8#else
9#include <string>
10#endif
11#include <generator>
12
13namespace boat::gdal {
14
15struct driver {
16 std::string short_name;
17 std::string long_name;
18 std::string extensions;
19};
20
21enum class driver_type { Raster, Vector };
22enum class driver_op { Create, Open };
23
25inline std::generator<driver> drivers( //
26 [[maybe_unused]] driver_type type,
27 [[maybe_unused]] driver_op op)
28{
29#if __has_include(<gdal.h>)
30 init();
31 for (int i{}, n = GDALGetDriverCount(); i < n; ++i) {
32 auto drv = GDALGetDriver(i);
33 if (!GDALGetMetadataItem( //
34 drv,
35 type == driver_type::Raster ? GDAL_DCAP_RASTER
36 : GDAL_DCAP_VECTOR,
37 0))
38 continue;
39 if (!GDALGetMetadataItem(
40 drv,
41 op == driver_op::Create ? GDAL_DCAP_CREATE : GDAL_DCAP_OPEN,
42 0))
43 continue;
44 auto short_name = GDALGetDriverShortName(drv);
45 if (!short_name || !*short_name)
46 continue;
47 auto long_name = GDALGetDriverLongName(drv);
48 if (!long_name || !*long_name)
49 continue;
50 auto extensions = GDALGetMetadataItem(drv, GDAL_DMD_EXTENSIONS, 0);
51 if (!extensions || !*extensions)
52 continue;
53 co_yield {short_name, long_name, extensions};
54 }
55#else
56 co_return;
57#endif
58}
59
60} // namespace boat::gdal
61
62#endif // BOAT_GDAL_DRIVERS_HPP
Definition catalog.hpp:12
driver_type
Definition drivers.hpp:21
@ Vector
Definition drivers.hpp:21
@ Raster
Definition drivers.hpp:21
std::generator< driver > drivers(driver_type type, driver_op op)
Skips drivers without filename extensions.
Definition drivers.hpp:25
driver_op
Definition drivers.hpp:22
@ Create
Definition drivers.hpp:22
@ Open
Definition drivers.hpp:22
Definition drivers.hpp:15
std::string long_name
Definition drivers.hpp:17
std::string extensions
Space-separated filename extensions.
Definition drivers.hpp:18
std::string short_name
Definition drivers.hpp:16