/* setting the aggregated attributes */ static void InitShapeAttributes(layerObj* layer, clusterInfo* base) { int i; int* itemindexes = layer->iteminfo; for (i = 0; i < layer->numitems; i++) { if (base->shape.numvalues <= i) break; if (itemindexes[i] == MSCLUSTER_FEATURECOUNTINDEX) { if (base->shape.values[i]) msFree(base->shape.values[i]); base->shape.values[i] = msIntToString(base->numsiblings + 1); } else if (itemindexes[i] == MSCLUSTER_GROUPINDEX) { if (base->shape.values[i]) msFree(base->shape.values[i]); if (base->group) base->shape.values[i] = msStrdup(base->group); else base->shape.values[i] = msStrdup(""); } else if (itemindexes[i] == MSCLUSTER_BASEFIDINDEX) { if (base->shape.values[i]) msFree(base->shape.values[i]); base->shape.values[i] = msIntToString(base->shape.index); } else if (EQUALN(layer->items[i], "Count:", 6)) { if (base->shape.values[i]) msFree(base->shape.values[i]); base->shape.values[i] = msStrdup("1"); /* initial count */ } } }
/* update the shape attributes (aggregate) */ static void UpdateShapeAttributes(layerObj* layer, clusterInfo* base, clusterInfo* current) { int i; int* itemindexes = layer->iteminfo; for (i = 0; i < layer->numitems; i++) { if (base->shape.numvalues <= i) break; if (itemindexes[i] == MSCLUSTER_FEATURECOUNTINDEX || itemindexes[i] == MSCLUSTER_GROUPINDEX) continue; if (current->shape.numvalues <= i) break; /* setting the base feature index for each cluster member */ if (itemindexes[i] == MSCLUSTER_BASEFIDINDEX) { msFree(current->shape.values[i]); current->shape.values[i] = msIntToString(base->shape.index); } if (current->shape.values[i]) { if (EQUALN(layer->items[i], "Min:", 4)) { if (strcasecmp(base->shape.values[i], current->shape.values[i]) > 0) { msFree(base->shape.values[i]); base->shape.values[i] = msStrdup(current->shape.values[i]); } } else if (EQUALN(layer->items[i], "Max:", 4)) { if (strcasecmp(base->shape.values[i], current->shape.values[i]) < 0) { msFree(base->shape.values[i]); base->shape.values[i] = msStrdup(current->shape.values[i]); } } else if (EQUALN(layer->items[i], "Sum:", 4)) { double sum = atof(base->shape.values[i]) + atof(current->shape.values[i]); msFree(base->shape.values[i]); base->shape.values[i] = msDoubleToString(sum, MS_FALSE); } else if (EQUALN(layer->items[i], "Count:", 6)) { int count = atoi(base->shape.values[i]) + 1; msFree(base->shape.values[i]); base->shape.values[i] = msIntToString(count); } } } }
/* update the shape attributes (aggregate) */ static void UpdateShapeAttributes(layerObj* layer, clusterInfo* base, clusterInfo* current) { int i; int* itemindexes = layer->iteminfo; for (i = 0; i < layer->numitems; i++) { if (base->shape.numvalues <= i) break; if (itemindexes[i] == MSCLUSTER_FEATURECOUNTINDEX || itemindexes[i] == MSCLUSTER_GROUPINDEX) continue; if (current->shape.numvalues <= i) break; if (current->shape.values[i]) { if (EQUALN(layer->items[i], "Min:", 4)) { if (strcasecmp(base->shape.values[i], current->shape.values[i]) > 0) { msFree(base->shape.values[i]); base->shape.values[i] = msStrdup(current->shape.values[i]); } } else if (EQUALN(layer->items[i], "Max:", 4)) { if (strcasecmp(base->shape.values[i], current->shape.values[i]) < 0) { msFree(base->shape.values[i]); base->shape.values[i] = msStrdup(current->shape.values[i]); } } else if (EQUALN(layer->items[i], "Sum:", 4)) { double sum = atof(base->shape.values[i]) + atof(current->shape.values[i]); msFree(base->shape.values[i]); base->shape.values[i] = msDoubleToString(sum, MS_FALSE); } else if (EQUALN(layer->items[i], "Count:", 6)) { int count = atoi(base->shape.values[i]) + 1; msFree(base->shape.values[i]); base->shape.values[i] = msIntToString(count); } else if (!EQUAL(base->shape.values[i], current->shape.values[i]) && !EQUAL(base->shape.values[i], "")) { /* clear the value if that doesn't match */ msFree(base->shape.values[i]); base->shape.values[i] = msStrdup(""); } } } }