Skip to content

Commit

Permalink
Consider stationary agents in scenario cut-out (#3541)
Browse files Browse the repository at this point in the history
  • Loading branch information
rakow authored Nov 5, 2024
1 parent 65edb80 commit c43bf1c
Showing 1 changed file with 37 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.*;
import org.matsim.api.core.v01.Coord;
import org.matsim.api.core.v01.Id;
import org.matsim.api.core.v01.Scenario;
Expand All @@ -30,6 +27,7 @@
import org.matsim.core.population.algorithms.ParallelPersonAlgorithmUtils;
import org.matsim.core.population.algorithms.PersonAlgorithm;
import org.matsim.core.population.routes.NetworkRoute;
import org.matsim.core.router.DefaultAnalysisMainModeIdentifier;
import org.matsim.core.router.TripStructureUtils;
import org.matsim.core.router.TripStructureUtils.Trip;
import org.matsim.core.router.costcalculators.OnlyTimeDependentTravelDisutility;
Expand Down Expand Up @@ -453,7 +451,13 @@ private Coord getActivityCoord(Activity activity) {
if (scenario.getActivityFacilities() != null && activity.getFacilityId() != null && scenario.getActivityFacilities().getFacilities().containsKey(activity.getFacilityId()))
return scenario.getActivityFacilities().getFacilities().get(activity.getFacilityId()).getCoord();

return activity.getCoord();
if (activity.getCoord() != null)
return activity.getCoord();

if (activity.getLinkId() != null && scenario.getNetwork().getLinks().containsKey(activity.getLinkId()))
return scenario.getNetwork().getLinks().get(activity.getLinkId()).getCoord();

return null;
}

/**
Expand Down Expand Up @@ -501,34 +505,44 @@ public void run(Person person) {
boolean keepPerson = false;

List<Trip> trips = TripStructureUtils.getTrips(person.getSelectedPlan());

List<Activity> activities = TripStructureUtils.getActivities(person.getSelectedPlan(), TripStructureUtils.StageActivityHandling.ExcludeStageActivities);
Set<Id<Link>> linkIds = new HashSet<>();
Set<Id<ActivityFacility>> facilityIds = new HashSet<>();

for (Trip trip : trips) {
Coord originCoord = getActivityCoord(trip.getOriginActivity());
Coord destinationCoord = getActivityCoord(trip.getDestinationActivity());

if (originCoord == null || destinationCoord == null) {
if (noActCoordsWarnings++ < 10)
log.info("Activity coords of trip is null. Skipping Trip...");
// Check activities first, some agent might be stationary
for (Activity act : activities) {
Coord coord = getActivityCoord(act);

continue;
if (coord == null && noActCoordsWarnings++ < 10) {
log.info("Activity coords for agent {} are null. Skipping Trip...", person.getId());
}

// keep all agents starting or ending in area
if (geom.contains(MGC.coord2Point(originCoord)) || geom.contains(MGC.coord2Point(destinationCoord))) {
if (coord != null && geom.contains(MGC.coord2Point(coord))) {
keepPerson = true;
}

LineString line = geoFactory.createLineString(new Coordinate[]{
MGC.coord2Coordinate(originCoord),
MGC.coord2Coordinate(destinationCoord)
});
if (act.getFacilityId() != null)
facilityIds.add(act.getFacilityId());

// also keep persons traveling through or close to area (beeline)
if (line.intersects(geom)) {
keepPerson = true;
if (act.getLinkId() != null)
linkIds.add(act.getLinkId());

}

for (Trip trip : trips) {
Coord originCoord = getActivityCoord(trip.getOriginActivity());
Coord destinationCoord = getActivityCoord(trip.getDestinationActivity());

if (originCoord != null && destinationCoord != null) {
LineString line = geoFactory.createLineString(new Coordinate[]{
MGC.coord2Coordinate(originCoord),
MGC.coord2Coordinate(destinationCoord)
});

// also keep persons traveling through or close to area (beeline)
if (line.intersects(geom)) {
keepPerson = true;
}
}

//Save route links
Expand Down Expand Up @@ -564,20 +578,6 @@ public void run(Person person) {
}
// There is no additional link freespeed information, that we could save. So we are finished here
}

if (trip.getOriginActivity().getFacilityId() != null)
facilityIds.add(trip.getOriginActivity().getFacilityId());

if (trip.getDestinationActivity().getFacilityId() != null)
facilityIds.add(trip.getDestinationActivity().getFacilityId());

if (trip.getOriginActivity().getLinkId() != null) {
linkIds.add(trip.getOriginActivity().getLinkId());
}

if (trip.getDestinationActivity().getLinkId() != null) {
linkIds.add(trip.getDestinationActivity().getLinkId());
}
}
}

Expand Down

0 comments on commit c43bf1c

Please sign in to comment.