OmniSciDB  c1a53651b2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Geospatial::GeoMultiLineString Class Reference

#include <Types.h>

+ Inheritance diagram for Geospatial::GeoMultiLineString:
+ Collaboration diagram for Geospatial::GeoMultiLineString:

Public Member Functions

 GeoMultiLineString (const std::vector< double > &coords, const std::vector< int32_t > &linestring_sizes)
 
 GeoMultiLineString (const std::string &wkt)
 
void getColumns (std::vector< double > &coords, std::vector< int32_t > &linestring_sizes, std::vector< double > &bounds) const
 
GeoType getType () const final
 
std::unique_ptr< GeoBaseclone () const final
 
- Public Member Functions inherited from Geospatial::GeoBase
 GeoBase ()
 
virtual ~GeoBase ()
 
std::string getWktString () const
 
bool getWkb (std::vector< uint8_t > &) const
 
const OGRGeometry * getOGRGeometry () const
 
int32_t getBestPlanarSRID () const
 
bool transform (int32_t srid0, int32_t srid1)
 
bool transform (SQLTypeInfo &ti)
 
virtual bool operator== (const GeoBase &other) const
 
bool isEmpty () const
 
std::unique_ptr< GeoBaserun (GeoOp op, const GeoBase &other) const
 
std::unique_ptr< GeoBaseoptimized_run (GeoOp op, const GeoBase &other) const
 
std::unique_ptr< GeoBaserun (GeoOp op, double param) const
 
bool run (GeoOp op) const
 

Protected Member Functions

 GeoMultiLineString (OGRGeometry *geom, const bool owns_geom_obj)
 
- Protected Member Functions inherited from Geospatial::GeoBase
 GeoBase (OGRGeometry *geom, const bool owns_geom_obj)
 

Friends

class GeoTypesFactory
 

Additional Inherited Members

- Public Types inherited from Geospatial::GeoBase
enum  GeoType {
  GeoType::kPOINT, GeoType::kLINESTRING, GeoType::kPOLYGON, GeoType::kMULTIPOLYGON,
  GeoType::kGEOMETRY, GeoType::kGEOMETRYCOLLECTION, GeoType::kMULTILINESTRING, GeoType::kMULTIPOINT
}
 
enum  GeoOp {
  GeoOp::kPROJECTION = 0, GeoOp::kINTERSECTION = 1, GeoOp::kDIFFERENCE = 2, GeoOp::kUNION = 3,
  GeoOp::kBUFFER = 4, GeoOp::kISVALID = 5, GeoOp::kISEMPTY = 6, GeoOp::kEQUALS = 7,
  GeoOp::kCONCAVEHULL = 8, GeoOp::kCONVEXHULL = 9
}
 
- Static Public Member Functions inherited from Geospatial::GeoBase
static std::shared_ptr
< OGRCoordinateTransformation > 
getTransformation (int32_t srid0, int32_t srid1)
 
- Static Protected Member Functions inherited from Geospatial::GeoBase
static int createFromWktString (const std::string &wkt, OGRGeometry **geom)
 
static int createFromWkbView (OGRGeometry **geom, WkbView const)
 
- Protected Attributes inherited from Geospatial::GeoBase
OGRGeometry * geom_ = nullptr
 
bool owns_geom_obj_
 

Detailed Description

Definition at line 161 of file Types.h.

Constructor & Destructor Documentation

GeoMultiLineString::GeoMultiLineString ( const std::vector< double > &  coords,
const std::vector< int32_t > &  linestring_sizes 
)

Definition at line 709 of file Types.cpp.

References CHECK, and Geospatial::GeoBase::geom_.

Referenced by clone().

710  {
711  geom_ = OGRGeometryFactory::createGeometry(OGRwkbGeometryType::wkbMultiLineString);
712  OGRMultiLineString* multilinestring = dynamic_cast<OGRMultiLineString*>(geom_);
713  CHECK(multilinestring);
714 
715  size_t coords_ctr = 0;
716  for (const auto linestring_sz : linestring_sizes) {
717  OGRLineString linestring;
718  auto next_coords_ctr = coords_ctr + 2 * linestring_sz;
719  CHECK(next_coords_ctr <= coords.size());
720  for (auto i = coords_ctr; i < next_coords_ctr; i += 2) {
721  linestring.addPoint(coords[i], coords[i + 1]);
722  }
723  coords_ctr = next_coords_ctr;
724  multilinestring->addGeometry(&linestring);
725  }
726 }
OGRGeometry * geom_
Definition: Types.h:102
#define CHECK(condition)
Definition: Logger.h:291

