PostGIS  2.3.8dev-r@@SVN_REVISION@@

◆ test_kmeans()

static void test_kmeans ( void  )
static

Definition at line 1145 of file cu_algorithm.c.

References algorithms_suite_setup(), lwalloc(), lwfree(), lwgeom_cluster_2d_kmeans(), lwgeom_free(), lwpoint_as_lwgeom(), lwpoint_make2d(), r, and SRID_UNKNOWN.

Referenced by algorithms_suite_setup().

1146 {
1147  static int cluster_size = 100;
1148  static int num_clusters = 4;
1149  static double spread = 1.5;
1150  int N = cluster_size * num_clusters;
1151  LWGEOM **geoms;
1152  int i, j, k=0;
1153  int *r;
1154 
1155  geoms = lwalloc(sizeof(LWGEOM*) * N);
1156 
1157  for (j = 0; j < num_clusters; j++) {
1158  for (i = 0; i < cluster_size; i++)
1159  {
1160  double u1 = 1.0 * rand() / RAND_MAX;
1161  double u2 = 1.0 * rand() / RAND_MAX;
1162  double z1 = spread * j + sqrt(-2*log2(u1))*cos(2*M_PI*u2);
1163  double z2 = spread * j + sqrt(-2*log2(u1))*sin(2*M_PI*u2);
1164 
1165  LWPOINT *lwp = lwpoint_make2d(SRID_UNKNOWN, z1, z2);
1166  geoms[k++] = lwpoint_as_lwgeom(lwp);
1167  }
1168  }
1169 
1170  r = lwgeom_cluster_2d_kmeans((const LWGEOM **)geoms, N, num_clusters);
1171 
1172  // for (i = 0; i < k; i++)
1173  // {
1174  // printf("[%d] %s\n", r[i], lwgeom_to_ewkt(geoms[i]));
1175  // }
1176 
1177  /* Clean up */
1178  lwfree(r);
1179  for (i = 0; i < k; i++)
1180  lwgeom_free(geoms[i]);
1181  lwfree(geoms);
1182 
1183  return;
1184 }
char * r
Definition: cu_in_wkt.c:24
void lwfree(void *mem)
Definition: lwutil.c:242
LWPOINT * lwpoint_make2d(int srid, double x, double y)
Definition: lwpoint.c:145
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1063
#define SRID_UNKNOWN
Unknown SRID value.
Definition: liblwgeom.h:187
int * lwgeom_cluster_2d_kmeans(const LWGEOM **geoms, int ngeoms, int k)
Take a list of LWGEOMs and a number of clusters and return an integer array indicating which cluster ...
Definition: lwkmeans.c:77
LWGEOM * lwpoint_as_lwgeom(const LWPOINT *obj)
Definition: lwgeom.c:267
void * lwalloc(size_t size)
Definition: lwutil.c:227
Here is the call graph for this function:
Here is the caller graph for this function: