Exemple #1
0
  private void loadLogsum(String logsumFile, boolean taz) {
    logger.info("Processing bike logsum from " + logsumFile);
    int counter = 0;
    long startTime = System.currentTimeMillis();

    int segmentWidth = BikeLogsumSegment.segmentWidth();
    try (BufferedReader reader = new BufferedReader(new FileReader(logsumFile))) {
      int logsumIndex = -1;
      int timeIndex = -1;
      boolean first = true;

      String line;
      while ((line = reader.readLine()) != null) {
        String[] lineData = line.trim().split(",");
        for (int i = 0; i < lineData.length; i++) lineData[i] = lineData[i].trim();
        if (first) {
          for (int i = 2; i < lineData.length; i++) { // first two are for row and column
            String columnName = lineData[i].toLowerCase();
            if (columnName.contains("logsum")) logsumIndex = i;
            if (columnName.contains("time")) timeIndex = i;
          }
          first = false;
          continue;
        }
        if (++counter % 100_000 == 0)
          logger.debug(
              "Finished processing "
                  + counter
                  + " node pairs (logsum lookup size: "
                  + logsum.size()
                  + ")");
        // if we ever bring back segmented logsums, then this will be a bit more complicated
        // the basic idea is all logsums first, then times (in same order) so lookups are
        // straightforward
        // without having to replicate the hashmap, which is a big data structure
        double[] data =
            new double[] {
              Double.parseDouble(lineData[logsumIndex]), Double.parseDouble(lineData[timeIndex])
            };

        int fromZone = Integer.parseInt(lineData[0]);
        int toZone = Integer.parseInt(lineData[1]);
        int indexFactor = taz ? -1 : 1;
        MatrixLookup ml = new MatrixLookup(indexFactor * fromZone, indexFactor * toZone);
        logsum.put(ml, data);
      }
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
    logger.info(
        "Finished processing "
            + counter
            + " node pairs (logsum lookup size: "
            + logsum.size()
            + ") in "
            + ((System.currentTimeMillis() - startTime) / 60000.0)
            + " minutes");
  }
Exemple #2
0
 public double getTime(BikeLogsumSegment segment, int rowId, int columnId) {
   double[] logsums = getLogsums(rowId, columnId);
   return logsums == null
       ? Double.POSITIVE_INFINITY
       : logsums[segment.getSegmentId() + BikeLogsumSegment.segmentWidth()];
 }
Exemple #3
0
 @Override
 public double getValue(BikeLogsumSegment segment, int rowId, int columnId) {
   double[] logsums = getLogsums(rowId, columnId);
   return logsums == null ? -999 : logsums[segment.getSegmentId()];
 }