package au.gov.amsa.geo.adhoc; import java.io.File; import java.util.List; import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.github.davidmoten.grumpy.core.Position; import au.gov.amsa.risky.format.BinaryFixes; import au.gov.amsa.util.Files; import rx.Observable; public class HeadingCourseDiffMain { private static final Logger log = LoggerFactory.getLogger(CountCrossingsIntoRegionMain.class); public static void main(String[] args) { Pattern pattern = Pattern.compile(".*\\.track"); List<File> files = Files.find(new File("/media/an/binary-fixes-5-minute/2014"), pattern); // files.addAll(Files.find(new // File("/media/an/binary-fixes-5-minute/2013"), pattern)); // files.addAll(Files.find(new // File("/media/an/binary-fixes-5-minute/2014"), pattern)); // files.addAll(Files.find(new // File("/media/an/binary-fixes-5-minute/2015"), pattern)); log.info("files=" + files.size()); ConcurrentHashMap<Integer, Long> map = new ConcurrentHashMap<>(); int count = Observable.from(files) // // .doOnNext(System.out::println) // // .doOnNext(System.out::println) .concatMap(file -> BinaryFixes.from(file) .filter(f -> f.courseOverGroundDegrees().isPresent() && f.headingDegrees().isPresent()) .map(f -> Math.abs(Position.getBearingDifferenceDegrees( f.courseOverGroundDegrees().get(), f.headingDegrees().get()))) // .doOnNext(x -> { int bucket = (int) Math.round(x); map.compute(bucket, (n, num) -> num == null ? 1 : num + 1); })// ) // .count().toBlocking().single(); System.out.println("count=" + count); for (Integer key : new TreeSet<Integer>(map.keySet())) { System.out.println(key + "\t" + map.get(key)); } } }