public static void main(String args[]) throws IOException { String in = "/Users/jillenberger/work/matrix2014/data/matrices/tomtom.de.txt"; String out = "/Users/jillenberger/work/matrix2014/data/matrices/tomtom.de.100KM.txt"; String zoneFile = "/Users/jillenberger/work/matrix2014/data/zones/nuts3.psm.gk3.geojson"; String idKey = "NO"; NumericMatrix m = NumericMatrixIO.read(in); ZoneCollection zones = ZoneGeoJsonIO.readFromGeoJSON(zoneFile, idKey); DistanceCalculator dCalc = CartesianDistanceCalculator.getInstance(); double threshold = 100000; Set<String> keys = m.keys(); for (String i : keys) { Zone z_i = zones.get(i); for (String j : keys) { Zone z_j = zones.get(j); double d = dCalc.distance(z_i.getGeometry().getCentroid(), z_j.getGeometry().getCentroid()); if (d < threshold) { m.set(i, j, null); } } } NumericMatrixIO.write(m, out); }
public NumericMatrix generate( Network network, ZoneCollection zones, String zoneIdKey, int nThreads) { this.network = network; logger.info("Initializing node mappings..."); initMappings(zones, zoneIdKey); logger.info("Calculation travel times..."); ExecutorService executor = Executors.newFixedThreadPool(nThreads); Set<Future<Worker>> futures = new HashSet<>(); for (Zone zone : zones.getZones()) { Worker worker = new Worker(zone.getAttribute(zoneIdKey)); futures.add(executor.submit(worker, worker)); } ProgressLogger.init(futures.size(), 1, 10); HashMatrix<String, CellData> sumMatrix = new HashMatrix<>(); int errors = 0; for (Future<Worker> future : futures) { try { Worker worker = future.get(); HashMatrix<String, CellData> m = worker.getMatrix(); Set<String> keys = m.keys(); for (String i : keys) { for (String j : keys) { CellData cData = m.get(i, j); if (cData != null) { CellData cDataSum = sumMatrix.get(i, j); if (cDataSum == null) { cDataSum = new CellData(); sumMatrix.set(i, j, cDataSum); } cDataSum.count += cData.count; cDataSum.ttSum += cData.ttSum; } } } errors += worker.getErrors(); ProgressLogger.step(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } ProgressLogger.terminate(); if (errors > 0) { logger.info(String.format("%s errors occured.", errors)); } logger.info("Collection results..."); NumericMatrix ttMatrix = new NumericMatrix(); Set<String> keys = sumMatrix.keys(); for (String i : keys) { for (String j : keys) { CellData cData = sumMatrix.get(i, j); double avr = cData.ttSum / cData.count; ttMatrix.set(i, j, avr); } } return ttMatrix; }