/**
* This file is hereby placed into the Public Domain. This means anyone is
* free to do whatever they wish with this file.
*/
package mil.nga.giat.process.elasticsearch;
import java.awt.image.Raster;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.IntStream;
import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.feature.DefaultFeatureCollection;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
import org.opengis.feature.simple.SimpleFeatureType;
public class TestUtil {
public static SimpleFeatureCollection createAggregationFeatures(List<Map<String,Object>> data) {
final SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder();
builder.setName( "testType" );
builder.add("_aggregation", HashMap.class );
builder.add("aString", String.class );
final SimpleFeatureType featureType = builder.buildFeatureType();
final DefaultFeatureCollection collection = new DefaultFeatureCollection();
final SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(featureType);
data.stream().forEach(item -> {
item.keySet().stream().forEach(key -> {
featureBuilder.set(key, item.get(key));
});
collection.add(featureBuilder.buildFeature(null));
});
return collection;
}
public static float[][] getGrid(GridCoverage2D coverage) {
Raster data = coverage.getRenderedImage().getData();
float[][] grid = new float[data.getHeight()][data.getWidth()];
IntStream.range(0, data.getHeight()).forEach(i-> {
IntStream.range(0, data.getWidth()).forEach(j-> {
grid[i][j] = data.getPixel(j,i,new float[1])[0];
});
});
return grid;
}
public static Map<String,Object> createDocCountBucket(String bucketName, int docCount) {
Map<String,Object> bucket = new HashMap<>();
bucket.put(GeoHashGrid.BUCKET_NAME_KEY, bucketName);
bucket.put("doc_count", docCount);
return bucket;
}
public static Map<String,Object> createMetricBucket(int docCount, String metricName, String valueName, int value) {
Map<String,Object> metric = new HashMap<>();
metric.put(valueName, value);
Map<String,Object> bucket = createDocCountBucket("grid_cell_name", docCount);
bucket.put(metricName, metric);
return bucket;
}
public static List<Map<String,Object>> createBuckets(int[] values) {
List<Map<String,Object>> buckets = new ArrayList<>();
for (int i=0; i<values.length; i++) {
buckets.add(createDocCountBucket(Integer.toString(i), values[i]));
}
return buckets;
}
public static Map<String,Object> createAggBucket(String aggName, int[] values) {
int totalDocCount = 0;
List<Map<String,Object>> buckets = new ArrayList<>();
for (int i=0; i<values.length; i++) {
totalDocCount += values[i];
buckets.add(createDocCountBucket(Integer.toString(i), values[i]));
}
Map<String,Object> aggResults = new HashMap<>();
aggResults.put(GeoHashGrid.BUCKETS_KEY, buckets);
Map<String,Object> bucket = createDocCountBucket("grid_cell_name", totalDocCount);
bucket.put(aggName, aggResults);
return bucket;
}
public static String toString(float[][] grid) {
return Arrays.deepToString(grid).replace("], ", "]\n ");
}
}