public void createDilutedPlans( final Coord center, final double radius, final String fromFile, final String toFile) { final Map<Id<Link>, Link> areaOfInterest = new HashMap<>(); Network network = this.scenario.getNetwork(); log.info("extracting aoi:"); log.info(" center: " + center.getX() + " / " + center.getY()); log.info(" radius: " + radius); for (Link link : network.getLinks().values()) { final Node from = link.getFromNode(); final Node to = link.getToNode(); if ((CoordUtils.calcDistance(from.getCoord(), center) <= radius) || (CoordUtils.calcDistance(to.getCoord(), center) <= radius)) { System.out.println(" link " + link.getId().toString()); areaOfInterest.put(link.getId(), link); } } log.info(" # links in aoi: " + areaOfInterest.size()); log.info("creating diluted dpopulation:"); log.info(" input-file: " + fromFile); log.info(" output-file: " + toFile); PopulationImpl pop = (PopulationImpl) ((MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig())) .getPopulation(); pop.setIsStreaming(true); PopulationWriter writer = new PopulationWriter(pop, this.scenario.getNetwork()); writer.startStreaming(toFile); final PersonIntersectAreaFilter filter = new PersonIntersectAreaFilter(writer, areaOfInterest, network); filter.setAlternativeAOI(center, radius); pop.addAlgorithm(filter); new MatsimPopulationReader(new PseudoScenario(this.scenario, pop)).readFile(fromFile); writer.closeStreaming(); pop.printPlansCount(); log.info("persons in output: " + filter.getCount()); }
public void createSamplePopulation( final String fromFile, final String toFile, final double percentage) { PopulationImpl pop = (PopulationImpl) ((MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig())) .getPopulation(); pop.setIsStreaming(true); final PopulationWriter plansWriter = new PopulationWriter(pop, this.scenario.getNetwork(), percentage); plansWriter.startStreaming(toFile); pop.addAlgorithm(plansWriter); PopulationReader plansReader = new MatsimPopulationReader(new PseudoScenario(this.scenario, pop)); log.info("extracting sample from population:"); log.info(" input-file: " + fromFile); log.info(" output-file: " + toFile); log.info(" sample-size: " + percentage); plansReader.readFile(fromFile); pop.printPlansCount(); plansWriter.closeStreaming(); }