mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
MDEV-34141: Implements the function ST_Simplify
The GIS function ST_Simplify takes ad input a geometry and a double. It applies the Ramer-Douglas-Peucker algorithm on the geometry and returns the resulting geometry. The tests have been cherry-picked from the MySQL implementation of this function to grant compatibility among the two implementations. Co-authored-by: David Zhao <david.zhao@oracle.com> Co-authored-by: Pavan Naik <pavan.naik@oracle.com> Co-authored-by: Norvald H. Ryeng <norvald.ryeng@oracle.com> Co-authored-by: Erlend Dahl <erlend.dahl@oracle.com> Co-authored-by: Jon Hauglid <jon.hauglid@oracle.com> Co-authored-by: Hans H Melby <hans.h.melby@oracle.com> Co-authored-by: Tor Didriksen <tor.didriksen@oracle.com>
This commit is contained in:
committed by
Dave Gosselin
parent
d232e4fd4f
commit
ba66f8f37b
@@ -32,7 +32,7 @@ const uint32 SRID_PLACEHOLDER= 0;
|
||||
const uint SIZEOF_STORED_DOUBLE= 8;
|
||||
const uint BYTE_ORDER_SIZE= 1;
|
||||
const uint POINT_DATA_SIZE= (SIZEOF_STORED_DOUBLE * 2);
|
||||
const uint WKB_HEADER_SIZE= 1+4;
|
||||
const uint WKB_HEADER_SIZE= BYTE_ORDER_SIZE + 4;
|
||||
const uint32 GET_SIZE_ERROR= ((uint32) -1);
|
||||
|
||||
struct st_point_2d
|
||||
@@ -293,6 +293,7 @@ public:
|
||||
virtual int area(double *ar, const char **end) const { return -1;}
|
||||
virtual int is_closed(int *closed) const { return -1; }
|
||||
virtual int is_valid(int *valid) const { return -1; }
|
||||
virtual int simplify(String* result, double max_distance) const { return -1; }
|
||||
virtual int num_interior_ring(uint32 *n_int_rings) const { return -1; }
|
||||
virtual int num_points(uint32 *n_points) const { return -1; }
|
||||
virtual int num_geometries(uint32 *num) const { return -1; }
|
||||
@@ -396,7 +397,7 @@ protected:
|
||||
|
||||
|
||||
/***************************** Point *******************************/
|
||||
|
||||
|
||||
class Gis_point: public Geometry
|
||||
{
|
||||
public:
|
||||
@@ -411,6 +412,7 @@ public:
|
||||
const char **end) const override;
|
||||
bool get_mbr(MBR *mbr, const char **end) const override;
|
||||
int is_valid(int *valid) const override;
|
||||
|
||||
int get_xy(double *x, double *y) const
|
||||
{
|
||||
const char *data= m_data;
|
||||
@@ -483,6 +485,7 @@ public:
|
||||
int geom_length(double *len, const char **end) const override;
|
||||
int area(double *ar, const char **end) const override;
|
||||
int is_closed(int *closed) const override;
|
||||
int simplify(String* result, double max_distance) const override;
|
||||
int num_points(uint32 *n_points) const override;
|
||||
int is_valid(int *valid) const override;
|
||||
int start_point(String *point) const override;
|
||||
@@ -517,6 +520,7 @@ public:
|
||||
bool get_mbr(MBR *mbr, const char **end) const override;
|
||||
int is_valid(int *valid) const override;
|
||||
int area(double *ar, const char **end) const override;
|
||||
int simplify(String* result, double max_distance) 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;
|
||||
@@ -590,6 +594,7 @@ public:
|
||||
int geometry_n(uint32 num, String *result) const override;
|
||||
int geom_length(double *len, const char **end) const override;
|
||||
int is_closed(int *closed) const override;
|
||||
int simplify(String* result, double max_distance) const override;
|
||||
bool dimension(uint32 *dim, const char **end) const override
|
||||
{
|
||||
*dim= 1;
|
||||
@@ -620,6 +625,7 @@ public:
|
||||
int num_geometries(uint32 *num) const override;
|
||||
int geometry_n(uint32 num, String *result) const override;
|
||||
int area(double *ar, const char **end) const override;
|
||||
int simplify(String* result, double max_distance) const override;
|
||||
int centroid(String *result) const override;
|
||||
bool dimension(uint32 *dim, const char **end) const override
|
||||
{
|
||||
@@ -651,6 +657,7 @@ public:
|
||||
int is_valid(int *valid) const override;
|
||||
bool get_mbr(MBR *mbr, const char **end) const override;
|
||||
int area(double *ar, const char **end) const override;
|
||||
int simplify(String* result, double max_distance) const override;
|
||||
int geom_length(double *len, const char **end) const override;
|
||||
int num_geometries(uint32 *num) const override;
|
||||
int geometry_n(uint32 num, String *result) const override;
|
||||
|
Reference in New Issue
Block a user