/** * @param network * @return sorted map containing containing the facilities as values and their ids as keys. */ public static SortedMap<Id<ActivityFacility>, ActivityFacility> getSortedFacilities(final ActivityFacilities facilities) { return new TreeMap<>(facilities.getFacilities()); }
/** * Collects all facilities of a given type that have been loaded to the sceanrio. */ public static ActivityFacilities collectActivityFacilitiesWithOptionOfType(Scenario scenario, String activityOptionType) { ActivityFacilities activityFacilities = FacilitiesUtils.createActivityFacilities(activityOptionType) ; for (ActivityFacility facility : scenario.getActivityFacilities().getFacilities().values()) { if (activityOptionType == null) { // no activity option type for facility given, use all of them activityFacilities.addActivityFacility(facility); } else { for (ActivityOption option : facility.getActivityOptions().values()) { if (option.getType().equals(activityOptionType)) { activityFacilities.addActivityFacility(facility); } } } } return activityFacilities; }
public static final ActivityFacilities createFacilityForEachLink(String facilityContainerName, Network network) { ActivityFacilities facilities = FacilitiesUtils.createActivityFacilities(facilityContainerName); ActivityFacilitiesFactory aff = facilities.getFactory(); for (Link link : network.getLinks().values()) { ActivityFacility facility = aff.createActivityFacility(Id.create(link.getId(),ActivityFacility.class), link.getCoord(), link.getId()); facilities.addActivityFacility(facility); } return facilities ; }
public void startFacilities(final ActivityFacilities facilities, final BufferedWriter out) throws IOException { out.write("<facilities"); if (facilities.getName() != null) { out.write(" name=\"" + facilities.getName() + "\""); } out.write(">\n\n"); this.attributesWriter.writeAttributes("\t", out, facilities.getAttributes()); }
public static void assignAdditionalFacilitiesDataToMeasurePoint(ActivityFacilities measurePoints, Map<Id<ActivityFacility>, Geometry> measurePointGeometryMap, Map<String, ActivityFacilities> additionalFacilityData) { LOG.info("Start assigning additional facilities data to measure point."); GeometryFactory geometryFactory = new GeometryFactory(); for (ActivityFacilities additionalDataFacilities : additionalFacilityData.values()) { // Iterate over all additional data collections String additionalDataName = additionalDataFacilities.getName(); int additionalDataFacilitiesToAssign = additionalDataFacilities.getFacilities().size(); for (Id<ActivityFacility> measurePointId : measurePoints.getFacilities().keySet()) { // Iterate over all measure points ActivityFacility measurePoint = measurePoints.getFacilities().get(measurePointId); measurePoint.getAttributes().putAttribute(additionalDataName, 0); Geometry geometry = measurePointGeometryMap.get(measurePointId); for (ActivityFacility facility : additionalDataFacilities.getFacilities().values()) { // Iterate over additional-data facilities Point point = geometryFactory.createPoint(new Coordinate(facility.getCoord().getX(), facility.getCoord().getY())); if (geometry.contains(point)) { measurePoint.getAttributes().putAttribute(additionalDataName, (int) measurePoint.getAttributes().getAttribute(additionalDataName) + 1); additionalDataFacilitiesToAssign--; } } } LOG.warn(additionalDataFacilitiesToAssign + " have not been assigned to a measure point geometry."); } LOG.info("Finished assigning additional facilities data to measure point."); } }
@Test public void testAddActivityFacility() { ActivityFacilities facilities = new ActivityFacilitiesImpl(); ActivityFacilitiesFactory factory = facilities.getFactory(); ActivityFacility facility1 = factory.createActivityFacility(Id.create(1, ActivityFacility.class), new Coord((double) 200, (double) 5000)); Assert.assertEquals(0, facilities.getFacilities().size()); facilities.addActivityFacility(facility1); Assert.assertEquals(1, facilities.getFacilities().size()); ActivityFacility facility2 = factory.createActivityFacility(Id.create(2, ActivityFacility.class), new Coord((double) 300, (double) 4000)); facilities.addActivityFacility(facility2); Assert.assertEquals(2, facilities.getFacilities().size()); }
private void loadActivityFacilities() { if ((this.config.facilities() != null) && (this.config.facilities().getInputFile() != null)) { URL facilitiesFileName = this.config.facilities().getInputFileURL(config.getContext()); log.info("loading facilities from " + facilitiesFileName); final String inputCRS = config.facilities().getInputCRS(); final String internalCRS = config.global().getCoordinateSystem(); MatsimFacilitiesReader reader = new MatsimFacilitiesReader(inputCRS, internalCRS, this.scenario.getActivityFacilities()); reader.putAttributeConverters(attributeConverters); reader.parse(facilitiesFileName); log.info("loaded " + this.scenario.getActivityFacilities().getFacilities().size() + " facilities from " + facilitiesFileName); } else { log.info("no facilities file set in config, therefore not loading any facilities. This is not a problem except if you are using facilities"); } if ((this.config.facilities() != null) && (this.config.facilities().getInputFacilitiesAttributesFile() != null)) { URL facilitiesAttributesURL = ConfigGroup.getInputFileURL(this.config.getContext(), this.config.facilities().getInputFacilitiesAttributesFile()); log.info("loading facility attributes from " + facilitiesAttributesURL); ObjectAttributesXmlReader reader = new ObjectAttributesXmlReader(this.scenario.getActivityFacilities().getFacilityAttributes()); reader.putAttributeConverters( attributeConverters ); reader.parse(facilitiesAttributesURL); } else { log.info("no facility-attributes file set in config, not loading any facility attributes"); } }
/** * Add additional facility data that will generate an additional column for each (x,y,t)-Entry. The facilities are aggregated to * the measurement points in downstream code. */ public void addAdditionalFacilityData(ActivityFacilities facilities) { // TDO cleanu up this method if (facilities.getName() == null || facilities.getName().equals("")) { throw new RuntimeException("Cannot add unnamed facility containers here. A key is required to identify them.") ; } for (ActivityFacilities existingFacilities : this.additionalFacs.values()) { if (existingFacilities.getName().equals(facilities.getName())) { throw new RuntimeException("Additional facilities under the name of + " + facilities.getName() + " already exist. Cannot add additional facilities under the same name twice.") ; } } this.additionalFacs.put(facilities.getName(), facilities); }
FacilitiesReaderMatsimV1( final String externalInputCRS, final String targetCRS, final ActivityFacilities facilities) { this.externalInputCRS = externalInputCRS; this.targetCRS = targetCRS; this.facilities = facilities; this.factory = this.facilities.getFactory(); if (externalInputCRS != null && targetCRS != null) { this.coordinateTransformation = TransformationFactory.getCoordinateTransformation(externalInputCRS, targetCRS); ProjectionUtils.putCRS(this.facilities, targetCRS); } }
this.facilities.addActivityFacility(this.currfacility); ((ActivityFacilityImpl) this.currfacility).setDesc(atts.getValue("desc"));
public PrismicLocationChoiceAlgorithm( final PrismicLocationChoiceConfigGroup config, final LocationChooser chooser, final ActivityFacilities facilities, final SocialNetwork socialNetwork, final StageActivityTypes stages) { this.random = MatsimRandom.getLocalInstance(); this.chooser = chooser; this.config = config; this.facilities = facilities; this.socialNetwork = socialNetwork; this.stages = stages; this.facilitiesPerType = new HashMap<String, QuadTree<ActivityFacility>>(); for ( String type : config.getTypes() ) { final QuadTreeRebuilder<ActivityFacility> builder = new QuadTreeRebuilder<ActivityFacility>(); for ( ActivityFacility facility : facilities.getFacilitiesForActivityType( type ).values() ) { builder.put( facility.getCoord() , facility ); } this.facilitiesPerType.put( type , builder.getQuadTree() ); } }
@Test public void testLoadScenario_loadFacilitiesAttributes() { Config config = ConfigUtils.loadConfig(IOUtils.newUrl(this.util.classInputResourcePath(), "facilityAttributesConfig.xml")); config.facilities().addParam("inputFacilityAttributesFile", "facilityAttributes.xml"); Scenario scenario = ScenarioUtils.loadScenario(config); Assert.assertEquals("world", scenario.getActivityFacilities().getFacilityAttributes().getAttribute("1", "hello")); }
@Test public void testAddActivityFacility_addingTwice() { ActivityFacilities facilities = new ActivityFacilitiesImpl(); ActivityFacilitiesFactory factory = facilities.getFactory(); ActivityFacility facility1 = factory.createActivityFacility(Id.create(1, ActivityFacility.class), new Coord((double) 200, (double) 5000)); ActivityFacility facility2 = factory.createActivityFacility(Id.create(2, ActivityFacility.class), new Coord((double) 300, (double) 4000)); Assert.assertEquals(0, facilities.getFacilities().size()); facilities.addActivityFacility(facility1); facilities.addActivityFacility(facility2); Assert.assertEquals(2, facilities.getFacilities().size()); try { facilities.addActivityFacility(facility1); Assert.fail("Expected exception, got none."); } catch (IllegalArgumentException expected) {} Assert.assertEquals(2, facilities.getFacilities().size()); }
/** * I wanted to plot something like (max(acc)-acc)*population. For that, I needed "population" at the x/y coordinates. * This is the mechanics via which I inserted that. (The computation is then done in postprocessing.) * <p></p> * You can add arbitrary ActivityFacilities containers here. They will be aggregated to the grid points, and then written to * file as additional column. */ public void addAdditionalFacilityData(ActivityFacilities facilities ) { log.warn("changed this data flow (by adding the _cnt_ column) but did not test. If it works, please remove this warning. kai, mar'14") ; if ( this.lockedForAdditionalFacilityData ) { throw new RuntimeException("too late for adding additional facility data; spatial grids have already been generated. Needs" + " to be called before generating the spatial grids. (This design should be improved ..)") ; } if ( facilities.getName()==null || facilities.getName().equals("") ) { throw new RuntimeException("cannot add unnamed facility containers here since we need a key to find them again") ; } for ( ActivityFacilities existingFacilities : this.additionalFacilityData ) { if ( existingFacilities.getName().equals( facilities.getName() ) ) { throw new RuntimeException("additional facilities under the name of + " + facilities.getName() + " already exist; cannot add additional facilities under the same name twice.") ; } } this.additionalFacilityData.add( facilities ) ; }
public ComputeMaxDCScoreMultiThreatedModule(String type, DestinationChoiceContext lcContext, DestinationSampler sampler) { super(lcContext.getScenario().getConfig().global().getNumberOfThreads()); this.type = type; this.lcContext = lcContext; /* * Get ActivityFacilies for type and then replace them with ActivityFacilityWithIndex * objects due to performance reasons. */ Map<Id<ActivityFacility>, ActivityFacility> map = lcContext.getScenario().getActivityFacilities().getFacilitiesForActivityType(lcContext.getConverter().convertType(type)); this.typedFacilities = new ActivityFacilityWithIndex[map.size()]; int i = 0; for (ActivityFacility activityFacility : map.values()) { int index = this.lcContext.getFacilityIndex(activityFacility.getId()); this.typedFacilities[i] = new ActivityFacilityWithIndex(activityFacility, index); i++; } if (this.typedFacilities.length == 0) { log.warn("There are no facilities for type : " + type); } this.sampler = sampler; }
public void run(final ActivityFacilities facilities) { for (ActivityFacility f : facilities.getFacilities().values()) { run(f); } }
/** * Yes, it's just a remove on a Map. But we don't know what kind of map * is used internally, and if the map is modifiable at all... */ @Test public void testRemove() { ActivityFacilities facilities = new ActivityFacilitiesImpl(); ActivityFacilitiesFactory factory = facilities.getFactory(); ActivityFacility facility1 = factory.createActivityFacility(Id.create(1, ActivityFacility.class), new Coord((double) 200, (double) 5000)); ActivityFacility facility2 = factory.createActivityFacility(Id.create(2, ActivityFacility.class), new Coord((double) 300, (double) 4000)); facilities.addActivityFacility(facility1); facilities.addActivityFacility(facility2); Assert.assertEquals(2, facilities.getFacilities().size()); Assert.assertEquals(facility1, facilities.getFacilities().remove(Id.create(1, ActivityFacility.class))); Assert.assertEquals(1, facilities.getFacilities().size()); }
public static void combineDifferentActivityOptionTypes(final Scenario scenario, String combinedType, final List<String> activityOptionsToBeIncluded) { ActivityOption markerOption = new ActivityOptionImpl(combinedType); // Memorize all facilities that have certain activity options in a activity facilities container final ActivityFacilities consideredFacilities = FacilitiesUtils.createActivityFacilities(); for (ActivityFacility facility : scenario.getActivityFacilities().getFacilities().values()) { for (ActivityOption option : facility.getActivityOptions().values()) { if (activityOptionsToBeIncluded.contains(option.getType())) { // if (!option.getType().equals(FacilityTypes.HOME) && !option.getType().equals(FacilityTypes.WORK) && !option.getType().equals("minor")) { if (!consideredFacilities.getFacilities().containsKey(facility.getId())) { consideredFacilities.addActivityFacility(facility); } } } } // Add marker option to facilities to be considered for (ActivityFacility facility : consideredFacilities.getFacilities().values()) { facility.addActivityOption(markerOption); } }
private void handleActivities(final Population population) { int idxCounter = 0; ActivityFacilitiesFactory factory = this.facilities.getFactory(); Map<Id<Link>, ActivityFacility> facilitiesPerLinkId = new HashMap<>(); Map<Coord, ActivityFacility> facilitiesPerCoordinate = new HashMap<>(); if (facility == null) { facility = factory.createActivityFacility(Id.create(this.idPrefix + linkId.toString(), ActivityFacility.class), c, linkId); this.facilities.addActivityFacility(facility); facilitiesPerLinkId.put(linkId, facility); if (facility == null) { facility = factory.createActivityFacility(Id.create(this.idPrefix + idxCounter++, ActivityFacility.class), c, linkId); this.facilities.addActivityFacility(facility); facilitiesPerCoordinate.put(c, facility);
if ( this.additionalSpatialGrids.get( facilities.getName() ) != null ) { throw new RuntimeException("this should not yet exist ...") ; this.additionalSpatialGrids.put( facilities.getName(), spatialGrids ) ; Tuple<SpatialGrid,SpatialGrid> spatialGrids = this.additionalSpatialGrids.get( facilities.getName() ) ; GridUtils.aggregateFacilitiesIntoSpatialGrid(facilities, spatialGrids.getFirst(), spatialGrids.getSecond(), null);