All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.profile.ProfileTransfer Maven / Gradle / Ivy

package org.opentripplanner.profile;

import com.beust.jcommander.internal.Lists;
import org.opentripplanner.routing.edgetype.TripPattern;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Iterator;
import java.util.List;

/**
* A transfer as used in profile routing. For now, only the best transfer between any two patterns.
*/
public class ProfileTransfer implements Comparable {

    private static final Logger LOG = LoggerFactory.getLogger(ProfileTransfer.class);

    public TripPattern tp1, tp2;
    public StopCluster sc1, sc2;
    public int distance; // meters

    public ProfileTransfer(TripPattern tp1, TripPattern tp2, StopCluster s1, StopCluster s2, int distance) {
		this.tp1 = tp1;
		this.tp2 = tp2;
		this.sc1 = s1;
		this.sc2 = s2;
		this.distance = distance;
	}

	@Override
    public int compareTo(ProfileTransfer that) {
        return this.distance - that.distance;
    }

    @Override
    public String toString() {
        return String.format("Transfer %s %s %s %s %d", tp1.code, sc1.id,
                tp2.code, sc2.id, distance);
    }

    /** Keeps track of the best N transfers, including all those that are within the same stop cluster. */
    public static class GoodTransferList {
        private final double SLOP = 1.5;
        public List good = Lists.newArrayList();
        public void add(ProfileTransfer xfer) {
            boolean removed = false;
            Iterator iter = good.iterator();
            while (iter.hasNext()) {
                ProfileTransfer curr = iter.next();
                if (xfer.distance > curr.distance * SLOP) {
                    return; // this transfer is a lot worse than an existing one. bail out without saving it.
                }
                if (curr.distance > xfer.distance * SLOP) {
                    iter.remove(); // this transfer is a lot better than an existing one. remove the existing one.
                }
            }
            // The new transfer was not dominated by an existing one. Save it.
            good.add(xfer);
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy