summaryrefslogtreecommitdiff
path: root/sql/spatial.h
diff options
context:
space:
mode:
Diffstat (limited to 'sql/spatial.h')
-rw-r--r--sql/spatial.h45
1 files changed, 43 insertions, 2 deletions
diff --git a/sql/spatial.h b/sql/spatial.h
index 6f50acac984..901544b6916 100644
--- a/sql/spatial.h
+++ b/sql/spatial.h
@@ -20,6 +20,7 @@
#include "sql_string.h" /* String, LEX_STRING */
#include <my_compiler.h>
+#include <json_lib.h>
#ifdef HAVE_SPATIAL
@@ -249,6 +250,15 @@ public:
wkb_xdr= 0, /* Big Endian */
wkb_ndr= 1 /* Little Endian */
};
+ enum geojson_errors
+ {
+ GEOJ_INCORRECT_GEOJSON= 1,
+ GEOJ_TOO_FEW_POINTS= 2,
+ GEOJ_POLYGON_NOT_CLOSED= 3,
+ GEOJ_DIMENSION_NOT_SUPPORTED= 4,
+ GEOJ_EMPTY_COORDINATES= 5,
+ };
+
/** Callback which creates Geometry objects on top of a given placement. */
typedef Geometry *(*create_geom_t)(char *);
@@ -257,9 +267,11 @@ public:
{
public:
LEX_STRING m_name;
+ LEX_STRING m_geojson_name;
int m_type_id;
create_geom_t m_create_func;
- Class_info(const char *name, int type_id, create_geom_t create_func);
+ Class_info(const char *name, const char *gejson_name,
+ int type_id, create_geom_t create_func);
};
virtual const Class_info *get_class_info() const=0;
@@ -271,8 +283,12 @@ public:
virtual uint init_from_opresult(String *bin,
const char *opres, uint res_len)
{ return init_from_wkb(opres + 4, UINT_MAX32, wkb_ndr, bin) + 4; }
+ virtual bool init_from_json(json_engine_t *je, bool er_on_3D, String *wkb)
+ { return true; }
virtual bool get_data_as_wkt(String *txt, const char **end) const=0;
+ virtual bool get_data_as_json(String *txt, uint max_dec_digits,
+ const char **end) const=0;
virtual bool get_mbr(MBR *mbr, const char **end) const=0;
virtual bool dimension(uint32 *dim, const char **end) const=0;
virtual int get_x(double *x) const { return -1; }
@@ -302,9 +318,13 @@ public:
bool init_stream=1);
static Geometry *create_from_wkb(Geometry_buffer *buffer,
const char *wkb, uint32 len, String *res);
+ static Geometry *create_from_json(Geometry_buffer *buffer, json_engine_t *je,
+ bool er_on_3D, String *res);
static Geometry *create_from_opresult(Geometry_buffer *g_buf,
String *res, Gcalc_result_receiver &rr);
int as_wkt(String *wkt, const char **end);
+ int as_json(String *wkt, uint max_dec_digits, const char **end);
+ int bbox_as_json(String *wkt);
inline void set_data_ptr(const char *data, uint32 data_len)
{
@@ -352,7 +372,7 @@ protected:
Need to perform the calculation in logical units, since multiplication
can overflow the size data type.
- @arg data pointer to the begining of the points array
+ @arg data pointer to the beginning of the points array
@arg expected_points number of points expected
@arg extra_point_space extra space for each point element in the array
@return true if there are not enough points
@@ -379,7 +399,10 @@ public:
uint32 get_data_size() const;
bool init_from_wkt(Gis_read_stream *trs, String *wkb);
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
+ bool init_from_json(json_engine_t *je, bool er_on_3D, String *wkb);
bool get_data_as_wkt(String *txt, const char **end) const;
+ bool get_data_as_json(String *txt, uint max_dec_digits,
+ const char **end) const;
bool get_mbr(MBR *mbr, const char **end) const;
int get_xy(double *x, double *y) const
@@ -431,7 +454,10 @@ public:
uint32 get_data_size() const;
bool init_from_wkt(Gis_read_stream *trs, String *wkb);
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
+ bool init_from_json(json_engine_t *je, bool er_on_3D, String *wkb);
bool get_data_as_wkt(String *txt, const char **end) const;
+ bool get_data_as_json(String *txt, uint max_dec_digits,
+ const char **end) const;
bool get_mbr(MBR *mbr, const char **end) const;
int geom_length(double *len, const char **end) const;
int area(double *ar, const char **end) const;
@@ -462,7 +488,10 @@ public:
bool init_from_wkt(Gis_read_stream *trs, String *wkb);
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
uint init_from_opresult(String *bin, const char *opres, uint res_len);
+ bool init_from_json(json_engine_t *je, bool er_on_3D, String *wkb);
bool get_data_as_wkt(String *txt, const char **end) const;
+ bool get_data_as_json(String *txt, uint max_dec_digits,
+ const char **end) const;
bool get_mbr(MBR *mbr, const char **end) const;
int area(double *ar, const char **end) const;
int exterior_ring(String *result) const;
@@ -496,7 +525,10 @@ public:
bool init_from_wkt(Gis_read_stream *trs, String *wkb);
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
uint init_from_opresult(String *bin, const char *opres, uint res_len);
+ bool init_from_json(json_engine_t *je, bool er_on_3D, String *wkb);
bool get_data_as_wkt(String *txt, const char **end) const;
+ bool get_data_as_json(String *txt, uint max_dec_digits,
+ const char **end) const;
bool get_mbr(MBR *mbr, const char **end) const;
int num_geometries(uint32 *num) const;
int geometry_n(uint32 num, String *result) const;
@@ -522,7 +554,10 @@ public:
bool init_from_wkt(Gis_read_stream *trs, String *wkb);
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
uint init_from_opresult(String *bin, const char *opres, uint res_len);
+ bool init_from_json(json_engine_t *je, bool er_on_3D, String *wkb);
bool get_data_as_wkt(String *txt, const char **end) const;
+ bool get_data_as_json(String *txt, uint max_dec_digits,
+ const char **end) const;
bool get_mbr(MBR *mbr, const char **end) const;
int num_geometries(uint32 *num) const;
int geometry_n(uint32 num, String *result) const;
@@ -549,7 +584,10 @@ public:
uint32 get_data_size() const;
bool init_from_wkt(Gis_read_stream *trs, String *wkb);
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
+ bool init_from_json(json_engine_t *je, bool er_on_3D, String *wkb);
bool get_data_as_wkt(String *txt, const char **end) const;
+ bool get_data_as_json(String *txt, uint max_dec_digits,
+ const char **end) const;
bool get_mbr(MBR *mbr, const char **end) const;
int num_geometries(uint32 *num) const;
int geometry_n(uint32 num, String *result) const;
@@ -578,7 +616,10 @@ public:
bool init_from_wkt(Gis_read_stream *trs, String *wkb);
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
uint init_from_opresult(String *bin, const char *opres, uint res_len);
+ bool init_from_json(json_engine_t *je, bool er_on_3D, String *wkb);
bool get_data_as_wkt(String *txt, const char **end) const;
+ bool get_data_as_json(String *txt, uint max_dec_digits,
+ const char **end) const;
bool get_mbr(MBR *mbr, const char **end) const;
int area(double *ar, const char **end) const;
int geom_length(double *len, const char **end) const;