![]() |
MySQL 9.1.0
Source Code Documentation
|
#include <spatial.h>
Public Types | |
typedef Gis_polygon | self |
typedef Gis_polygon_ring | ring_type |
typedef Gis_wkb_vector< ring_type > | inner_container_type |
![]() | |
enum | wkbType { wkb_invalid_type = 0 , wkb_first = 1 , wkb_point = 1 , wkb_linestring = 2 , wkb_polygon = 3 , wkb_multipoint = 4 , wkb_multilinestring = 5 , wkb_multipolygon = 6 , wkb_geometrycollection = 7 , wkb_polygon_inner_rings = 31 , wkb_last = 31 } |
enum | wkbByteOrder { wkb_xdr = 0 , wkb_ndr = 1 , wkb_invalid } |
enum | enum_coordinate_reference_system { coord_first = 1 , cartesian = 1 , coord_last = 1 } |
typedef Geometry *(* | create_geom_t) (char *) |
Callback which creates Geometry objects on top of a given placement. More... | |
Public Member Functions | |
uint32 | get_data_size () const override |
bool | init_from_wkt (Gis_read_stream *trs, String *wkb) override |
uint | init_from_wkb (THD *thd, const char *wkb, uint len, wkbByteOrder bo, String *res) override |
bool | get_data_as_wkt (String *txt, wkb_parser *wkb) const override |
bool | get_mbr (MBR *mbr, wkb_parser *wkb) const override |
int | exterior_ring (String *result) const override |
int | num_interior_ring (uint32 *n_int_rings) const override |
int | interior_ring_n (uint32 num, String *result) const override |
uint32 | feature_dimension () const override |
const Class_info * | get_class_info () const override |
bool | reverse_coordinates () override |
Reverses the coordinates of a geometry. More... | |
bool | validate_coordinate_range (double srs_angular_unit, bool *long_out_of_range, bool *lat_out_of_range, double *out_of_range_value) override |
Check that the coordinates of a geometry is within the valid range. More... | |
ring_type & | outer () const |
inner_container_type & | inners () const |
void | clear () |
Clears outer and inner rings. More... | |
Gis_polygon (const void *wkb, size_t nbytes, const Flags_t &flags, gis::srid_t srid) | |
Gis_polygon (bool isbgadapter=true) | |
Gis_polygon (const self &r) | |
Copy constructor. More... | |
Gis_polygon & | operator= (const Gis_polygon &rhs) |
Deep assignment from polygon 'o' to this object. More... | |
~Gis_polygon () override | |
void | to_wkb_unparsed () |
Make the polygon's data in a single buffer as WKB format. More... | |
void | set_ptr (void *ptr, size_t len) |
Set WKB data to this object, the WKB data will be used read only. More... | |
void | donate_data () override |
bool | set_polygon_ring_order () |
Set this polygon's outer ring to be CCW and inner rings to be CW. More... | |
inner_container_type * | inner_rings () const SUPPRESS_UBSAN |
void | set_inner_rings (inner_container_type *inns) SUPPRESS_UBSAN |
![]() | |
virtual | ~Geometry () |
bool | get_mbr (MBR *mbr) |
virtual bool | dimension (uint32 *dim, wkb_parser *wkb) const |
bool | dimension (uint32 *dim) const |
wkbType | get_type () const |
enum_coordinate_reference_system | get_coordsys () const |
virtual int | get_x (double *) const |
virtual int | get_y (double *) const |
virtual int | geom_length (double *) const |
virtual int | is_closed (int *) const |
virtual int | num_points (uint32 *) const |
virtual int | num_geometries (uint32 *) const |
virtual int | copy_points (String *) const |
virtual int | start_point (String *) const |
virtual int | end_point (String *) const |
virtual int | point_n (uint32 num, String *result) const |
virtual int | geometry_n (uint32 num, String *result) const |
bool | as_wkt (String *wkt, wkb_parser *wkb) const |
bool | as_wkt (String *wkt) const |
bool | as_wkb (String *wkb, bool shallow_copy) const |
Write this geometry's WKB byte string into specified buffer, the SRID is not written into the buffer. More... | |
bool | as_geometry (String *wkb, bool shallow_copy) const |
Write this geometry's GEOMETRY byte string into specified buffer, the SRID will be written before the WKB string to form a GEOMETRY byte string. More... | |
void | set_data_ptr (const void *data, size_t data_len) |
void | set_data_ptr (const wkb_container *c) |
void * | get_data_ptr () const |
bool | envelope (String *result) const |
bool | envelope (MBR *mbr) const |
bool | is_polygon_ring () const |
bool | is_polygon_outer_ring () const |
bool | is_polygon_inner_ring () const |
bool | has_geom_header_space () const |
void | has_geom_header_space (bool b) |
bool | is_components_no_overlapped () const |
void | set_components_no_overlapped (bool b) |
void | set_props (uint16 flag) |
uint16 | get_props () const |
void | set_srid (gis::srid_t id) |
gis::srid_t | get_srid () const |
const void * | normalize_ring_order () |
In place normalize polygons' rings, making outer ring CCW and inner rings CW by reversing the ring's points in the WKB buffer inplace. More... | |
Geometry () | |
Geometry (const void *ptr, size_t len, const Flags_t &flags, gis::srid_t srid) | |
Constructor used as BG adapter or by default constructors of children classes. More... | |
Geometry (const Geometry &geo) | |
Geometry & | operator= (const Geometry &rhs) |
Assignment operator for Geometry class, assignment operators of children classes calls this to do general assignment. More... | |
void * | get_ptr () const |
char * | get_cptr () const |
uchar * | get_ucptr () const |
Geometry * | get_owner () const |
void | set_owner (Geometry *o) |
void | set_byte_order (Geometry::wkbByteOrder bo) |
void | set_dimension (char dim) |
void | set_geotype (Geometry::wkbType gt) |
void | set_nbytes (size_t n) const |
void | set_ownmem (bool b) |
Set whether this object has its own memory. More... | |
bool | get_ownmem () const |
Returns whether this object has its own memory. More... | |
Geometry::wkbByteOrder | get_byte_order () const |
char | get_dimension () const |
Geometry::wkbType | get_geotype () const |
uint32 | get_ogc_geotype () const |
Build an OGC standard type value from m_flags.zm and m_flags.geotype. More... | |
size_t | get_nbytes () const |
void | set_ptr (const void *ptr) |
bool | is_bg_adapter () const |
Whether the Geometry object is created to be used by Boost Geometry or only by MySQL. More... | |
void | set_bg_adapter (bool b) const |
Set whether this object is a BG adapter. More... | |
Flags_t | get_flags () const |
void | set_flags (const Flags_t &flags) |
Private Member Functions | |
void | make_rings () |
Make outer ring and inner rings objects for this polygon if it doesn't have one yet. More... | |
Private Attributes | |
inner_container_type * | m_inn_rings |
Additional Inherited Members | |
![]() | |
static Geometry * | create_by_typeid (Geometry_buffer *buffer, int type_id) |
static Geometry * | construct (Geometry_buffer *buffer, const char *data, uint32 data_len, bool has_srid=true) |
Construct a Geometry object using GEOMETRY byte string. More... | |
static Geometry * | construct (Geometry_buffer *buffer, const String *str, bool has_srid=true) |
static Geometry * | create_from_wkt (Geometry_buffer *buffer, Gis_read_stream *trs, String *wkt, bool init_stream=true, bool check_trailing=true) |
Read wkt text from trs, and write little endian wkb encoding into 'wkt', and create a Geometry instance in 'buffer'. More... | |
static Geometry * | create_from_wkb (THD *thd, Geometry_buffer *buffer, const char *wkb, uint32 len, String *res, bool init) |
Read from 'wkb' (which contains WKB encoded in either endianness) the geometry data, and write WKB of returned Geometry object in little endianness into 'res', and also create geometry object on 'buffer' and return it. More... | |
static bool | is_valid_opengis_geotype (uint32 gtype) |
Check if a given geometry type is a valid geometry type according to OpenGIS. More... | |
static bool | is_valid_geotype (uint32 gtype) |
Check if a given geometry type is a valid internal geometry type. More... | |
static bool | is_valid_geotype (Geometry::wkbType gt) |
Check if a given geometry type is a valid internal geometry type. More... | |
static bool | is_well_formed (const char *from, size_t length, wkbType type, wkbByteOrder bo) |
Verify that a string is a well-formed GEOMETRY string. More... | |
![]() | |
static const uint32 | MAX_GEOM_WKB_LENGTH = 0x3fffffff |
static const gis::srid_t | default_srid = 0 |
static String | bad_geometry_data |
static Class_info * | ci_collection [wkb_last+1] |
![]() | |
void | append_points (String *txt, uint32 n_points, wkb_parser *wkb, uint32 offset, bool bracket_pt=false) const |
Append N points from packed format to text Before calling this function, caller must have already checked that wkb's buffer is complete and not truncated. More... | |
bool | create_point (String *result, wkb_parser *wkb) const |
Create a point from data. More... | |
bool | get_mbr_for_points (MBR *mbr, wkb_parser *wkb, uint offset) const |
Get most bounding rectangle (mbr) for X points. More... | |
bool | is_length_verified () const |
void | set_length_verified (bool b) const |
bool | polygon_is_wkb_form () const |
In a polygon usable by boost geometry, the m_ptr points to the outer ring object, and m_inn_rings points to the inner rings, thus the polygon's data isn't stored in a single WKB. More... | |
void | polygon_is_wkb_form (bool b) |
bool | has_out_of_line_components () const |
If call Gis_wkb_vector<T>::resize() to add a component to X, the geometry may have a geometry not stored inside the WKB buffer of X, hence X has out of line component. More... | |
void | has_out_of_line_components (bool b) |
void | clear_wkb_data () |
virtual void | shallow_push (const Geometry *) |
![]() | |
static Class_info * | find_class (int type_id) |
static Class_info * | find_class (const char *name, size_t len) |
![]() | |
Geometry * | m_owner |
The topmost (root) geometry object, whose m_ptr is the 1st byte of a wkb memory buffer. More... | |
void * | m_ptr |
Pointer to the geometry's wkb data's 1st byte, right after its wkb header if any. More... | |
![]() | |
static const int | POLYGON_OUTER_RING = 0x1 |
static const int | POLYGON_INNER_RING = 0x2 |
static const int | IS_BOOST_GEOMETRY_ADAPTER = 0x4 |
static const int | GEOM_LENGTH_VERIFIED = 0x8 |
static const int | HAS_OUT_OF_LINE_COMPONENTS = 0x10 |
static const int | POLYGON_IN_WKB_FORM = 0x20 |
static const int | HAS_GEOM_HEADER_SPACE = 0x40 |
static const int | MULTIPOLYGON_NO_OVERLAPPED_COMPS = 0x80 |
typedef Gis_polygon Gis_polygon::self |
Gis_polygon::Gis_polygon | ( | const void * | wkb, |
size_t | nbytes, | ||
const Flags_t & | flags, | ||
gis::srid_t | srid | ||
) |
|
inlineexplicit |
Gis_polygon::Gis_polygon | ( | const self & | r | ) |
Copy constructor.
Coordinate type, closed-ness and direction will never change.
r | another polygon of same coordinate type, ring closed-ness and ring direction. |
|
override |
|
inline |
Clears outer and inner rings.
|
inlineoverridevirtual |
Reimplemented from Geometry.
|
overridevirtual |
Reimplemented from Geometry.
|
overridevirtual |
Reimplemented from Geometry.
|
overridevirtual |
Reimplemented from Geometry.
|
overridevirtual |
Reimplemented from Geometry.
|
overridevirtual |
Reimplemented from Geometry.
|
overridevirtual |
Reimplemented from Geometry.
|
inline |
|
inline |
Reimplemented from Geometry.
|
private |
Make outer ring and inner rings objects for this polygon if it doesn't have one yet.
Outer ring and inner rings have to have separated memory space, because we can't predict which one will be edited first. So the polygon object doesn't directly have memory, its m_ptr points to the outer ring, its m_inn_rings points to the inner rings, each have its own memory address and length, and Gis_polygon::get_nbytes returns the sum of them.
If the polygon doesn't own memory, then there is only one piece of memory passed into it and used by it, otherwise the two pieces of memory are separately allocated and released.
|
overridevirtual |
Reimplemented from Geometry.
Gis_polygon & Gis_polygon::operator= | ( | const Gis_polygon & | rhs | ) |
Deep assignment from polygon 'o' to this object.
rhs | the Gis_polygon instance to duplicate from. |
|
inline |
|
overridevirtual |
Reverses the coordinates of a geometry.
Switches the coordinates of the wkb string pointed to by the Geometry. Ex: Used on a POINT(5,2), the result would be POINT(2, 5).
false | coordinate reversal was successful |
true | coordinate reversal was unsuccessful |
Implements Geometry.
|
inline |
bool Gis_polygon::set_polygon_ring_order | ( | ) |
Set this polygon's outer ring to be CCW and inner rings to be CW.
void Gis_polygon::set_ptr | ( | void * | ptr, |
size_t | len | ||
) |
Set WKB data to this object, the WKB data will be used read only.
ptr | WKB data pointer. |
len | WKB data number of bytes. |
void Gis_polygon::to_wkb_unparsed | ( | ) |
Make the polygon's data in a single buffer as WKB format.
This polygon must be one for BG use before this call, and after this call it can never be passed into BG functions directly after this call, and it is suitable as a Gis_polygon for MySQL GIS code, because it's exactly the same as a Gis_polygon object returned by Geometry::create_from_wkt/wkb.
|
overridevirtual |
Check that the coordinates of a geometry is within the valid range.
Checks if the coordinates in a geometry are within allowed range of a geographic spatial reference system. Valid range for longitude and latitude coordinates in geographic spatial reference systems are (-180, 180) and [-90, 90] degrees, respectively.
[in] | srs_angular_unit | Unit to radians conversion factor. |
[out] | long_out_of_range | Longitude is out of range. |
[out] | lat_out_of_range | Latitude is out of range. |
[out] | out_of_range_value | The value that is out of range. |
false | Coordinates are within allowed range. |
true | Coordinates are not within allowed range, or an error occurred during range checking. |
Implements Geometry.
|
private |