예제 #1
0
  /**
   * @param args
   * @throws IOException
   */
  public static void main(String[] args) throws IOException {
    ZoneCollection zones = new ZoneCollection();
    String data =
        new String(
            Files.readAllBytes(Paths.get("/home/johannes/gsv/gis/nuts/de.nuts3.gk3.geojson")));
    zones.addAll(ZoneGeoJsonIO.parseFeatureCollection(data));
    data = null;
    zones.setPrimaryKey("gsvId");

    Map<String, Set<Zone>> aggZones = new HashMap<>();
    for (Zone zone : zones.getZones()) {
      String code = zone.getAttribute("nuts2_code");
      Set<Zone> set = aggZones.get(code);
      if (set == null) {
        set = new HashSet<>();
        aggZones.put(code, set);
      }
      set.add(zone);
    }

    Set<Zone> newZones = new HashSet<>();

    for (Entry<String, Set<Zone>> entry : aggZones.entrySet()) {
      Set<Zone> set = entry.getValue();
      Geometry refGeo = null;
      for (Zone zone : set) {
        if (refGeo != null) {

          Geometry geo2 = zone.getGeometry();

          refGeo = refGeo.union(geo2);
        } else {
          refGeo = zone.getGeometry();
        }
      }

      Zone zone = new Zone(refGeo);
      zone.setAttribute("nuts2_code", entry.getKey());
      newZones.add(zone);
    }

    data = ZoneGeoJsonIO.toJson(newZones);
    Files.write(
        Paths.get("/home/johannes/gsv/gis/nuts/de.nuts2.gk3.geojson"),
        data.getBytes(),
        StandardOpenOption.CREATE);
  }
예제 #2
0
  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;
  }