diff --git a/src/Main.java b/src/Main.java index 8c91e2657d136301144cd3c335d32f53702d96c1..520b924a891a29a097d1f00c559256186f80775f 100644 --- a/src/Main.java +++ b/src/Main.java @@ -18,6 +18,7 @@ import search.BST; import search.BasicSearch; import search.BasicSearchResult; import search.Histogram; +import search.RecordCluster; import sort.Bound; import sort.GeneralRange; import sort.KDT; @@ -71,6 +72,11 @@ public class Main { public static void init() { System.out.println("Welcome!"); + + BasicSearchResult bsr = BasicSearch.range(159512, 1960, 2016); + ArrayList<RecordCluster> rc = (ArrayList<RecordCluster>) bsr.cluster(1000000); + System.out.println(rc.size()); + while(true) { System.out.println("Main Menu"); System.out.println("Available commands:"); diff --git a/src/search/BasicSearch.java b/src/search/BasicSearch.java index 59b83266bd485f04526dcf86e16c915ffad35b9b..9a8cd231281c2996446e32ba8c190ab07be9c54c 100644 --- a/src/search/BasicSearch.java +++ b/src/search/BasicSearch.java @@ -65,6 +65,6 @@ public class BasicSearch { } double time = sw.elapsedTime(); - return new BasicSearchResult(results, time); + return new BasicSearchResult(taxonId, yearLo, yearHi, results, time); } } diff --git a/src/search/BasicSearchResult.java b/src/search/BasicSearchResult.java index 7ab7827e6613d738dd39eb65a6653bb2c67b2ed3..9c0ed434ae72f911acccbc5837b358ea2ca11bea 100644 --- a/src/search/BasicSearchResult.java +++ b/src/search/BasicSearchResult.java @@ -1,27 +1,28 @@ package search; import java.util.ArrayList; +import java.util.HashMap; import data.Record; -<<<<<<< HEAD +import sort.Bound; import sort.GeneralRange; -======= +import sort.RangeHelper; + import java.lang.Math; ->>>>>>> branch 'web' of git@gitlab.cas.mcmaster.ca:schankuc/2XB3.git public class BasicSearchResult { + private final Integer taxonId; + private final Integer yearLo; + private final Integer yearHi; private ArrayList<Record> results; private final double time; private BST<Integer, Integer> histogram; private Integer sum; - private - - public static void main(String[] args) { - - //Graph g = new Graph(); - } - public BasicSearchResult(ArrayList<Record> results, double time) { + public BasicSearchResult(Integer taxonId, Integer yearLo, Integer yearHi, ArrayList<Record> results, double time) { + this.taxonId = taxonId; + this.yearLo = yearLo; + this.yearHi = yearHi; this.results = results; this.time = time; } @@ -53,19 +54,64 @@ public class BasicSearchResult { return this.sum; } -<<<<<<< HEAD /** * * @param area */ public Iterable<RecordCluster> cluster(double area){ + HashMap<String, Integer> nodeMap = new HashMap<String, Integer>(); + HashMap<String, Boolean> marked = new HashMap<String, Boolean>(); + + int i = 0; + for(Record r: results) { + nodeMap.put(r.getOccurId(), i); + i++; + } + + Graph G = new Graph(results.size()); + + double dist = Math.sqrt(area); + + + for (Record r: results) { + if (marked.get(r.getOccurId()) != null) continue; + double lat = r.getLatitude(); + double lon = r.getLongitude(); + BasicSearchResult res = BasicSearch.range(taxonId, yearLo, yearHi, lat - latRange(dist), lat + latRange(dist), lon - lngRange(dist,lat), lon + lngRange(dist,lat)); + for (Record r1: res.results()) { + marked.put(r1.getOccurId(), true); + G.addEdge(nodeMap.get(r.getOccurId()), nodeMap.get(r1.getOccurId())); + } + } + System.out.println("Edges found"); + + CC cc = new CC(G); + + ArrayList<RecordCluster> clusters = new ArrayList<RecordCluster>(); + for(int j = 0; j < cc.count(); j++) { + clusters.add(new RecordCluster()); + } + + for (int j = 0; j < G.V(); j++) { + Integer component = cc.id(j); + clusters.get(component).addRecord(results.get(j)); + } + + return clusters; } - private ArrayList<GeneralRange> ranges(double lat, double lon, double area){ - ArrayList<GeneralRange>() + private ArrayList<GeneralRange<Record>> ranges(double lat, double lon, double area){ + double dist = Math.sqrt(area); + + ArrayList<GeneralRange<Record>> range = new ArrayList<GeneralRange<Record>>(); + + GeneralRange<Record> latRange = RangeHelper.latitude(Bound.LOWHIGH, lat - latRange(dist), lat + latRange(dist)); + GeneralRange<Record> lonRange = RangeHelper.longitude(Bound.LOWHIGH, lon - lngRange(dist,lat), lon + lngRange(dist,lat)); + + return range; } -======= + private double lngRange(double dist, double lat){ return dist/(Math.cos(lat)*222); } @@ -73,6 +119,4 @@ public class BasicSearchResult { private double latRange(double dist){ return (dist/111)/2; } - ->>>>>>> branch 'web' of git@gitlab.cas.mcmaster.ca:schankuc/2XB3.git } diff --git a/src/search/CC.java b/src/search/CC.java index 7726bac67040148ddff0916c89ef584aa57ac3fc..637667f49537e08a047119385f5b65b5dbaff6b3 100644 --- a/src/search/CC.java +++ b/src/search/CC.java @@ -1,5 +1,7 @@ package search; +import java.util.ArrayList; + public class CC { private boolean[] marked; diff --git a/src/search/RecordCluster.java b/src/search/RecordCluster.java index e896722d99576a106e6e3fbf1ac7dd1dcc4d5346..6bfe63086954c1f941215efb696b4cb6c0257326 100644 --- a/src/search/RecordCluster.java +++ b/src/search/RecordCluster.java @@ -9,6 +9,11 @@ public class RecordCluster { private ArrayList<Record> records; private Point centroid; + public RecordCluster() { + records = new ArrayList<Record>(); + centroid = new Point(0,0); + } + public void addRecord(Record r) { records.add(r); } diff --git a/src/search/RedBlackTree.java b/src/search/RedBlackTree.java index 45bfd91cb1aa30b1a4b2dbff4dead5cc6169dd8c..df9a53a644bb9de40fa28a3f42dca08af48f605c 100644 --- a/src/search/RedBlackTree.java +++ b/src/search/RedBlackTree.java @@ -1,5 +1,7 @@ package search; +import sort.GeneralCompare; + public class RedBlackTree<Key, Value> { private Node<Key, Value> root; // Root of the tree private GeneralCompare<Key> compare; @@ -39,11 +41,6 @@ public class RedBlackTree<Key, Value> { h = h.left(); } } -<<<<<<< HEAD -======= - - ->>>>>>> 459508d... get method added to redBlackTree /**