/sigmah/src/test/java/org/sigmah/server/report/generator/map/CoincidentPointsClusterTest.java

http://sigma-h.googlecode.com/ · Java · 128 lines · 72 code · 40 blank · 16 comment · 4 complexity · 613572d53626ec6919100f3a25b1d02d MD5 · raw file

  1. /*
  2. * All Sigmah code is released under the GNU General Public License v3
  3. * See COPYRIGHT.txt and LICENSE.txt.
  4. */
  5. package org.sigmah.server.report.generator.map;
  6. import org.junit.Assert;
  7. import org.junit.Test;
  8. import org.sigmah.server.report.generator.MapSymbol;
  9. import org.sigmah.shared.report.content.LatLng;
  10. import org.sigmah.shared.report.content.Point;
  11. import java.io.BufferedReader;
  12. import java.io.InputStreamReader;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. /*
  16. * Real example that didn't work.
  17. *
  18. * @author Alex Bertram
  19. */
  20. public class CoincidentPointsClusterTest extends GraphTest {
  21. @Test
  22. public void testSimpleData() throws Exception {
  23. List<PointValue> points = new ArrayList<PointValue>();
  24. points.add(new PointValue(null, new MapSymbol(), 7.0, new Point(0, 0)));
  25. points.add(new PointValue(null, new MapSymbol(), 2.0, new Point(0, 0)));
  26. points.add(new PointValue(null, new MapSymbol(), 41.0, new Point(100, 100)));
  27. points.add(new PointValue(null, new MapSymbol(), 9.0, new Point(0, 0)));
  28. points.add(new PointValue(null, new MapSymbol(), 39.0, new Point(100, 100)));
  29. double originalSum = 7 + 2 + 9 + 41 + 39;
  30. // Now build the graph
  31. MarkerGraph graph = new MarkerGraph(points,
  32. new BubbleLayerGenerator.IntersectionCalculator(15));
  33. GeneticSolver solver = new GeneticSolver();
  34. List<Cluster> clusters = solver.solve(graph, new GsLogCalculator(5, 15),
  35. new CircleFitnessFunctor(), UpperBoundsCalculator.calculate(graph, new FixedRadiiCalculator(5)));
  36. // check to make sure all values were included
  37. double sumAfterClustering = 0;
  38. for (Cluster cluster : clusters) {
  39. sumAfterClustering += cluster.sumValues();
  40. }
  41. Assert.assertEquals(originalSum, sumAfterClustering, 0.0001);
  42. Assert.assertEquals(2, clusters.size());
  43. saveClusters(graph, "clusterTest-solution", clusters);
  44. }
  45. @Test
  46. public void testRealData() throws Exception {
  47. // Define projection for the test case
  48. TiledMap map = new TiledMap(492, 690, new LatLng(2.293492496, 30.538372993), 9);
  49. // Read data
  50. BufferedReader in = new BufferedReader(new InputStreamReader(
  51. GraphTest.class.getResourceAsStream("/distribscolaire-points.csv")));
  52. double originalSum = 0;
  53. List<PointValue> points = new ArrayList<PointValue>();
  54. while (in.ready()) {
  55. String line = in.readLine();
  56. String[] columns = line.split(",");
  57. double lat = Double.parseDouble(columns[0]);
  58. double lng = Double.parseDouble(columns[1]);
  59. PointValue pv = new PointValue();
  60. pv.px = map.fromLatLngToPixel(new LatLng(lat, lng));
  61. pv.value = Double.parseDouble(columns[2]);
  62. pv.symbol = new MapSymbol();
  63. originalSum += pv.value;
  64. points.add(pv);
  65. }
  66. // Now build the graph
  67. MarkerGraph graph = new MarkerGraph(points,
  68. new BubbleLayerGenerator.IntersectionCalculator(15));
  69. // make sure nothing was lost in the merging of coincident points
  70. double nodeSum = 0;
  71. for (MarkerGraph.Node node : graph.getNodes()) {
  72. nodeSum += node.getPointValue().value;
  73. }
  74. Assert.assertEquals("values after construction of graph", originalSum, nodeSum, 0.001);
  75. saveGraphImage("clusterTest2", graph, 15);
  76. GeneticSolver solver = new GeneticSolver();
  77. List<Cluster> clusters = solver.solve(graph, new GsLogCalculator(5, 15),
  78. new CircleFitnessFunctor(), UpperBoundsCalculator.calculate(graph, new FixedRadiiCalculator(5)));
  79. // check to make sure all values were included
  80. double sumAfterClustering = 0;
  81. for (Cluster cluster : clusters) {
  82. sumAfterClustering += cluster.sumValues();
  83. }
  84. Assert.assertEquals(originalSum, sumAfterClustering, 0.001);
  85. Assert.assertEquals(16, clusters.size());
  86. saveClusters(graph, "clusterTest-solution", clusters);
  87. }
  88. }