27 class OGRCoordinateTransformation;
29 namespace Geospatial {
34 : std::runtime_error(
"Geo" + type +
37 : std::runtime_error(
"Geo" + type +
" Error: " + err) {}
43 class GeoTypesFactory;
51 bool getWkb(std::vector<uint8_t>&)
const;
73 bool transform(int32_t srid0, int32_t srid1);
75 static std::shared_ptr<OGRCoordinateTransformation>
getTransformation(int32_t srid0,
84 std::unique_ptr<GeoBase>
run(
GeoOp op,
double param)
const;
88 GeoBase(OGRGeometry* geom,
const bool owns_geom_obj)
94 static int createFromWkb(
const std::vector<uint8_t>& wkb, OGRGeometry** geom);
101 GeoPoint(
const std::vector<double>& coords);
104 void getColumns(std::vector<double>& coords)
const;
108 GeoPoint(OGRGeometry* geom,
const bool owns_geom_obj) :
GeoBase(geom, owns_geom_obj) {}
118 void getColumns(std::vector<double>& coords, std::vector<double>& bounds)
const;
123 :
GeoBase(geom, owns_geom_obj) {}
130 GeoPolygon(
const std::vector<double>& coords,
const std::vector<int32_t>& ring_sizes);
134 std::vector<int32_t>& ring_sizes,
135 std::vector<double>& bounds)
const;
142 :
GeoBase(geom, owns_geom_obj) {}
150 const std::vector<int32_t>& ring_sizes,
151 const std::vector<int32_t>& poly_rings);
155 std::vector<int32_t>& ring_sizes,
156 std::vector<int32_t>& poly_rings,
157 std::vector<double>& bounds)
const;
162 :
GeoBase(geom, owns_geom_obj) {}
170 const std::vector<int32_t>& ring_sizes,
171 const std::vector<int32_t>& poly_rings,
172 const std::vector<int32_t>& geo_kinds){};
176 std::vector<int32_t>& ring_sizes,
177 std::vector<int32_t>& poly_rings,
178 std::vector<int32_t>& geo_kinds,
179 std::vector<double>& bounds)
const {};
184 :
GeoBase(geom, owns_geom_obj) {
186 throw GeoTypesError(
"GeoTypesFactory",
"Non-empty GEOMETRY");
196 const std::vector<int32_t>& ring_sizes,
197 const std::vector<int32_t>& poly_rings,
198 const std::vector<int32_t>& geo_kinds){};
202 std::vector<int32_t>& ring_sizes,
203 std::vector<int32_t>& poly_rings,
204 std::vector<int32_t>& geo_kinds,
205 std::vector<double>& bounds)
const {};
210 :
GeoBase(geom, owns_geom_obj) {
212 throw GeoTypesError(
"GeoTypesFactory",
"Non-empty GEOMETRYCOLLECTION");
223 static std::unique_ptr<GeoBase>
createGeoType(
const std::string& wkt_or_wkb_hex);
224 static std::unique_ptr<GeoBase>
createGeoType(
const std::vector<uint8_t>& wkb);
225 static std::unique_ptr<GeoBase>
createGeoType(OGRGeometry* geom);
229 std::vector<double>& coords,
230 std::vector<double>& bounds,
231 std::vector<int>& ring_sizes,
232 std::vector<int>& poly_rings,
233 const bool promote_poly_to_mpoly =
false);
237 std::vector<double>& coords,
238 std::vector<double>& bounds,
239 std::vector<int>& ring_sizes,
240 std::vector<int>& poly_rings,
241 const bool promote_poly_to_mpoly =
false);
245 std::vector<double>& coords,
246 std::vector<double>& bounds,
247 std::vector<int>& ring_sizes,
248 std::vector<int>& poly_rings,
249 const bool promote_poly_to_mpoly =
false);
251 static bool getGeoColumns(
const std::vector<std::string>* wkt_or_wkb_hex_column,
253 std::vector<std::vector<double>>& coords_column,
254 std::vector<std::vector<double>>& bounds_column,
255 std::vector<std::vector<int>>& ring_sizes_column,
256 std::vector<std::vector<int>>& poly_rings_column,
257 const bool promote_poly_to_mpoly =
false);
260 std::vector<double>& coords,
261 std::vector<double>& bounds,
262 std::vector<int>& ring_sizes,
263 std::vector<int>& poly_rings,
264 const bool promote_poly_to_mpoly =
false);
269 const bool owns_geom_obj =
true);
272 std::vector<double>& coords,
273 std::vector<double>& bounds,
274 std::vector<int>& ring_sizes,
275 std::vector<int>& poly_rings,
276 const bool promote_poly_to_mpoly =
false);
GeoGeometry(const std::string &wkt)
std::unique_ptr< GeoBase > optimized_run(GeoOp op, const GeoBase &other) const
GeoTypesError(const std::string &type, const int ogr_err)
static std::unique_ptr< GeoBase > createGeoType(const std::string &wkt_or_wkb_hex)
GeoPoint(const std::vector< double > &coords)
void getColumns(std::vector< double > &coords) const
int32_t getNumInteriorRings() const
GeoLineString(OGRGeometry *geom, const bool owns_geom_obj)
GeoMultiPolygon(const std::vector< double > &coords, const std::vector< int32_t > &ring_sizes, const std::vector< int32_t > &poly_rings)
const OGRGeometry * getOGRGeometry() const
GeoLineString(const std::vector< double > &coords)
GeoGeometryCollection(const std::vector< double > &coords, const std::vector< int32_t > &ring_sizes, const std::vector< int32_t > &poly_rings, const std::vector< int32_t > &geo_kinds)
static void getGeoColumnsImpl(const std::unique_ptr< GeoBase > &geospatial_base, SQLTypeInfo &ti, std::vector< double > &coords, std::vector< double > &bounds, std::vector< int > &ring_sizes, std::vector< int > &poly_rings, const bool promote_poly_to_mpoly=false)
Constants for Builtin SQL Types supported by OmniSci.
static void getNullGeoColumns(SQLTypeInfo &ti, std::vector< double > &coords, std::vector< double > &bounds, std::vector< int > &ring_sizes, std::vector< int > &poly_rings, const bool promote_poly_to_mpoly=false)
static std::unique_ptr< Geospatial::GeoBase > createGeoTypeImpl(OGRGeometry *geom, const bool owns_geom_obj=true)
bool getWkb(std::vector< uint8_t > &) const
static std::shared_ptr< OGRCoordinateTransformation > getTransformation(int32_t srid0, int32_t srid1)
GeoTypesError(const std::string &type, const std::string &err)
GeoType getType() const final
GeoMultiPolygon(OGRGeometry *geom, const bool owns_geom_obj)
GeoType getType() const final
void getColumns(std::vector< double > &coords, std::vector< int32_t > &ring_sizes, std::vector< int32_t > &poly_rings, std::vector< int32_t > &geo_kinds, std::vector< double > &bounds) const
static std::string OGRErrorToStr(const int ogr_err)
GeoGeometry(const std::vector< double > &coords, const std::vector< int32_t > &ring_sizes, const std::vector< int32_t > &poly_rings, const std::vector< int32_t > &geo_kinds)
bool g_enable_smem_group_by true
static int createFromWkb(const std::vector< uint8_t > &wkb, OGRGeometry **geom)
void getColumns(std::vector< double > &coords, std::vector< int32_t > &ring_sizes, std::vector< int32_t > &poly_rings, std::vector< int32_t > &geo_kinds, std::vector< double > &bounds) const
void getColumns(std::vector< double > &coords, std::vector< int32_t > &ring_sizes, std::vector< int32_t > &poly_rings, std::vector< double > &bounds) const
GeoPoint(OGRGeometry *geom, const bool owns_geom_obj)
static bool getGeoColumns(const std::string &wkt_or_wkb_hex, SQLTypeInfo &ti, std::vector< double > &coords, std::vector< double > &bounds, std::vector< int > &ring_sizes, std::vector< int > &poly_rings, const bool promote_poly_to_mpoly=false)
virtual bool operator==(const GeoBase &other) const
static OGRGeometry * createOGRGeometry(const std::string &wkt_or_wkb_hex)
static int createFromWktString(const std::string &wkt, OGRGeometry **geom)
void getColumns(std::vector< double > &coords, std::vector< double > &bounds) const
GeoType getType() const final
GeoPolygon(OGRGeometry *geom, const bool owns_geom_obj)
bool transform(int32_t srid0, int32_t srid1)
GeoType getType() const final
std::string getWktString() const
GeoGeometry(OGRGeometry *geom, const bool owns_geom_obj)
GeoGeometryCollection(OGRGeometry *geom, const bool owns_geom_obj)
GeoBase(OGRGeometry *geom, const bool owns_geom_obj)
std::unique_ptr< GeoBase > run(GeoOp op, const GeoBase &other) const
void getColumns(std::vector< double > &coords, std::vector< int32_t > &ring_sizes, std::vector< double > &bounds) const
int32_t getBestPlanarSRID() const
GeoPolygon(const std::vector< double > &coords, const std::vector< int32_t > &ring_sizes)
GeoType getType() const final
virtual GeoType getType() const =0
GeoType getType() const final