27 class OGRCoordinateTransformation;
29 namespace Geospatial {
39 : std::runtime_error(
"Geo" + type +
42 : std::runtime_error(
"Geo" + type +
" Error: " + err) {}
48 class GeoTypesFactory;
56 bool getWkb(std::vector<uint8_t>&)
const;
83 bool transform(int32_t srid0, int32_t srid1);
85 static std::shared_ptr<OGRCoordinateTransformation>
getTransformation(int32_t srid0,
94 std::unique_ptr<GeoBase>
run(
GeoOp op,
double param)
const;
97 virtual std::unique_ptr<GeoBase>
clone()
const = 0;
100 GeoBase(OGRGeometry* geom,
const bool owns_geom_obj)
113 GeoPoint(
const std::vector<double>& coords);
116 void getColumns(std::vector<double>& coords)
const;
119 std::unique_ptr<GeoBase>
clone()
const override;
122 GeoPoint(OGRGeometry* geom,
const bool owns_geom_obj) :
GeoBase(geom, owns_geom_obj) {}
132 void getColumns(std::vector<double>& coords, std::vector<double>& bounds)
const;
135 std::unique_ptr<GeoBase>
clone() const final;
139 :
GeoBase(geom, owns_geom_obj) {}
149 void getColumns(std::vector<double>& coords, std::vector<double>& bounds)
const;
152 std::unique_ptr<GeoBase>
clone() const final;
156 :
GeoBase(geom, owns_geom_obj) {}
164 const std::vector<int32_t>& linestring_sizes);
168 std::vector<int32_t>& linestring_sizes,
169 std::vector<double>& bounds)
const;
172 std::unique_ptr<GeoBase>
clone() const final;
176 :
GeoBase(geom, owns_geom_obj) {}
183 GeoPolygon(
const std::vector<double>& coords,
const std::vector<int32_t>& ring_sizes);
187 std::vector<int32_t>& ring_sizes,
188 std::vector<double>& bounds)
const;
193 std::unique_ptr<GeoBase>
clone() const final;
197 :
GeoBase(geom, owns_geom_obj) {}
205 const std::vector<int32_t>& ring_sizes,
206 const std::vector<int32_t>& poly_rings);
210 std::vector<int32_t>& ring_sizes,
211 std::vector<int32_t>& poly_rings,
212 std::vector<double>& bounds)
const;
215 std::unique_ptr<GeoBase>
clone() const final;
219 :
GeoBase(geom, owns_geom_obj) {}
238 const std::vector<int32_t>& ring_sizes,
239 const std::vector<int32_t>& poly_rings,
240 const std::vector<int32_t>& geo_kinds){};
244 std::vector<int32_t>& ring_sizes,
245 std::vector<int32_t>& poly_rings,
246 std::vector<int32_t>& geo_kinds,
247 std::vector<double>& bounds)
const {};
250 std::unique_ptr<GeoBase>
clone() const final;
254 :
GeoBase(geom, owns_geom_obj) {
256 throw GeoTypesError(
"GeoTypesFactory",
"Non-empty GEOMETRY");
266 const std::vector<int32_t>& ring_sizes,
267 const std::vector<int32_t>& poly_rings,
268 const std::vector<int32_t>& geo_kinds){};
272 std::vector<int32_t>& ring_sizes,
273 std::vector<int32_t>& poly_rings,
274 std::vector<int32_t>& geo_kinds,
275 std::vector<double>& bounds)
const {};
278 std::unique_ptr<GeoBase>
clone() const final;
282 :
GeoBase(geom, owns_geom_obj) {
284 throw GeoTypesError(
"GeoTypesFactory",
"Non-empty GEOMETRYCOLLECTION");
295 static std::unique_ptr<GeoBase>
createGeoType(
const std::string& wkt_or_wkb_hex);
297 static std::unique_ptr<GeoBase>
createGeoType(OGRGeometry* geom);
301 std::vector<double>& coords,
302 std::vector<double>& bounds,
303 std::vector<int>& ring_sizes,
304 std::vector<int>& poly_rings,
305 const bool promote_poly_to_mpoly =
false);
309 std::vector<double>& coords,
310 std::vector<double>& bounds,
311 std::vector<int>& ring_sizes,
312 std::vector<int>& poly_rings,
313 const bool promote_poly_to_mpoly =
false);
317 std::vector<double>& coords,
318 std::vector<double>& bounds,
319 std::vector<int>& ring_sizes,
320 std::vector<int>& poly_rings,
321 const bool promote_poly_to_mpoly =
false);
323 static bool getGeoColumns(
const std::vector<std::string>* wkt_or_wkb_hex_column,
325 std::vector<std::vector<double>>& coords_column,
326 std::vector<std::vector<double>>& bounds_column,
327 std::vector<std::vector<int>>& ring_sizes_column,
328 std::vector<std::vector<int>>& poly_rings_column,
329 const bool promote_poly_to_mpoly =
false);
332 std::vector<double>& coords,
333 std::vector<double>& bounds,
334 std::vector<int>& ring_sizes,
335 std::vector<int>& poly_rings,
336 const bool promote_poly_to_mpoly =
false);
341 const bool owns_geom_obj =
true);
344 std::vector<double>& coords,
345 std::vector<double>& bounds,
346 std::vector<int>& ring_sizes,
347 std::vector<int>& poly_rings,
348 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, std::vector< double > &bounds) const
void getColumns(std::vector< double > &coords) const
int32_t getNumInteriorRings() const
std::unique_ptr< GeoBase > clone() const final
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)
GeoMultiLineString(const std::vector< double > &coords, const std::vector< int32_t > &linestring_sizes)
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 HEAVY.AI.
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)
std::unique_ptr< GeoBase > clone() const final
GeoTypesError(const std::string &type, const std::string &err)
GeoType getType() const final
static int createFromWkbView(OGRGeometry **geom, WkbView const)
virtual std::unique_ptr< GeoBase > clone() const =0
GeoType getType() const final
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
std::unique_ptr< GeoBase > clone() const override
void getColumns(std::vector< double > &coords, std::vector< int32_t > &linestring_sizes, 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< 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)
std::unique_ptr< GeoBase > clone() const final
static int createFromWktString(const std::string &wkt, OGRGeometry **geom)
void getColumns(std::vector< double > &coords, std::vector< double > &bounds) const
GeoType getType() const final
std::unique_ptr< GeoBase > clone() const final
GeoMultiPoint(const std::vector< double > &coords)
bool transform(int32_t srid0, int32_t srid1)
GeoType getType() const final
std::string getWktString() const
GeoBase(OGRGeometry *geom, const bool owns_geom_obj)
std::unique_ptr< GeoBase > clone() const final
std::unique_ptr< GeoBase > run(GeoOp op, const GeoBase &other) const
std::unique_ptr< GeoBase > clone() const final
std::unique_ptr< GeoBase > clone() const final
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
GeoType getType() const final
virtual GeoType getType() const =0
GeoType getType() const final