/** * Parses a given <i>OpenStreetMap</i> file for data in it that can be converted into MATSim facilities. */ public void parseOsmFileAndAddFacilities(Map<String, String> osmToMatsimTypeMap, String osmKey) { OsmPoiSink sink = new OsmPoiSink(this.ct, osmToMatsimTypeMap, osmKey, useGeneralTypeIsSpecificTypeUnknown); XmlReader xmlReader = new XmlReader(inputFile, false, CompressionMethod.None); xmlReader.setSink(sink); xmlReader.run(); for (ActivityFacility af : sink.getFacilities().getFacilities().values()) { if (!this.facilities.getFacilities().containsKey(af.getId())) { this.facilities.addActivityFacility(af); } else { for (ActivityOption activityOption : af.getActivityOptions().values()) { ActivityFacility activityFacility = this.facilities.getFacilities().get(af.getId()); if (!activityFacility.getActivityOptions().containsKey(activityOption.getType())) { this.facilities.getFacilities().get(af.getId()).addActivityOption(activityOption); } } } } }
if (activityFacility.getCoord()==null && activityFacility.getLinkId()== null) { throw new RuntimeException("Neither coordinate nor linkId are available for facility id "+ activityFacility.getId()+". Aborting...."); } else if (activityFacility.getLinkId()==null){ if (linkNullWarn==0) { LOGGER.warn("There is no link for at least a facility. Assigning links for such facilities from coords."); linkNullWarn++; Link link = NetworkUtils.getNearestLink(network, activityFacility.getCoord()); if (link==null) { LOGGER.warn("No nearest link is found for coord "+activityFacility.getCoord()); } else{ ((ActivityFacilityImpl)activityFacility).setLinkId(link.getId()); } else if (activityFacility.getCoord()==null){ if (coordNullWarn==0) { LOGGER.warn("There is no coord for the facility.");
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."); } }
@Override public final TreeMap<Id<ActivityFacility>, ActivityFacility> getFacilitiesForActivityType(final String act_type) { TreeMap<Id<ActivityFacility>, ActivityFacility> facs = new TreeMap<>(); Iterator<ActivityFacility> iter = this.facilities.values().iterator(); while (iter.hasNext()){ ActivityFacility f = iter.next(); Map<String, ? extends ActivityOption> a = f.getActivityOptions(); if(a.containsKey(act_type)){ facs.put(f.getId(),f); } } return facs; }
private final void writeF2LFile(final ActivityFacilities facilities, final String file) { log.info(" writing f<-->l connections to "+CONFIG_F2L_OUTPUTF2LFile+"="+file); try (BufferedWriter bw = IOUtils.getBufferedWriter(file)) { bw.write("fid\tlid\n"); for (ActivityFacility f : facilities.getFacilities().values()) { bw.write(f.getId().toString()+"\t"+f.getLinkId().toString()+"\n"); } } catch (IOException e) { throw new RuntimeException("Error while writing given outputF2LFile='"+file+"'.", e); } log.info(" done. (writing f<-->l connections to "+CONFIG_F2L_OUTPUTF2LFile+"="+file+")"); }
@Override public Coord getCoord() { return this.activityFacility.getCoord(); }
protected boolean modifyLocation(Activity act, Coord startCoord, Coord endCoord, double radius, int trialNr) { ArrayList<ActivityFacility> choiceSet = this.computeChoiceSetCircle(startCoord, endCoord, radius, act.getType()); if (choiceSet.size()>1) { //final Facility facility=(Facility)choiceSet.toArray()[ // MatsimRandom.random.nextInt(choiceSet.size())]; final ActivityFacility facility = choiceSet.get(super.random.nextInt(choiceSet.size())); act.setFacilityId(facility.getId()); act.setLinkId(NetworkUtils.getNearestLink(((Network) this.scenario.getNetwork()), facility.getCoord()).getId()); act.setCoord(facility.getCoord()); return true; } // else ... return false; }
FacilityPenalty facilityPenalty = facilityPenalties.get(facility.getId()); out.write(facility.getId().toString() + "\t"+ facility.getCoord().getX() + "\t"+ facility.getCoord().getY() + "\t"+ facilityPenalty.getFacilityLoad().getNumberOfVisitorsPerDay() + "\t" + facilityPenalty.getFacilityLoad().getAllVisitors() + "\t" + facilityPenalty.getCapacity() + "\t" + facilityPenalty.getSumCapacityPenaltyFactor() + "\t"); if (facility.getActivityOptions().containsKey("shop")) { out.write("shop");
private void setLocation(Activity act2, Id<ActivityFacility> facilityId) { // ActivityImpl act = (ActivityImpl) act2; // act.setFacilityId(facilityId); PlanUtils.setFacilityId(act2, facilityId); ActivityFacility facility = this.facilities.getFacilities().get(facilityId); Id<Link> linkId = null; // try to get linkId from facility, else get it from coords. other options not allowed! if (facility.getLinkId() != null) { linkId = facility.getLinkId(); } else { linkId = this.nearestLinks.get(facilityId); } // act.setLinkId(linkId); // act.setCoord(facility.getCoord()); PlanUtils.setLinkId(act2, linkId); PlanUtils.setCoord(act2, facility.getCoord()); }
@Override public Map<String, ActivityOption> getActivityOptions() { return this.activityFacility.getActivityOptions(); }
fac1.addActivityOption(new ActivityOptionImpl("home")); fac1.getAttributes().putAttribute("size_m2", 100); facilities.addActivityFacility(fac1); ActivityOptionImpl shopOption = new ActivityOptionImpl("shop"); shopOption.addOpeningTime(new OpeningTimeImpl(8*3600, 20*3600)); fac2.addActivityOption(shopOption); fac2.getAttributes().putAttribute("size_m2", 500); facilities.addActivityFacility(fac2); Assert.assertEquals(1, fac1b.getActivityOptions().size()); Assert.assertTrue(fac1b.getActivityOptions().get("home").getOpeningTimes().isEmpty()); Assert.assertEquals(1, fac1b.getAttributes().size()); Assert.assertEquals(100, fac1b.getAttributes().getAttribute("size_m2")); Assert.assertEquals(1, fac2b.getActivityOptions().size()); Assert.assertNotNull(fac2b.getActivityOptions().get("shop").getOpeningTimes()); Assert.assertEquals(8*3600, fac2b.getActivityOptions().get("shop").getOpeningTimes().first().getStartTime(), 0.0); Assert.assertEquals(20*3600, fac2b.getActivityOptions().get("shop").getOpeningTimes().first().getEndTime(), 0.0); Assert.assertEquals(1, fac2b.getAttributes().size()); Assert.assertEquals(500, fac2b.getAttributes().getAttribute("size_m2"));
@Override public Id<ActivityFacility> getId() { return this.activityFacility.getId(); }
final Collection<String> types = CollectionUtils.intersect( facility.getActivityOptions().keySet(), config.getTypes() ); builders, factory ); builder.put( facility.getCoord() , facility );
progressBar.update(); Node nearestNode = NetworkUtils.getNearestNode(network, opportunity.getCoord()); double distance_m = NetworkUtils.getEuclideanDistance(opportunity.getCoord(), nearestNode.getCoord()); jco = new AggregationObject(opportunity.getId(), null, null, nearestNode, 0.); // Important: Initialize with zero! if (opportunity.getAttributes().getAttribute(AccessibilityAttributes.WEIGHT) == null) { throw new RuntimeException("If option \"useOpportunityWeights\" is used, the facilities must have an attribute with key " + AccessibilityAttributes.WEIGHT + "."); } else { double weight = Double.parseDouble(opportunity.getAttributes().getAttribute(AccessibilityAttributes.WEIGHT).toString()); jco.addObject(opportunity.getId(), expVjk * Math.pow(weight, acg.getWeightExponent())); jco.addObject(opportunity.getId(), expVjk);
@Override public Id<Link> getLinkId() { return this.activityFacility.getLinkId(); }
private void createFacility( ActivityFacilitiesFactory activityFacilityFactory, Entity entity, String name, Coord coord, String activityType) { Id<ActivityFacility> facilityId = Id.create(idPrefix + entity.getId(), ActivityFacility.class); ActivityFacility activityFacility; // activity facility if(!facilities.getFacilities().containsKey(facilityId)){ activityFacility = activityFacilityFactory.createActivityFacility(facilityId, coord); ((ActivityFacilityImpl)activityFacility).setDesc(name); facilities.addActivityFacility(activityFacility); } else{ activityFacility = (ActivityFacilityImpl) facilities.getFacilities().get(facilityId); } ActivityOption activityOption = activityFacilityFactory.createActivityOption(activityType); // activity option if(!activityFacility.getActivityOptions().containsKey(activityType)) { activityFacility.addActivityOption(activityOption); } }
@Override protected void setUp() throws Exception { super.setUp(); final Config config = ConfigUtils.createConfig(); final Scenario scenario = ScenarioUtils.createScenario( config ); this.facilities = scenario.getActivityFacilities() ; // create facilities, activities in it and open times final ActivityFacilitiesFactory facilitiesFactory = this.facilities.getFactory(); Coord defaultCoord = new Coord(0.0, 0.0); ActivityFacility testFacility = facilitiesFactory.createActivityFacility(Id.create(0, ActivityFacility.class), defaultCoord) ; this.facilities.addActivityFacility(testFacility); ActivityOption ao = facilitiesFactory.createActivityOption("shop") ; testFacility.addActivityOption(ao); ao.addOpeningTime(new OpeningTimeImpl(6.0 * 3600, 11.0 * 3600)); ao.addOpeningTime(new OpeningTimeImpl(13.0 * 3600, 19.0 * 3600)); // here, we don't test the scoring function itself, but just the method to retrieve opening times // we don't really need persons and plans, they're just used to initialize the ScoringFunction object final PopulationFactory pf = scenario.getPopulation().getFactory(); this.person = pf.createPerson(Id.create(1, Person.class)); Plan plan = pf.createPlan() ; this.person.addPlan(plan); Activity act = pf.createActivityFromCoord("shop", defaultCoord ) ; plan.addActivity(act); act.setFacilityId(testFacility.getId()); act.setStartTime(8.0 * 3600); act.setEndTime(16.0 * 3600); }
@Override public void addActivityOption(ActivityOption option) { this.activityFacility.addActivityOption(option); }
Polygon polygon = (Polygon) measurePointGeometryMap.get(entry.getKey().getFirst().getId()); Coordinate[] coordinates = polygon.getCoordinates(); Coordinate[] transformedCoordinates = new Coordinate[coordinates.length]; featureBuilder.add(Integer.parseInt(entry.getKey().getFirst().getId().toString())); featureBuilder.add(entry.getKey().getSecond()); Double additionalFacInfoValue = Double.parseDouble(entry.getKey().getFirst().getAttributes().getAttribute(currentAdditionalFacInfo).toString()); if (additionalFacInfoValue != null && !Double.isNaN(additionalFacInfoValue)) { featureBuilder.add(additionalFacInfoValue);
@Test public void testWriteReadV1_withAttributes() { Scenario scenario = ScenarioUtils.createScenario(ConfigUtils.createConfig()); ActivityFacilities facilities = scenario.getActivityFacilities(); ActivityFacilitiesFactory factory = facilities.getFactory(); ActivityFacility fac1 = factory.createActivityFacility(Id.create("1", ActivityFacility.class), new Coord(10.0, 15.0)); fac1.getAttributes().putAttribute("size_m2", 100); facilities.addActivityFacility(fac1); ActivityFacility fac2 = factory.createActivityFacility(Id.create("2", ActivityFacility.class), new Coord(20.0, 25.0)); fac2.getAttributes().putAttribute("size_m2", 500); facilities.addActivityFacility(fac2); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); new FacilitiesWriter(facilities).write(outStream); /* ------ */ ByteArrayInputStream inStream = new ByteArrayInputStream(outStream.toByteArray()); ActivityFacilities facilities2 = FacilitiesUtils.createActivityFacilities(); new MatsimFacilitiesReader(null, null, facilities2).parse(inStream); Assert.assertEquals(2, facilities2.getFacilities().size()); ActivityFacility fac1b = facilities2.getFacilities().get(Id.create("1", ActivityFacility.class)); Assert.assertEquals(0, fac1b.getActivityOptions().size()); Assert.assertEquals(1, fac1b.getAttributes().size()); Assert.assertEquals(100, fac1b.getAttributes().getAttribute("size_m2")); ActivityFacility fac2b = facilities2.getFacilities().get(Id.create("2", ActivityFacility.class)); Assert.assertEquals(0, fac2b.getActivityOptions().size()); Assert.assertEquals(1, fac2b.getAttributes().size()); Assert.assertEquals(500, fac2b.getAttributes().getAttribute("size_m2")); }