Skip to content

Commit 8a525a5

Browse files
Filter stops by current service week
1 parent 52db57e commit 8a525a5

File tree

5 files changed

+67
-17
lines changed

5 files changed

+67
-17
lines changed

src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java

+14-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.opentripplanner.apis.support.TileJson;
2121
import org.opentripplanner.ext.vectortiles.layers.areastops.AreaStopsLayerBuilder;
2222
import org.opentripplanner.ext.vectortiles.layers.stations.StationsLayerBuilder;
23+
import org.opentripplanner.ext.vectortiles.layers.stops.Predicates;
2324
import org.opentripplanner.ext.vectortiles.layers.stops.StopsLayerBuilder;
2425
import org.opentripplanner.ext.vectortiles.layers.vehicleparkings.VehicleParkingGroupsLayerBuilder;
2526
import org.opentripplanner.ext.vectortiles.layers.vehicleparkings.VehicleParkingsLayerBuilder;
@@ -122,7 +123,18 @@ private static LayerBuilder<?> createLayerBuilder(
122123
OtpServerRequestContext context
123124
) {
124125
return switch (layerParameters.type()) {
125-
case Stop -> new StopsLayerBuilder(context.transitService(), layerParameters, locale);
126+
case Stop -> new StopsLayerBuilder(
127+
context.transitService(),
128+
layerParameters,
129+
locale,
130+
Predicates.NO_FILTER
131+
);
132+
case CurrentServiceWeekStop -> new StopsLayerBuilder(
133+
context.transitService(),
134+
layerParameters,
135+
locale,
136+
Predicates.currentServiceWeek(context.transitService())
137+
);
126138
case Station -> new StationsLayerBuilder(context.transitService(), layerParameters, locale);
127139
case AreaStop -> new AreaStopsLayerBuilder(context.transitService(), layerParameters, locale);
128140
case VehicleRental -> new VehicleRentalPlacesLayerBuilder(
@@ -154,6 +166,7 @@ private static LayerBuilder<?> createLayerBuilder(
154166

155167
public enum LayerType {
156168
Stop,
169+
CurrentServiceWeekStop,
157170
Station,
158171
AreaStop,
159172
VehicleRental,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.opentripplanner.ext.vectortiles.layers.stops;
2+
3+
import java.time.DayOfWeek;
4+
import java.time.LocalDate;
5+
import java.time.temporal.TemporalAdjusters;
6+
import java.util.function.Predicate;
7+
import org.opentripplanner.apis.gtfs.PatternByServiceDatesFilter;
8+
import org.opentripplanner.apis.gtfs.model.LocalDateRange;
9+
import org.opentripplanner.transit.model.site.RegularStop;
10+
import org.opentripplanner.transit.service.TransitService;
11+
12+
public class Predicates {
13+
14+
public static final Predicate<RegularStop> NO_FILTER = x -> true;
15+
16+
public static Predicate<RegularStop> currentServiceWeek(TransitService transitService) {
17+
var serviceDate = LocalDate.now(transitService.getTimeZone());
18+
var lastSunday = serviceDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY));
19+
var nextSunday = serviceDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)).plusDays(1);
20+
var filter = new PatternByServiceDatesFilter(
21+
new LocalDateRange(lastSunday, nextSunday),
22+
transitService
23+
);
24+
25+
return regularStop -> {
26+
var patterns = transitService.getPatternsForStop(regularStop);
27+
var patternsInCurrentWeek = filter.filterPatterns(patterns);
28+
return !patternsInCurrentWeek.isEmpty();
29+
};
30+
}
31+
}

src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerBuilder.java

+9-11
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,28 @@
55
import java.util.List;
66
import java.util.Locale;
77
import java.util.Map;
8-
import java.util.function.BiFunction;
9-
import java.util.stream.Collectors;
8+
import java.util.function.Predicate;
109
import org.locationtech.jts.geom.Envelope;
1110
import org.locationtech.jts.geom.Geometry;
12-
import org.opentripplanner.apis.support.mapping.PropertyMapper;
1311
import org.opentripplanner.ext.vectortiles.VectorTilesResource;
1412
import org.opentripplanner.inspector.vector.LayerBuilder;
1513
import org.opentripplanner.inspector.vector.LayerParameters;
1614
import org.opentripplanner.transit.model.site.RegularStop;
1715
import org.opentripplanner.transit.service.TransitService;
1816

19-
public class StopsLayerBuilder<T> extends LayerBuilder<T> {
17+
public class StopsLayerBuilder extends LayerBuilder<RegularStop> {
2018

21-
static Map<MapperType, BiFunction<TransitService, Locale, PropertyMapper<RegularStop>>> mappers = Map.of(
22-
MapperType.Digitransit,
23-
DigitransitStopPropertyMapper::create
24-
);
2519
private final TransitService transitService;
20+
private final Predicate<RegularStop> filter;
2621

2722
public StopsLayerBuilder(
2823
TransitService transitService,
2924
LayerParameters<VectorTilesResource.LayerType> layerParameters,
30-
Locale locale
25+
Locale locale,
26+
Predicate<RegularStop> filter
3127
) {
3228
super(
33-
(PropertyMapper<T>) Map
29+
Map
3430
.ofEntries(
3531
entry(MapperType.Digitransit, new DigitransitStopPropertyMapper(transitService, locale)),
3632
entry(
@@ -43,20 +39,22 @@ public StopsLayerBuilder(
4339
layerParameters.expansionFactor()
4440
);
4541
this.transitService = transitService;
42+
this.filter = filter;
4643
}
4744

4845
protected List<Geometry> getGeometries(Envelope query) {
4946
return transitService
5047
.findRegularStops(query)
5148
.stream()
49+
.filter(filter)
5250
.map(stop -> {
5351
Geometry point = stop.getGeometry();
5452

5553
point.setUserData(stop);
5654

5755
return point;
5856
})
59-
.collect(Collectors.toList());
57+
.toList();
6058
}
6159

6260
enum MapperType {

src/main/java/org/opentripplanner/apis/gtfs/PatternByServiceDatesFilter.java

+8
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ public PatternByServiceDatesFilter(
5656
);
5757
}
5858

59+
public PatternByServiceDatesFilter(LocalDateRange range, TransitService transitService) {
60+
this(
61+
range,
62+
transitService::getPatternsForRoute,
63+
trip -> transitService.getCalendarService().getServiceDatesForServiceId(trip.getServiceId())
64+
);
65+
}
66+
5967
/**
6068
* Filter the patterns by the service dates that it operates on.
6169
*/

src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@
1212
import java.util.Optional;
1313
import javax.annotation.Nullable;
1414
import org.opentripplanner.ext.vectortiles.VectorTilesResource;
15+
import org.opentripplanner.ext.vectortiles.VectorTilesResource.LayerType;
1516
import org.opentripplanner.inspector.vector.LayerParameters;
1617
import org.opentripplanner.standalone.config.framework.json.NodeAdapter;
1718

18-
public class VectorTileConfig
19-
implements VectorTilesResource.LayersParameters<VectorTilesResource.LayerType> {
19+
public class VectorTileConfig implements VectorTilesResource.LayersParameters<LayerType> {
2020

2121
public static final VectorTileConfig DEFAULT = new VectorTileConfig(List.of(), null, null);
22-
private final List<LayerParameters<VectorTilesResource.LayerType>> layers;
22+
private final List<LayerParameters<LayerType>> layers;
2323

2424
@Nullable
2525
private final String basePath;
@@ -28,7 +28,7 @@ public class VectorTileConfig
2828
private final String attribution;
2929

3030
VectorTileConfig(
31-
Collection<? extends LayerParameters<VectorTilesResource.LayerType>> layers,
31+
Collection<? extends LayerParameters<LayerType>> layers,
3232
@Nullable String basePath,
3333
@Nullable String attribution
3434
) {
@@ -38,7 +38,7 @@ public class VectorTileConfig
3838
}
3939

4040
@Override
41-
public List<LayerParameters<VectorTilesResource.LayerType>> layers() {
41+
public List<LayerParameters<LayerType>> layers() {
4242
return layers;
4343
}
4444

0 commit comments

Comments
 (0)