Commit fea271c3 authored by unknown's avatar unknown
Browse files

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

into mysql.com:/usr/home/ram/work/mysql-4.1

parents 27378545 b8d22413
Loading
Loading
Loading
Loading
+22 −25
Original line number Diff line number Diff line
@@ -96,6 +96,12 @@ static Geometry::Class_info
geometrycollection_class("GEOMETRYCOLLECTION",Geometry::wkb_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::Class_info *Geometry::find_class(const char *name, uint32 len)
@@ -266,14 +272,13 @@ const char *Geometry::append_points(String *txt, uint32 n_points,
{			     
  while (n_points--)
  {
    double d;
    double x,y;
    data+= offset;
    float8get(d, data);
    txt->qs_append(d);
    txt->qs_append(' ');
    float8get(d, data + SIZEOF_STORED_DOUBLE);
    get_point(&x, &y, data);
    data+= SIZEOF_STORED_DOUBLE * 2;
    txt->qs_append(d);
    txt->qs_append(x);
    txt->qs_append(' ');
    txt->qs_append(y);
    txt->qs_append(',');
  }
  return data;
@@ -426,8 +431,7 @@ bool Gis_line_string::get_data_as_wkt(String *txt, const char **end) const
  while (n_points--)
  {
    double x, y;
    float8get(x, data);
    float8get(y, data + SIZEOF_STORED_DOUBLE);
    get_point(&x, &y, data);
    data+= SIZEOF_STORED_DOUBLE * 2;
    txt->qs_append(x);
    txt->qs_append(' ');
@@ -460,15 +464,13 @@ int Gis_line_string::length(double *len) const
  if (n_points < 1 || no_data(data, SIZEOF_STORED_DOUBLE * 2 * n_points))
    return 1;

  float8get(prev_x, data);
  float8get(prev_y, data + SIZEOF_STORED_DOUBLE);
  get_point(&prev_x, &prev_y, data);
  data+= SIZEOF_STORED_DOUBLE*2;

  while (--n_points)
  {
    double x, y;
    float8get(x, data);
    float8get(y, data + SIZEOF_STORED_DOUBLE);
    get_point(&x, &y, data);
    data+= SIZEOF_STORED_DOUBLE * 2;
    *len+= sqrt(pow(prev_x-x,2)+pow(prev_y-y,2));
    prev_x= x;
@@ -497,13 +499,11 @@ int Gis_line_string::is_closed(int *closed) const
    return 1;

  /* Get first point */
  float8get(x1, data);
  float8get(y1, data + SIZEOF_STORED_DOUBLE);
  get_point(&x1, &y1, data);

  /* get last point */
  data+= SIZEOF_STORED_DOUBLE*2 + (n_points-2)*POINT_DATA_SIZE;
  float8get(x2, data);
  float8get(y2, data + SIZEOF_STORED_DOUBLE);
  get_point(&x2, &y2, data);

  *closed= (x1==x2) && (y1==y2);
  return 0;
@@ -681,15 +681,13 @@ int Gis_polygon::area(double *ar, const char **end_of_data) const
    n_points= uint4korr(data);
    if (no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points))
      return 1;
    float8get(prev_x, data+4);
    float8get(prev_y, data+(4+SIZEOF_STORED_DOUBLE));
    get_point(&prev_x, &prev_y, data+4);
    data+= (4+SIZEOF_STORED_DOUBLE*2);

    while (--n_points)				// One point is already read
    {
      double x, y;
      float8get(x, data);
      float8get(y, data + SIZEOF_STORED_DOUBLE);
      get_point(&x, &y, data);
      data+= (SIZEOF_STORED_DOUBLE*2);
      /* QQ: Is the following prev_x+x right ? */
      lr_area+= (prev_x + x)* (prev_y - y);
@@ -779,7 +777,8 @@ int Gis_polygon::interior_ring_n(uint32 num, String *result) const
int Gis_polygon::centroid_xy(double *x, double *y) const
{
  uint32 n_linear_rings;
  double res_area, res_cx, res_cy;
  double res_area;
  double res_cx, res_cy;
  const char *data= m_data;
  bool first_loop= 1;
  LINT_INIT(res_area);
@@ -805,15 +804,13 @@ int Gis_polygon::centroid_xy(double *x, double *y) const
    data+= 4;
    if (no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points))
      return 1;
    float8get(prev_x, data);
    float8get(prev_y, data+SIZEOF_STORED_DOUBLE);
    get_point(&prev_x, &prev_y, data);
    data+= (SIZEOF_STORED_DOUBLE*2);

    while (--n_points)				// One point is already read
    {
      double x, y;
      float8get(x, data);
      float8get(y, data + SIZEOF_STORED_DOUBLE);
      get_point(&x, &y, data);
      data+= (SIZEOF_STORED_DOUBLE*2);
      /* QQ: Is the following prev_x+x right ? */
      cur_area+= (prev_x + x) * (prev_y - y);