src/main/java/com/conveyal/gtfs/stats/FeedStats.java
public Rectangle2D getBounds () {
        Rectangle2D ret = null;

        for (Stop stop : feed.stops.values()) {

            // skip over stops that don't have any stop times
            if (!feed.stopCountByStopTime.containsKey(stop.stop_id)) {
                continue;
            }
            if (ret == null) {
                ret = new Rectangle2D.Double(stop.stop_lon, stop.stop_lat, 0, 0);
            }
            else {
                ret.add(new Point2D.Double(stop.stop_lon, stop.stop_lat));
            }
        }

        return ret;
    }
public Rectangle2D getBounds () {
        Rectangle2D ret = null;

        for (Stop stop : feed.stops.values()) {

            // skip over stops that don't have any stop times
            if (!feed.stopCountByStopTime.containsKey(stop.stop_id)) {
                continue;
            }
            if (ret == null) {
                ret = new Rectangle2D.Double(stop.stop_lon, stop.stop_lat, 0, 0);
            }
            else {
                ret.add(new Point2D.Double(stop.stop_lon, stop.stop_lat));
            }
        }

        return ret;
    }
Get the bounding box of this GTFS feed.
We use a Rectangle2D rather than a Geotools envelope because GTFS is always in WGS 84.
Note that stops do not have agencies in GTFS.