geojson2gtfs
Version:
A tiny nodeJs cli app to transform geoJson files (describing an onDemand informal public transport routes) to its corresponding GTFS entities.
75 lines (67 loc) • 2.16 kB
JavaScript
function gtfsRoutesFileFields() {
return [
{
value: 'agencyId',
label: 'agency_id'
},
{
value: 'routeId',
label: 'route_id'
},
{
value: 'routeLongName',
label: 'route_long_name'
},
{
value: 'routeShortName',
label: 'route_short_name'
},
{
value: 'routeType',
label: 'route_type'
}
];
}
// function getAgencyId(geoJsonFileIndex) {
function getAgencyId(agency) {
// return `A_${geoJsonFileIndex + 1}`;
return agency.values[0].agencyId;
}
function getRouteID(geoJsonFileIndex) {
return `R${geoJsonFileIndex + 1}`;
}
function getRouteLongName(geoJsonObject) {
if (geoJsonObject.features[0].properties.agency) return `Route:${geoJsonObject.features[0].properties.agency}`;
if (geoJsonObject.features[0].properties.agencia) return `Ruta:${geoJsonObject.features[0].properties.agencia}`;
throw "The geoJson file must have an agency field";
}
function getRouteShortName(geoJsonObject) {
if (geoJsonObject.features[0].properties.agency) return `${geoJsonObject.features[0].properties.agency}`;
if (geoJsonObject.features[0].properties.agencia) return `${geoJsonObject.features[0].properties.agencia}`;
throw "The geoJson file must have an agency field";
}
function getRouteType() {
// 3 is the magic number to identify a bus type route
return 3;
}
exports.routesObjectGenerator = function(geoJsonObject, geoJsonFileIndex, agency) {
return {
fields: gtfsRoutesFileFields(),
values: [
{
// agencyId: getAgencyId(geoJsonFileIndex),
agencyId: getAgencyId(agency),
routeId: getRouteID(geoJsonFileIndex),
routeLongName: getRouteLongName(geoJsonObject),
routeShortName: getRouteShortName(geoJsonObject),
routeType: getRouteType()
}
]
};
}
exports.routesObjectFields = function() {
return {
fields: gtfsRoutesFileFields(),
values: []
};
}