
org.opentripplanner.transit.model.site.GroupStopBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of otp Show documentation
Show all versions of otp Show documentation
The OpenTripPlanner multimodal journey planning system
The newest version!
package org.opentripplanner.transit.model.site;
import java.util.ArrayList;
import java.util.List;
import java.util.function.IntSupplier;
import javax.annotation.Nonnull;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryCollection;
import org.opentripplanner.framework.geometry.GeometryUtils;
import org.opentripplanner.framework.geometry.WgsCoordinate;
import org.opentripplanner.framework.i18n.I18NString;
import org.opentripplanner.transit.model.framework.AbstractEntityBuilder;
import org.opentripplanner.transit.model.framework.FeedScopedId;
public class GroupStopBuilder extends AbstractEntityBuilder {
private final IntSupplier indexCounter;
private I18NString name;
private List stopLocations = new ArrayList<>();
private GeometryCollection geometry = new GeometryCollection(
null,
GeometryUtils.getGeometryFactory()
);
private GeometryCollection encompassingAreaGeometry = null;
private WgsCoordinate centroid;
GroupStopBuilder(FeedScopedId id, IntSupplier indexCounter) {
super(id);
this.indexCounter = indexCounter;
}
GroupStopBuilder(@Nonnull GroupStop original) {
super(original);
this.indexCounter = original::getIndex;
// Optional fields
this.name = original.getName();
this.stopLocations = new ArrayList<>(original.getChildLocations());
this.geometry = (GeometryCollection) original.getGeometry();
this.centroid = original.getCoordinate();
}
@Override
protected GroupStop buildFromValues() {
return new GroupStop(this);
}
public GroupStopBuilder withName(I18NString name) {
this.name = name;
return this;
}
public GroupStopBuilder withEncompassingAreaGeometries(List geometries) {
this.encompassingAreaGeometry =
new GeometryCollection(
geometries.toArray(new Geometry[0]),
GeometryUtils.getGeometryFactory()
);
return this;
}
public I18NString name() {
return name;
}
public GroupStopBuilder addLocation(StopLocation location) {
if (
!(
location.getStopType() == StopType.REGULAR ||
location.getStopType() == StopType.FLEXIBLE_AREA
)
) {
throw new RuntimeException(
String.format(
"Unsupported location for %s. Must be %s or %s.",
GroupStop.class.getSimpleName(),
StopType.REGULAR,
StopType.FLEXIBLE_AREA
)
);
}
stopLocations.add(location);
int numGeometries = geometry.getNumGeometries();
Geometry[] newGeometries = new Geometry[numGeometries + 1];
for (int i = 0; i < numGeometries; i++) {
newGeometries[i] = geometry.getGeometryN(i);
}
newGeometries[numGeometries] = location.getGeometry();
geometry = new GeometryCollection(newGeometries, GeometryUtils.getGeometryFactory());
centroid = new WgsCoordinate(geometry.getCentroid());
return this;
}
public List stopLocations() {
return List.copyOf(stopLocations);
}
public GeometryCollection geometry() {
return geometry;
}
public GeometryCollection encompassingAreaGeometry() {
return encompassingAreaGeometry;
}
public WgsCoordinate centroid() {
return centroid;
}
int createIndex() {
return indexCounter.getAsInt();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy