Commit 9c1bc425 authored by unknown's avatar unknown

Merge mysql.com:/usr/home/ram/work/mysql-4.1-build

into mysql.com:/usr/home/ram/work/mysql-5.0-build


sql/spatial.cc:
  Auto merged
parents cb611552 b8d22413
...@@ -98,6 +98,12 @@ static Geometry::Class_info ...@@ -98,6 +98,12 @@ static Geometry::Class_info
geometrycollection_class("GEOMETRYCOLLECTION",Geometry::wkb_geometrycollection, geometrycollection_class("GEOMETRYCOLLECTION",Geometry::wkb_geometrycollection,
create_geometrycollection); create_geometrycollection);
static void get_point(double *x, double *y, const char *data)
{
float8get(*x, data);
float8get(*y, data + SIZEOF_STORED_DOUBLE);
}
/***************************** Geometry *******************************/ /***************************** Geometry *******************************/
Geometry::Class_info *Geometry::find_class(const char *name, uint32 len) Geometry::Class_info *Geometry::find_class(const char *name, uint32 len)
...@@ -268,14 +274,13 @@ const char *Geometry::append_points(String *txt, uint32 n_points, ...@@ -268,14 +274,13 @@ const char *Geometry::append_points(String *txt, uint32 n_points,
{ {
while (n_points--) while (n_points--)
{ {
double d; double x,y;
data+= offset; data+= offset;
float8get(d, data); get_point(&x, &y, data);
txt->qs_append(d);
txt->qs_append(' ');
float8get(d, data + SIZEOF_STORED_DOUBLE);
data+= SIZEOF_STORED_DOUBLE * 2; data+= SIZEOF_STORED_DOUBLE * 2;
txt->qs_append(d); txt->qs_append(x);
txt->qs_append(' ');
txt->qs_append(y);
txt->qs_append(','); txt->qs_append(',');
} }
return data; return data;
...@@ -428,8 +433,7 @@ bool Gis_line_string::get_data_as_wkt(String *txt, const char **end) const ...@@ -428,8 +433,7 @@ bool Gis_line_string::get_data_as_wkt(String *txt, const char **end) const
while (n_points--) while (n_points--)
{ {
double x, y; double x, y;
float8get(x, data); get_point(&x, &y, data);
float8get(y, data + SIZEOF_STORED_DOUBLE);
data+= SIZEOF_STORED_DOUBLE * 2; data+= SIZEOF_STORED_DOUBLE * 2;
txt->qs_append(x); txt->qs_append(x);
txt->qs_append(' '); txt->qs_append(' ');
...@@ -462,15 +466,13 @@ int Gis_line_string::length(double *len) const ...@@ -462,15 +466,13 @@ int Gis_line_string::length(double *len) const
if (n_points < 1 || no_data(data, SIZEOF_STORED_DOUBLE * 2 * n_points)) if (n_points < 1 || no_data(data, SIZEOF_STORED_DOUBLE * 2 * n_points))
return 1; return 1;
float8get(prev_x, data); get_point(&prev_x, &prev_y, data);
float8get(prev_y, data + SIZEOF_STORED_DOUBLE);
data+= SIZEOF_STORED_DOUBLE*2; data+= SIZEOF_STORED_DOUBLE*2;
while (--n_points) while (--n_points)
{ {
double x, y; double x, y;
float8get(x, data); get_point(&x, &y, data);
float8get(y, data + SIZEOF_STORED_DOUBLE);
data+= SIZEOF_STORED_DOUBLE * 2; data+= SIZEOF_STORED_DOUBLE * 2;
*len+= sqrt(pow(prev_x-x,2)+pow(prev_y-y,2)); *len+= sqrt(pow(prev_x-x,2)+pow(prev_y-y,2));
prev_x= x; prev_x= x;
...@@ -499,13 +501,11 @@ int Gis_line_string::is_closed(int *closed) const ...@@ -499,13 +501,11 @@ int Gis_line_string::is_closed(int *closed) const
return 1; return 1;
/* Get first point */ /* Get first point */
float8get(x1, data); get_point(&x1, &y1, data);
float8get(y1, data + SIZEOF_STORED_DOUBLE);
/* get last point */ /* get last point */
data+= SIZEOF_STORED_DOUBLE*2 + (n_points-2)*POINT_DATA_SIZE; data+= SIZEOF_STORED_DOUBLE*2 + (n_points-2)*POINT_DATA_SIZE;
float8get(x2, data); get_point(&x2, &y2, data);
float8get(y2, data + SIZEOF_STORED_DOUBLE);
*closed= (x1==x2) && (y1==y2); *closed= (x1==x2) && (y1==y2);
return 0; return 0;
...@@ -683,15 +683,13 @@ int Gis_polygon::area(double *ar, const char **end_of_data) const ...@@ -683,15 +683,13 @@ int Gis_polygon::area(double *ar, const char **end_of_data) const
n_points= uint4korr(data); n_points= uint4korr(data);
if (no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points)) if (no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points))
return 1; return 1;
float8get(prev_x, data+4); get_point(&prev_x, &prev_y, data+4);
float8get(prev_y, data+(4+SIZEOF_STORED_DOUBLE));
data+= (4+SIZEOF_STORED_DOUBLE*2); data+= (4+SIZEOF_STORED_DOUBLE*2);
while (--n_points) // One point is already read while (--n_points) // One point is already read
{ {
double x, y; double x, y;
float8get(x, data); get_point(&x, &y, data);
float8get(y, data + SIZEOF_STORED_DOUBLE);
data+= (SIZEOF_STORED_DOUBLE*2); data+= (SIZEOF_STORED_DOUBLE*2);
/* QQ: Is the following prev_x+x right ? */ /* QQ: Is the following prev_x+x right ? */
lr_area+= (prev_x + x)* (prev_y - y); lr_area+= (prev_x + x)* (prev_y - y);
...@@ -781,7 +779,8 @@ int Gis_polygon::interior_ring_n(uint32 num, String *result) const ...@@ -781,7 +779,8 @@ int Gis_polygon::interior_ring_n(uint32 num, String *result) const
int Gis_polygon::centroid_xy(double *x, double *y) const int Gis_polygon::centroid_xy(double *x, double *y) const
{ {
uint32 n_linear_rings; uint32 n_linear_rings;
double res_area, res_cx, res_cy; double res_area;
double res_cx, res_cy;
const char *data= m_data; const char *data= m_data;
bool first_loop= 1; bool first_loop= 1;
LINT_INIT(res_area); LINT_INIT(res_area);
...@@ -807,15 +806,13 @@ int Gis_polygon::centroid_xy(double *x, double *y) const ...@@ -807,15 +806,13 @@ int Gis_polygon::centroid_xy(double *x, double *y) const
data+= 4; data+= 4;
if (no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points)) if (no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points))
return 1; return 1;
float8get(prev_x, data); get_point(&prev_x, &prev_y, data);
float8get(prev_y, data+SIZEOF_STORED_DOUBLE);
data+= (SIZEOF_STORED_DOUBLE*2); data+= (SIZEOF_STORED_DOUBLE*2);
while (--n_points) // One point is already read while (--n_points) // One point is already read
{ {
double x, y; double x, y;
float8get(x, data); get_point(&x, &y, data);
float8get(y, data + SIZEOF_STORED_DOUBLE);
data+= (SIZEOF_STORED_DOUBLE*2); data+= (SIZEOF_STORED_DOUBLE*2);
/* QQ: Is the following prev_x+x right ? */ /* QQ: Is the following prev_x+x right ? */
cur_area+= (prev_x + x) * (prev_y - y); cur_area+= (prev_x + x) * (prev_y - y);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment