1#ifndef SQL_GIS_GEOMETRIES_TRAITS_H_INCLUDED
2#define SQL_GIS_GEOMETRIES_TRAITS_H_INCLUDED
34#include <boost/geometry/core/access.hpp>
35#include <boost/geometry/core/closure.hpp>
36#include <boost/geometry/core/coordinate_dimension.hpp>
37#include <boost/geometry/core/coordinate_system.hpp>
38#include <boost/geometry/core/coordinate_type.hpp>
39#include <boost/geometry/core/cs.hpp>
40#include <boost/geometry/core/exterior_ring.hpp>
41#include <boost/geometry/core/interior_rings.hpp>
42#include <boost/geometry/core/interior_type.hpp>
43#include <boost/geometry/core/point_order.hpp>
44#include <boost/geometry/core/ring_type.hpp>
45#include <boost/geometry/core/tags.hpp>
46#include <boost/geometry/geometries/concepts/linestring_concept.hpp>
47#include <boost/geometry/geometries/concepts/point_concept.hpp>
48#include <boost/geometry/geometries/concepts/polygon_concept.hpp>
49#include <boost/geometry/multi/core/tags.hpp>
65struct tag<
gis::Cartesian_point> {
66 typedef boost::geometry::point_tag
type;
70struct coordinate_type<
gis::Cartesian_point> {
75struct coordinate_system<
gis::Cartesian_point> {
76 typedef boost::geometry::cs::cartesian
type;
80struct dimension<
gis::Cartesian_point> : boost::mpl::int_<2> {};
82template <std::
size_t Dimension>
83struct access<
gis::Cartesian_point, Dimension> {
85 return p.get<Dimension>();
89 p.set<Dimension>(value);
96struct tag<
gis::Cartesian_linestring> {
97 typedef boost::geometry::linestring_tag
type;
103struct tag<
gis::Cartesian_linearring> {
104 typedef boost::geometry::ring_tag
type;
108struct point_order<
gis::Cartesian_linearring> {
109 static const order_selector value = counterclockwise;
113struct closure<
gis::Cartesian_linearring> {
114 static const closure_selector value = closed;
120struct tag<
gis::Cartesian_polygon> {
121 typedef boost::geometry::polygon_tag
type;
125struct ring_const_type<
gis::Cartesian_polygon> {
130struct ring_mutable_type<
gis::Cartesian_polygon> {
135struct interior_const_type<
gis::Cartesian_polygon> {
141struct interior_mutable_type<
gis::Cartesian_polygon> {
147struct exterior_ring<
gis::Cartesian_polygon> {
159struct interior_rings<
gis::Cartesian_polygon> {
176struct tag<
gis::Cartesian_multipoint> {
177 typedef boost::geometry::multi_point_tag
type;
183struct tag<
gis::Cartesian_multilinestring> {
184 typedef boost::geometry::multi_linestring_tag
type;
190struct tag<
gis::Cartesian_multipolygon> {
191 typedef boost::geometry::multi_polygon_tag
type;
201struct tag<
gis::Geographic_point> {
202 typedef boost::geometry::point_tag
type;
206struct coordinate_type<
gis::Geographic_point> {
211struct coordinate_system<
gis::Geographic_point> {
212 typedef boost::geometry::cs::geographic<radian>
type;
216struct dimension<
gis::Geographic_point> : boost::mpl::int_<2> {};
218template <std::
size_t Dimension>
219struct access<
gis::Geographic_point, Dimension> {
221 return p.get<Dimension>();
225 p.set<Dimension>(value);
232struct tag<
gis::Geographic_linestring> {
233 typedef boost::geometry::linestring_tag
type;
239struct tag<
gis::Geographic_linearring> {
240 typedef boost::geometry::ring_tag
type;
244struct point_order<
gis::Geographic_linearring> {
245 static const order_selector value = counterclockwise;
249struct closure<
gis::Geographic_linearring> {
250 static const closure_selector value = closed;
256struct tag<
gis::Geographic_polygon> {
257 typedef boost::geometry::polygon_tag
type;
261struct ring_const_type<
gis::Geographic_polygon> {
266struct ring_mutable_type<
gis::Geographic_polygon> {
271struct interior_const_type<
gis::Geographic_polygon> {
277struct interior_mutable_type<
gis::Geographic_polygon> {
283struct exterior_ring<
gis::Geographic_polygon> {
295struct interior_rings<
gis::Geographic_polygon> {
313struct tag<
gis::Geographic_multipoint> {
314 typedef boost::geometry::multi_point_tag
type;
320struct tag<
gis::Geographic_multilinestring> {
321 typedef boost::geometry::multi_linestring_tag
type;
327struct tag<
gis::Geographic_multipolygon> {
328 typedef boost::geometry::multi_polygon_tag
type;
Malloc_allocator is a C++ STL memory allocator based on my_malloc/my_free.
Definition: malloc_allocator.h:63
A Cartesian 2d linear ring.
Definition: geometries_cs.h:177
A Cartesian 2d point.
Definition: geometries_cs.h:47
A Cartesian 2d polygon.
Definition: geometries_cs.h:269
decltype(m_interior_rings) & interior_rings()
Get list of interior rings.
Cartesian_linearring & cartesian_exterior_ring() const
Get the exterior ring.
Definition: geometries.cc:210
decltype(m_interior_rings) const & const_interior_rings() const
Get list of interior rings.
A geographic (ellipsoidal) 2d linear ring.
Definition: geometries_cs.h:223
A geographic (ellipsoidal) 2d point.
Definition: geometries_cs.h:58
A geographic (ellipsoidal) 2d polygon.
Definition: geometries_cs.h:322
decltype(m_interior_rings) & interior_rings()
Get list of interior rings.
decltype(m_interior_rings) const & const_interior_rings() const
Get list of interior rings.
Geographic_linearring & geographic_exterior_ring() const
Get the exterior ring.
Definition: geometries.cc:255
const char * p
Definition: ctype-mb.cc:1237
This file declares the coordinate system specific subclasses of the geometry class hierarchy.
Tag dispatch for custom Role_properties.
Definition: sql_auth_cache.h:588
std::vector< T, ut::allocator< T > > vector
Specialization of vector which uses allocator.
Definition: ut0new.h:2874
static double get(gis::Cartesian_point const &p)
Definition: geometries_traits.h:84
static void set(gis::Cartesian_point &p, double const &value)
Definition: geometries_traits.h:88
static void set(gis::Geographic_point &p, double const &value)
Definition: geometries_traits.h:224
static double get(gis::Geographic_point const &p)
Definition: geometries_traits.h:220
boost::geometry::cs::cartesian type
Definition: geometries_traits.h:76
boost::geometry::cs::geographic< radian > type
Definition: geometries_traits.h:212
double type
Definition: geometries_traits.h:71
double type
Definition: geometries_traits.h:207
static gis::Cartesian_linearring & get(gis::Cartesian_polygon &py)
Definition: geometries_traits.h:148
static gis::Cartesian_linearring const & get(gis::Cartesian_polygon const &py)
Definition: geometries_traits.h:152
static gis::Geographic_linearring const & get(gis::Geographic_polygon const &py)
Definition: geometries_traits.h:288
static gis::Geographic_linearring & get(gis::Geographic_polygon &py)
Definition: geometries_traits.h:284
std::vector< gis::Cartesian_linearring, Malloc_allocator< gis::Cartesian_linearring > > const & type
Definition: geometries_traits.h:137
std::vector< gis::Geographic_linearring, Malloc_allocator< gis::Geographic_linearring > > const & type
Definition: geometries_traits.h:273
std::vector< gis::Cartesian_linearring, Malloc_allocator< gis::Cartesian_linearring > > & type
Definition: geometries_traits.h:143
std::vector< gis::Geographic_linearring, Malloc_allocator< gis::Geographic_linearring > > & type
Definition: geometries_traits.h:279
static std::vector< gis::Cartesian_linearring, Malloc_allocator< gis::Cartesian_linearring > > & get(gis::Cartesian_polygon &py)
Definition: geometries_traits.h:162
static std::vector< gis::Cartesian_linearring, Malloc_allocator< gis::Cartesian_linearring > > const & get(gis::Cartesian_polygon const &py)
Definition: geometries_traits.h:168
static std::vector< gis::Geographic_linearring, Malloc_allocator< gis::Geographic_linearring > > const & get(gis::Geographic_polygon const &py)
Definition: geometries_traits.h:305
static std::vector< gis::Geographic_linearring, Malloc_allocator< gis::Geographic_linearring > > & get(gis::Geographic_polygon &py)
Definition: geometries_traits.h:298
gis::Cartesian_linearring const & type
Definition: geometries_traits.h:126
gis::Geographic_linearring const & type
Definition: geometries_traits.h:262
gis::Cartesian_linearring & type
Definition: geometries_traits.h:131
gis::Geographic_linearring & type
Definition: geometries_traits.h:267
boost::geometry::ring_tag type
Definition: geometries_traits.h:104
boost::geometry::linestring_tag type
Definition: geometries_traits.h:97
boost::geometry::multi_linestring_tag type
Definition: geometries_traits.h:184
boost::geometry::multi_point_tag type
Definition: geometries_traits.h:177
boost::geometry::multi_polygon_tag type
Definition: geometries_traits.h:191
boost::geometry::point_tag type
Definition: geometries_traits.h:66
boost::geometry::polygon_tag type
Definition: geometries_traits.h:121
boost::geometry::ring_tag type
Definition: geometries_traits.h:240
boost::geometry::linestring_tag type
Definition: geometries_traits.h:233
boost::geometry::multi_linestring_tag type
Definition: geometries_traits.h:321
boost::geometry::multi_point_tag type
Definition: geometries_traits.h:314
boost::geometry::multi_polygon_tag type
Definition: geometries_traits.h:328
boost::geometry::point_tag type
Definition: geometries_traits.h:202
boost::geometry::polygon_tag type
Definition: geometries_traits.h:257