update cppgtfs, support pathways, parse continuous_pickup and drop_off

This commit is contained in:
Patrick Brosi 2022-10-12 00:24:01 +02:00
parent c68cde67dc
commit 0699fccb1e
5 changed files with 46 additions and 6 deletions

@ -1 +1 @@
Subproject commit d79469fa692d52cae56f5e797561451edcf3016a Subproject commit 35ab19c313f96fec649fd0cb31c42d281f2c3b6e

View file

@ -23,10 +23,12 @@ namespace gtfs {
typedef ad::cppgtfs::gtfs::FeedB< typedef ad::cppgtfs::gtfs::FeedB<
ad::cppgtfs::gtfs::Agency, ad::cppgtfs::gtfs::Route, ad::cppgtfs::gtfs::Agency, ad::cppgtfs::gtfs::Route,
ad::cppgtfs::gtfs::Stop, Service, StopTime, Shape, ad::cppgtfs::gtfs::Fare, ad::cppgtfs::gtfs::Stop, Service, StopTime, Shape, ad::cppgtfs::gtfs::Fare,
ad::cppgtfs::gtfs::Level, ad::cppgtfs::gtfs::Container, ad::cppgtfs::gtfs::Level, ad::cppgtfs::gtfs::Pathway,
ad::cppgtfs::gtfs::Container, ad::cppgtfs::gtfs::NullContainer, ad::cppgtfs::gtfs::Container, ad::cppgtfs::gtfs::Container,
ad::cppgtfs::gtfs::ContContainer, ad::cppgtfs::gtfs::ContContainer, ad::cppgtfs::gtfs::NullContainer, ad::cppgtfs::gtfs::ContContainer,
ShapeContainer, ad::cppgtfs::gtfs::Container, ad::cppgtfs::gtfs::Container> ad::cppgtfs::gtfs::ContContainer, ShapeContainer,
ad::cppgtfs::gtfs::Container, ad::cppgtfs::gtfs::Container,
ad::cppgtfs::gtfs::Container>
Feed; Feed;
typedef ad::cppgtfs::gtfs::TripB<StopTime<ad::cppgtfs::gtfs::Stop>, Service, typedef ad::cppgtfs::gtfs::TripB<StopTime<ad::cppgtfs::gtfs::Stop>, Service,
ad::cppgtfs::gtfs::Route, Shape> ad::cppgtfs::gtfs::Route, Shape>

View file

@ -26,12 +26,15 @@ class StopTime {
typename StopT::Ref s, uint32_t seq, const std::string& hs, typename StopT::Ref s, uint32_t seq, const std::string& hs,
ad::cppgtfs::gtfs::flat::StopTime::PU_DO_TYPE put, ad::cppgtfs::gtfs::flat::StopTime::PU_DO_TYPE put,
ad::cppgtfs::gtfs::flat::StopTime::PU_DO_TYPE dot, float distTrav, ad::cppgtfs::gtfs::flat::StopTime::PU_DO_TYPE dot, float distTrav,
bool isTp) bool isTp, uint8_t continuousDropOff,
uint8_t continuousPickup)
: _s(s), _sequence(seq), _dist(distTrav), _at(at), _dt(dt), _isTp(isTp) { : _s(s), _sequence(seq), _dist(distTrav), _at(at), _dt(dt), _isTp(isTp) {
UNUSED(hs); UNUSED(hs);
UNUSED(put); UNUSED(put);
UNUSED(dot); UNUSED(dot);
UNUSED(distTrav); UNUSED(distTrav);
UNUSED(continuousDropOff);
UNUSED(continuousPickup);
} }
const typename StopT::Ref getStop() const { return _s; } const typename StopT::Ref getStop() const { return _s; }

View file

@ -194,6 +194,23 @@ void Writer::write(gtfs::Feed* sourceFeed, const std::string& path) const {
} }
} }
csvp = ip.getCsvParser("pathways.txt");
if (csvp->isGood()) {
curFile = getTmpFName(gtfsPath, ".pfaedle-tmp", "pathways.txt");
curFileTg = gtfsPath + "/pathways.txt";
fs.open(curFile.c_str());
if (!fs.good()) cannotWrite(curFile, curFileTg);
writePathways(sourceFeed, &fs);
fs.close();
if (toZip) {
moveIntoZip(za, curFile, "pathways.txt");
} else {
if (std::rename(curFile.c_str(), curFileTg.c_str()))
cannotWrite(curFileTg);
}
}
csvp = ip.getCsvParser("levels.txt"); csvp = ip.getCsvParser("levels.txt");
if (csvp->isGood()) { if (csvp->isGood()) {
curFile = getTmpFName(gtfsPath, ".pfaedle-tmp", "levels.txt"); curFile = getTmpFName(gtfsPath, ".pfaedle-tmp", "levels.txt");
@ -320,6 +337,23 @@ void Writer::writeFeedInfo(gtfs::Feed* f, std::ostream* os) const {
csvw->flushLine(); csvw->flushLine();
} }
// ____________________________________________________________________________
void Writer::writePathways(gtfs::Feed* sourceFeed, std::ostream* os) const {
Parser p(sourceFeed->getPath());
auto csvp = p.getCsvParser("pathways.txt");
ad::cppgtfs::Writer w;
auto csvw = ad::cppgtfs::Writer::getPathwayCsvw(os);
csvw->flushLine();
ad::cppgtfs::gtfs::flat::Pathway fa;
auto flds = Parser::getPathwayFlds(csvp.get());
while (p.nextPathway(csvp.get(), &fa, flds)) {
w.writePathway(fa, csvw.get());
}
}
// ____________________________________________________________________________ // ____________________________________________________________________________
void Writer::writeLevels(gtfs::Feed* sourceFeed, std::ostream* os) const { void Writer::writeLevels(gtfs::Feed* sourceFeed, std::ostream* os) const {
Parser p(sourceFeed->getPath()); Parser p(sourceFeed->getPath());

View file

@ -36,6 +36,7 @@ class Writer {
bool writeTrips(Feed* f, std::ostream* os) const; bool writeTrips(Feed* f, std::ostream* os) const;
void writeStopTimes(Feed* f, std::ostream* os) const; void writeStopTimes(Feed* f, std::ostream* os) const;
void writeLevels(Feed* f, std::ostream* os) const; void writeLevels(Feed* f, std::ostream* os) const;
void writePathways(Feed* f, std::ostream* os) const;
static void cannotWrite(const std::string& file, const std::string& file2); static void cannotWrite(const std::string& file, const std::string& file2);
static void cannotWrite(const std::string& file); static void cannotWrite(const std::string& file);