+ Here is the caller graph for this function:

GeoMultiLineString::GeoMultiLineString ( const std::string &  wkt)

Definition at line 728 of file Types.cpp.

References CHECK, Geospatial::GeoBase::createFromWktString(), and Geospatial::GeoBase::geom_.

728  {
729  const auto err = GeoBase::createFromWktString(wkt, &geom_);
730  if (err != OGRERR_NONE) {
731  throw GeoTypesError("MultiLineString", err);
732  }
733  CHECK(geom_);
734  if (wkbFlatten(geom_->getGeometryType()) != OGRwkbGeometryType::wkbMultiLineString) {
735  throw GeoTypesError("MultiLineString",
736  "Unexpected geometry type from WKT string: " +
737  std::string(OGRGeometryTypeToName(geom_->getGeometryType())));
738  }
739 }
OGRGeometry * geom_
Definition: Types.h:102
static int createFromWktString(const std::string &wkt, OGRGeometry **geom)
Definition: Types.cpp:154
#define CHECK(condition)
Definition: Logger.h:291

+ Here is the call graph for this function:

Geospatial::GeoMultiLineString::GeoMultiLineString ( OGRGeometry *  geom,
const bool  owns_geom_obj 
)
inlineprotected

Definition at line 175 of file Types.h.

176  : GeoBase(geom, owns_geom_obj) {}

Member Function Documentation

std::unique_ptr< GeoBase > GeoMultiLineString::clone ( ) const
finalvirtual

Implements Geospatial::GeoBase.

Definition at line 704 of file Types.cpp.

References CHECK, Geospatial::GeoBase::geom_, and GeoMultiLineString().

704  {
705  CHECK(geom_);
706  return std::unique_ptr<GeoBase>(new GeoMultiLineString(geom_->clone(), true));
707 }
OGRGeometry * geom_
Definition: Types.h:102
GeoMultiLineString(const std::vector< double > &coords, const std::vector< int32_t > &linestring_sizes)
Definition: Types.cpp:709
#define CHECK(condition)
Definition: Logger.h:291

+ Here is the call graph for this function:

void GeoMultiLineString::getColumns ( std::vector< double > &  coords,
std::vector< int32_t > &  linestring_sizes,
std::vector< double > &  bounds 
) const

Definition at line 741 of file Types.cpp.

References CHECK, Geospatial::GeoBase::geom_, and NULL_DOUBLE.

743  {
744  auto multilinestring = dynamic_cast<OGRMultiLineString*>(geom_);
745  CHECK(multilinestring);
746 
747  if (multilinestring->IsEmpty()) {
748  // until the run-time can handle empties
749  throw GeoTypesError("MultiLineString", "'EMPTY' not supported");
750  // return null bounds
751  bounds.push_back(NULL_DOUBLE);
752  bounds.push_back(NULL_DOUBLE);
753  bounds.push_back(NULL_DOUBLE);
754  bounds.push_back(NULL_DOUBLE);
755  return;
756  }
757 
758  BoundingBox bbox;
759  for (auto l = 0; l < multilinestring->getNumGeometries(); l++) {
760  const auto geom = multilinestring->getGeometryRef(l);
761  CHECK(geom);
762  const auto linestring = dynamic_cast<OGRLineString*>(geom);
763  if (!linestring) {
764  throw GeoTypesError("MultiLineString",
765  "Failed to read linestring geometry from multilinestring");
766  }
767  auto linestring_sz = linestring->getNumPoints();
768  linestring_sizes.push_back(linestring_sz);
769  for (auto i = 0; i < linestring_sz; i++) {
770  OGRPoint point;
771  linestring->getPoint(i, &point);
772  double x = point.getX();
773  double y = point.getY();
774  coords.push_back(x);
775  coords.push_back(y);
776  bbox.update(x, y);
777  }
778  }
779  bounds.push_back(bbox.min.x);
780  bounds.push_back(bbox.min.y);
781  bounds.push_back(bbox.max.x);
782  bounds.push_back(bbox.max.y);
783 }
OGRGeometry * geom_
Definition: Types.h:102
#define NULL_DOUBLE
#define CHECK(condition)
Definition: Logger.h:291
GeoType Geospatial::GeoMultiLineString::getType ( ) const
inlinefinalvirtual

Friends And Related Function Documentation

friend class GeoTypesFactory
friend

Definition at line 178 of file Types.h.


The documentation for this class was generated from the following files: