= tabs.length - 1),
+ active: !(disabled || this.props.tabIndex >= tabs.length - 1),
})}
>
= tabs.length - 1
+ disabled || this.props.tabIndex >= tabs.length - 1
? 'disabled'
: ''
}`}
@@ -361,7 +348,6 @@ export default class SwipeableTabs extends React.Component {
callback: i => {
// force transition after animation should be over because animation can randomly fail sometimes
setTimeout(() => {
- this.setState({ tabIndex: i });
this.props.onSwipe(i);
}, 300);
},
diff --git a/app/component/TerminalTimetablePage.js b/app/component/TerminalTimetablePage.js
index 4abc98025d..249ce062d7 100644
--- a/app/component/TerminalTimetablePage.js
+++ b/app/component/TerminalTimetablePage.js
@@ -34,12 +34,12 @@ class TerminalTimetablePage extends React.Component {
}
onDateChange = value => {
+ this.setState({ date: value });
this.props.relay.refetch(
{
date: value,
},
null,
- () => this.setState({ date: value }),
);
};
@@ -48,11 +48,8 @@ class TerminalTimetablePage extends React.Component {
);
}
diff --git a/app/component/Timetable.js b/app/component/Timetable.js
index 2ed3363d04..22c212ae06 100644
--- a/app/component/Timetable.js
+++ b/app/component/Timetable.js
@@ -82,19 +82,12 @@ class Timetable extends React.Component {
}),
).isRequired,
}).isRequired,
- propsForDateSelect: PropTypes.shape({
- startDate: PropTypes.string,
- selectedDate: PropTypes.string,
- onDateChange: PropTypes.func,
- }).isRequired,
- date: PropTypes.string,
+ startDate: PropTypes.string.isRequired,
+ onDateChange: PropTypes.func.isRequired,
+ date: PropTypes.string.isRequired,
language: PropTypes.string.isRequired,
};
- static defaultProps = {
- date: undefined,
- };
-
static contextTypes = {
router: routerShape.isRequired,
match: matchShape.isRequired,
@@ -183,7 +176,7 @@ class Timetable extends React.Component {
};
dateForPrinting = () => {
- const selectedDate = moment(this.props.propsForDateSelect.selectedDate);
+ const selectedDate = moment(this.props.date);
return (
@@ -331,9 +324,7 @@ class Timetable extends React.Component {
}${locationType.toLowerCase()}/${this.props.stop.gtfsId}`;
const timeTableRows = this.createTimeTableRows(timetableMap);
const timeDifferenceDays = moment
- .duration(
- moment(this.props.propsForDateSelect.selectedDate).diff(moment()),
- )
+ .duration(moment(this.props.date).diff(moment()))
.asDays();
return (
<>
@@ -349,10 +340,10 @@ class Timetable extends React.Component {
) : null}
{
- this.props.propsForDateSelect.onDateChange(e);
+ this.props.onDateChange(e);
const showRoutes = this.state.showRoutes.length
? this.state.showRoutes.join(',')
: undefined;
diff --git a/app/component/ToggleMapTracking.js b/app/component/ToggleMapTracking.js
index 5ad5a3125c..32436fb133 100644
--- a/app/component/ToggleMapTracking.js
+++ b/app/component/ToggleMapTracking.js
@@ -12,7 +12,7 @@ function ToggleMapTracking(props) {
tabIndex={0}
aria-label={props.ariaLabel}
>
-
+
);
}
diff --git a/app/component/TopLevel.js b/app/component/TopLevel.js
index 73ca5b0866..467253bedd 100644
--- a/app/component/TopLevel.js
+++ b/app/component/TopLevel.js
@@ -163,6 +163,7 @@ class TopLevel extends React.Component {
content={this.props.content}
header={this.props.header}
selectFromMapHeader={this.props.selectFromMapHeader}
+ match={this.props.match}
/>
)}
desktop={() => (
diff --git a/app/component/itinerary/BicycleLeg.js b/app/component/itinerary/BicycleLeg.js
index 33531a3a6b..4be92094c7 100644
--- a/app/component/itinerary/BicycleLeg.js
+++ b/app/component/itinerary/BicycleLeg.js
@@ -375,9 +375,9 @@ export default function BicycleLeg(
openSettings(true)}
+ onClick={() => openSettings(true, true)}
onKeyPress={e =>
- isKeyboardSelectionEvent(e) && openSettings(true)
+ isKeyboardSelectionEvent(e) && openSettings(true, true)
}
className="itinerary-transit-leg-route-bike"
>
diff --git a/app/component/itinerary/CustomizeSearch.js b/app/component/itinerary/CustomizeSearch.js
index 591965d318..f0c4ace7ad 100644
--- a/app/component/itinerary/CustomizeSearch.js
+++ b/app/component/itinerary/CustomizeSearch.js
@@ -167,6 +167,27 @@ class CustomizeSearch extends React.Component {
)}
+
+
+ {config.showTicketSelector && (
+
+
+
+ )}
{useScooters(config.vehicleRental?.networks) && (
)}
-
-
- {config.showTicketSelector && (
-
-
-
- )}
);
diff --git a/app/component/itinerary/Itinerary.js b/app/component/itinerary/Itinerary.js
index af4b12d6f3..f23d646275 100644
--- a/app/component/itinerary/Itinerary.js
+++ b/app/component/itinerary/Itinerary.js
@@ -88,7 +88,7 @@ export function RouteLeg(
) {
const isCallAgency = isCallAgencyPickupType(leg);
let routeNumber;
- const mode = getRouteMode(leg.route);
+ const mode = getRouteMode(leg.route, config);
const getOccupancyStatus = () => {
if (hasOneTransitLeg) {
@@ -118,7 +118,7 @@ export function RouteLeg(
)),
- this.props.setNavigation && (
-
+ this.props.setNavigation && (
-
- ),
+ />
+ ),
config.showCO2InItinerarySummary && !legsWithScooter && (
{
- const subpath = getSubPath('');
if (activeIndex === index) {
onSelectImmediately(index);
} else {
router.replace({
...match.location,
state: { selectedItineraryIndex: index },
- pathname: `${getItineraryPagePath(params.from, params.to)}${subpath}`,
});
addAnalyticsEvent({
diff --git a/app/component/itinerary/ItineraryPage.js b/app/component/itinerary/ItineraryPage.js
index 9cce3fa9aa..06ea3eef92 100644
--- a/app/component/itinerary/ItineraryPage.js
+++ b/app/component/itinerary/ItineraryPage.js
@@ -1,74 +1,81 @@
/* eslint-disable react/no-array-index-key */
/* eslint-disable no-nested-ternary */
-import PropTypes from 'prop-types';
-import React, { useEffect, useState, useRef, cloneElement } from 'react';
-import { fetchQuery } from 'react-relay';
-import { FormattedMessage, intlShape } from 'react-intl';
import { matchShape, routerShape } from 'found';
-import isEqual from 'lodash/isEqual';
import isEmpty from 'lodash/isEmpty';
+import isEqual from 'lodash/isEqual';
import polyline from 'polyline-encoded';
+import PropTypes from 'prop-types';
+import React, { cloneElement, useEffect, useRef, useState } from 'react';
+import { FormattedMessage, intlShape } from 'react-intl';
+import { fetchQuery } from 'react-relay';
+import { saveFutureRoute } from '../../action/FutureRoutesActions';
+import { saveSearch } from '../../action/SearchActions';
+import { TransportMode } from '../../constants';
+import { mapLayerShape } from '../../store/MapLayerStore';
+import {
+ clearLatestNavigatorItinerary,
+ getDialogState,
+ getLatestNavigatorItinerary,
+ setDialogState,
+ setLatestNavigatorItinerary,
+} from '../../store/localStorage';
+import { addAnalyticsEvent } from '../../util/analyticsUtils';
+import { getWeatherData } from '../../util/apiUtils';
+import { isIOS } from '../../util/browser';
+import { boundWithMinimumArea } from '../../util/geo-utils';
+import {
+ getIntermediatePlaces,
+ otpToLocation,
+ parseLatLon,
+} from '../../util/otpStrings';
+import { getItineraryPagePath, streetHash } from '../../util/path';
+import {
+ PLANTYPE,
+ getPlanParams,
+ getSettings,
+ planQueryNeeded,
+} from '../../util/planParamUtil';
import {
- relayShape,
configShape,
mapLayerOptionsShape,
+ relayShape,
} from '../../util/shapes';
+import { epochToTime } from '../../util/timeUtils';
+import { getAllNetworksOfType } from '../../util/vehicleRentalUtils';
import DesktopView from '../DesktopView';
+import Loading from '../Loading';
import MobileView from '../MobileView';
import ItineraryPageMap from '../map/ItineraryPageMap';
-import ItineraryListContainer from './ItineraryListContainer';
+import AlternativeItineraryBar from './AlternativeItineraryBar';
+import CustomizeSearch from './CustomizeSearch';
import { spinnerPosition } from './ItineraryList';
+import ItineraryListContainer from './ItineraryListContainer';
import ItineraryPageControls from './ItineraryPageControls';
-import ItineraryTabs from './ItineraryTabs';
-import Navigator from './Navigator';
-import { getWeatherData } from '../../util/apiUtils';
-import Loading from '../Loading';
-import { getItineraryPagePath, streetHash } from '../../util/path';
-import { boundWithMinimumArea } from '../../util/geo-utils';
-import planConnection from './PlanConnection';
import {
- getSelectedItineraryIndex,
- reportError,
- addFeedbackly,
- getTopics,
- getBounds,
- isEqualItineraries,
- settingsLimitRouting,
- setCurrentTimeToURL,
- updateClient,
- stopClient,
- getRentalStationsToHideOnMap,
addBikeStationMapForRentalVehicleItineraries,
+ addFeedbackly,
checkDayNight,
filterItinerariesByFeedId,
- transitEdges,
filterWalk,
+ getBounds,
+ getRentalStationsToHideOnMap,
+ getSelectedItineraryIndex,
+ getTopics,
+ isEqualItineraries,
mergeBikeTransitPlans,
mergeScooterTransitPlan,
quitIteration,
+ reportError,
scooterEdges,
+ setCurrentTimeToURL,
+ settingsLimitRouting,
+ stopClient,
+ updateClient,
} from './ItineraryPageUtils';
-import { isIOS } from '../../util/browser';
-import { addAnalyticsEvent } from '../../util/analyticsUtils';
-import {
- parseLatLon,
- otpToLocation,
- getIntermediatePlaces,
-} from '../../util/otpStrings';
-import AlternativeItineraryBar from './AlternativeItineraryBar';
-import {
- PLANTYPE,
- getSettings,
- getPlanParams,
- planQueryNeeded,
-} from '../../util/planParamUtil';
-import { epochToTime } from '../../util/timeUtils';
-import { saveFutureRoute } from '../../action/FutureRoutesActions';
-import { saveSearch } from '../../action/SearchActions';
-import CustomizeSearch from './CustomizeSearch';
-import { getAllNetworksOfType } from '../../util/vehicleRentalUtils';
-import { TransportMode } from '../../constants';
-import { mapLayerShape } from '../../store/MapLayerStore';
+import ItineraryTabs from './ItineraryTabs';
+import NaviContainer from './NaviContainer';
+import NavigatorIntroModal from './NavigatorIntro/NavigatorIntroModal';
+import planConnection from './PlanConnection';
const MAX_QUERY_COUNT = 4; // number of attempts to collect enough itineraries
@@ -110,9 +117,8 @@ const unset = { plan: {}, loading: LOADSTATE.UNSET };
export default function ItineraryPage(props, context) {
const headerRef = useRef(null);
const mwtRef = useRef();
- const expandMapRef = useRef(0);
+ const mobileRef = useRef();
const ariaRef = useRef('summary-page.title');
-
const [state, setState] = useState({
...emptyState,
loading: LOADSTATE.UNSET,
@@ -121,6 +127,9 @@ export default function ItineraryPage(props, context) {
const [relaxScooterState, setRelaxScooterState] = useState(emptyPlan);
const [scooterState, setScooterState] = useState(unset);
const [combinedState, setCombinedState] = useState(emptyPlan);
+ const [isNavigatorIntroDismissed, setNavigatorIntroDismissed] = useState(
+ getDialogState('navi-intro'),
+ );
const altStates = {
[PLANTYPE.WALK]: useState(unset),
@@ -140,7 +149,7 @@ export default function ItineraryPage(props, context) {
const [weatherState, setWeatherState] = useState({ loading: false });
const [topicsState, setTopicsState] = useState(null);
const [mapState, setMapState] = useState({});
- const [navigation, setNavigation] = useState(false);
+ const [naviMode, setNaviMode] = useState(false);
const { config, router } = context;
const { match, breakpoint } = props;
@@ -503,6 +512,9 @@ export default function ItineraryPage(props, context) {
laterEdges: [...state.laterEdges, ...edges],
});
}
+ if (arriveBy) {
+ resetItineraryPageSelection();
+ }
};
const onEarlier = async () => {
@@ -554,7 +566,6 @@ export default function ItineraryPage(props, context) {
return;
}
ariaRef.current = 'itinerary-page.itineraries-loaded';
-
const newState = {
...state,
loadingMore: undefined,
@@ -585,6 +596,67 @@ export default function ItineraryPage(props, context) {
earlierEdges: [...edges, ...state.earlierEdges],
});
}
+ if (!arriveBy) {
+ resetItineraryPageSelection();
+ }
+ };
+
+ // make the map to obey external navigation
+ function navigateMap() {
+ // map sticks to user location if tracking is on, so set it off
+ if (mwtRef.current?.disableMapTracking) {
+ mwtRef.current.disableMapTracking();
+ }
+ // map will not react to location props unless they change or update is forced
+ if (mwtRef.current?.forceRefresh) {
+ mwtRef.current.forceRefresh();
+ }
+ }
+
+ const getCombinedPlanEdges = () => {
+ return [
+ ...(state.earlierEdges || []),
+ ...(mapHashToPlan()?.edges || []),
+ ...(state.laterEdges || []),
+ ];
+ };
+
+ const getItinerarySelection = () => {
+ const hasNoTransitItineraries = filterWalk(state.plan?.edges).length === 0;
+ const plan = mapHashToPlan();
+ let combinedEdges;
+ // Remove old itineraries if new query cannot find a route
+ if (state.error) {
+ combinedEdges = [];
+ } else if (streetHashes.includes(hash)) {
+ combinedEdges = plan?.edges || [];
+ } else {
+ combinedEdges = getCombinedPlanEdges();
+ if (!hasNoTransitItineraries) {
+ // don't show plain walking in transit itinerary list
+ combinedEdges = filterWalk(combinedEdges);
+ }
+ }
+ const selectedIndex = getSelectedItineraryIndex(location, combinedEdges);
+
+ return { plan, combinedEdges, selectedIndex, hasNoTransitItineraries };
+ };
+
+ const setNavigation = isEnabled => {
+ if (mobileRef.current) {
+ mobileRef.current.setBottomSheet(isEnabled ? 'bottom' : 'middle');
+ }
+ if (!isEnabled) {
+ setMapState({ center: undefined, zoom: undefined, bounds: undefined });
+ navigateMap();
+ clearLatestNavigatorItinerary();
+ } else {
+ const { combinedEdges, selectedIndex } = getItinerarySelection();
+ if (combinedEdges[selectedIndex]?.node) {
+ setLatestNavigatorItinerary(combinedEdges[selectedIndex]?.node);
+ }
+ }
+ setNaviMode(isEnabled);
};
// save url-defined location to old searches
@@ -673,30 +745,17 @@ export default function ItineraryPage(props, context) {
);
}
- // make the map to obey external navigation
- function navigateMap() {
- // map sticks to user location if tracking is on, so set it off
- if (mwtRef.current?.disableMapTracking) {
- mwtRef.current.disableMapTracking();
- }
- // map will not react to location props unless they change or update is forced
- if (mwtRef.current?.forceRefresh) {
- mwtRef.current.forceRefresh();
- }
- }
-
- function getCombinedPlanEdges() {
- return [
- ...(state.earlierEdges || []),
- ...(mapHashToPlan()?.edges || []),
- ...(state.laterEdges || []),
- ];
- }
-
useEffect(() => {
setCurrentTimeToURL(config, match);
updateLocalStorage(true);
addFeedbackly(context);
+
+ const storedItinerary = getLatestNavigatorItinerary();
+
+ setNavigation(
+ storedItinerary?.end && Date.parse(storedItinerary.end) > Date.now(),
+ );
+
return () => {
if (showVehicles()) {
stopClient(context);
@@ -727,14 +786,14 @@ export default function ItineraryPage(props, context) {
useEffect(() => {
navigateMap();
- setMapState({ center: undefined, bounds: undefined });
+ setMapState({ center: undefined, zoom: undefined, bounds: undefined });
if (detailView) {
// If itinerary is not found in detail view, go back to summary view
if (altLoadingDone() && !mapHashToPlan()?.edges?.length) {
selectStreetMode(); // back to root view
}
- } else if (navigation) {
+ } else if (naviMode) {
// turn off tracking when user navigates away from tracking view
setNavigation(false);
}
@@ -748,8 +807,11 @@ export default function ItineraryPage(props, context) {
useEffect(() => {
// vehicles on map
if (showVehicles()) {
- const combinedEdges = transitEdges(getCombinedPlanEdges());
- const itineraryTopics = getTopics(config, combinedEdges, match);
+ const { combinedEdges, selectedIndex } = getItinerarySelection();
+ const selected = combinedEdges.length
+ ? combinedEdges[selectedIndex]
+ : null;
+ const itineraryTopics = getTopics(selected, config);
const { client } = context.getStore('RealTimeInformationStore');
// Client may not be initialized yet if there was an client before ComponentDidMount
if (!isEqual(itineraryTopics, topicsState) || !client) {
@@ -801,7 +863,11 @@ export default function ItineraryPage(props, context) {
state.loading === LOADSTATE.DONE &&
scooterState.loading === LOADSTATE.DONE
) {
- const plan = mergeScooterTransitPlan(scooterState.plan, state.plan);
+ const plan = mergeScooterTransitPlan(
+ scooterState.plan,
+ state.plan,
+ config.vehicleRental.allowDirectScooterJourneys,
+ );
setCombinedState({ plan, loading: LOADSTATE.DONE });
resetItineraryPageSelection();
}
@@ -811,19 +877,17 @@ export default function ItineraryPage(props, context) {
mwtRef.current = ref;
};
- const focusToPoint = (lat, lon, maximize = true) => {
- if (breakpoint !== 'large' && maximize) {
- window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });
- expandMapRef.current += 1;
+ const focusToPoint = (lat, lon) => {
+ if (mobileRef.current) {
+ mobileRef.current.setBottomSheet('bottom');
}
navigateMap();
- setMapState({ center: { lat, lon }, bounds: null });
+ setMapState({ center: { lat, lon }, zoom: 18, bounds: null });
};
- const focusToLeg = (leg, maximize = true) => {
- if (breakpoint !== 'large' && maximize) {
- window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });
- expandMapRef.current += 1;
+ const focusToLeg = leg => {
+ if (mobileRef.current) {
+ mobileRef.current.setBottomSheet('bottom');
}
navigateMap();
const bounds = boundWithMinimumArea(
@@ -863,7 +927,7 @@ export default function ItineraryPage(props, context) {
router.replace(newLocationState);
};
- const showSettingsPanel = open => {
+ const showSettingsPanel = (open, changeScooterSettings) => {
addAnalyticsEvent({
event: 'sendMatomoEvent',
category: 'ItinerarySettings',
@@ -876,6 +940,7 @@ export default function ItineraryPage(props, context) {
...settingsState,
settingsOpen: true,
settingsOnOpen: getSettings(config),
+ changeScooterSettings,
});
if (breakpoint !== 'large') {
router.push({
@@ -888,6 +953,17 @@ export default function ItineraryPage(props, context) {
}
return;
}
+ if (
+ settingsState.changeScooterSettings &&
+ settingsState.settingsOnOpen.scooterNetworks.length <
+ getSettings(config).scooterNetworks.length
+ ) {
+ addAnalyticsEvent({
+ category: 'ItinerarySettings',
+ action: 'SettingsEnableScooterNetwork',
+ name: 'AfterOnlyScooterRoutesFound',
+ });
+ }
const settingsChanged = !isEqual(
settingsState.settingsOnOpen,
@@ -899,6 +975,7 @@ export default function ItineraryPage(props, context) {
...settingsState,
settingsOpen: false,
settingsChanged,
+ changeScooterSettings: false,
});
if (settingsChanged && detailView) {
@@ -930,6 +1007,7 @@ export default function ItineraryPage(props, context) {
} else if (mapState.center) {
mwtProps.lat = mapState.center.lat;
mwtProps.lon = mapState.center.lon;
+ mwtProps.zoom = mapState.zoom;
} else {
mwtProps.bounds = getBounds(planEdges, from, to, viaPoints);
}
@@ -967,36 +1045,36 @@ export default function ItineraryPage(props, context) {
);
}
+ const itinerarySelection = getItinerarySelection();
+ const { combinedEdges, selectedIndex, hasNoTransitItineraries } =
+ itinerarySelection;
+ let { plan } = itinerarySelection;
+
+ const toggleNavigatorIntro = () => {
+ setDialogState('navi-intro');
+ setNavigatorIntroDismissed(true);
+ };
+
+ const cancelNavigatorUsage = () => {
+ setNavigation(false);
+ toggleNavigatorIntro();
+ };
+
const walkPlan = altStates[PLANTYPE.WALK][0].plan;
const bikePlan = altStates[PLANTYPE.BIKE][0].plan;
const carPlan = altStates[PLANTYPE.CAR][0].plan;
const parkRidePlan = altStates[PLANTYPE.PARKANDRIDE][0].plan;
const bikePublicPlan = bikePublicState.plan;
- const hasNoTransitItineraries = filterWalk(state.plan?.edges).length === 0;
const settings = getSettings(config);
- let plan = mapHashToPlan();
const showRelaxedPlanNotifier = plan === relaxState.plan;
const showRentalVehicleNotifier = plan === relaxScooterState.plan;
/* NOTE: as a temporary solution, do filtering by feedId in UI */
if (config.feedIdFiltering && plan) {
plan = filterItinerariesByFeedId(plan, config);
}
- let combinedEdges;
- // Remove old itineraries if new query cannot find a route
- if (state.error) {
- combinedEdges = [];
- } else if (streetHashes.includes(hash)) {
- combinedEdges = plan?.edges || [];
- } else {
- combinedEdges = getCombinedPlanEdges();
- if (!hasNoTransitItineraries) {
- // don't show plain walking in transit itinerary list
- combinedEdges = filterWalk(combinedEdges);
- }
- }
- const selectedIndex = getSelectedItineraryIndex(location, combinedEdges);
+
const from = otpToLocation(params.from);
const to = otpToLocation(params.to);
const viaPoints = getIntermediatePlaces(query);
@@ -1051,6 +1129,7 @@ export default function ItineraryPage(props, context) {
// in mobile, settings drawer hides other content
const panelHidden = !desktop && settingsDrawer !== null;
let content; // bottom content of itinerary panel
+
if (panelHidden) {
content = null;
} else if (loading) {
@@ -1060,15 +1139,27 @@ export default function ItineraryPage(props, context) {
);
} else if (detailView) {
- if (navigation) {
+ if (naviMode) {
+ const naviModeItinerary =
+ getLatestNavigatorItinerary() || combinedEdges[selectedIndex]?.node;
+
content = (
-
+ <>
+ {!isNavigatorIntroDismissed && (
+
+ )}
+
+ >
);
} else {
let carEmissions = carPlan?.edges?.[0]?.node.emissionsPerPerson?.co2;
@@ -1209,7 +1300,9 @@ export default function ItineraryPage(props, context) {
content={content}
settingsDrawer={settingsDrawer}
map={map}
- expandMap={expandMapRef.current}
+ mapRef={mwtRef.current}
+ ref={mobileRef}
+ match={match}
/>
);
}
diff --git a/app/component/itinerary/ItineraryPageUtils.js b/app/component/itinerary/ItineraryPageUtils.js
index f307fbab6c..f77399ea17 100644
--- a/app/component/itinerary/ItineraryPageUtils.js
+++ b/app/component/itinerary/ItineraryPageUtils.js
@@ -30,13 +30,25 @@ import { getTotalBikingDistance, compressLegs } from '../../util/legUtils';
export function getSelectedItineraryIndex(
{ pathname, state } = {},
edges = [],
- defaultValue = 0,
) {
+ // path defines the selection in detail view
+ const lastURLSegment = pathname?.split('/').pop();
+ if (lastURLSegment !== '') {
+ const index = Number(pathname?.split('/').pop());
+ if (!Number.isNaN(index)) {
+ if (index >= edges.length) {
+ return 0;
+ }
+ return index;
+ }
+ }
+
+ // in summary view, look the location state
if (state?.selectedItineraryIndex !== undefined) {
if (state.selectedItineraryIndex < edges.length) {
return state.selectedItineraryIndex;
}
- return defaultValue;
+ return 0;
}
/*
@@ -44,13 +56,6 @@ export function getSelectedItineraryIndex(
* page by an external link, we check if an itinerary selection is
* supplied in URL and make that the selection.
*/
- const lastURLSegment = Number(pathname?.split('/').pop());
- if (!Number.isNaN(lastURLSegment)) {
- if (lastURLSegment >= edges.length) {
- return defaultValue;
- }
- return lastURLSegment;
- }
return 0;
}
@@ -82,14 +87,13 @@ export function addFeedbackly(context) {
}
}
-export function getTopics(config, edges, match) {
+export function getTopics(itinerary, config) {
const itineraryTopics = [];
- if (edges.length) {
+ if (itinerary) {
const { realTime, feedIds } = config;
- const selected = edges[getSelectedItineraryIndex(match.location, edges)];
- selected.node.legs.forEach(leg => {
+ itinerary.node.legs.forEach(leg => {
if (leg.transitLeg && leg.trip) {
const feedId = leg.trip.gtfsId.split(':')[0];
let topic;
@@ -358,10 +362,10 @@ export function transitEdges(edges) {
/**
* Filters away itineraries that
* 1. don't use scooters
- * 2. only use scooters
+ * 2. only use scooters (unless allowed by allowDirectScooterJourneys)
* 3. use scooters that are not vehicles
*/
-export function scooterEdges(edges) {
+export function scooterEdges(edges, allowDirectScooterJourneys) {
if (!edges) {
return [];
}
@@ -385,7 +389,11 @@ export function scooterEdges(edges) {
}
});
- if (hasScooterLeg && hasNonScooterLeg && allScooterLegsHaveRentalVehicle) {
+ if (
+ hasScooterLeg &&
+ allScooterLegsHaveRentalVehicle &&
+ (hasNonScooterLeg || allowDirectScooterJourneys)
+ ) {
filteredEdges.push(edge);
}
});
@@ -462,9 +470,16 @@ export function mergeBikeTransitPlans(bikeParkPlan, bikeTransitPlan) {
/**
* Combine a scooter edge with the main transit edges.
*/
-export function mergeScooterTransitPlan(scooterPlan, transitPlan) {
+export function mergeScooterTransitPlan(
+ scooterPlan,
+ transitPlan,
+ allowDirectScooterJourneys,
+) {
const transitPlanEdges = transitPlan.edges || [];
- const scooterTransitEdges = scooterEdges(scooterPlan.edges);
+ const scooterTransitEdges = scooterEdges(
+ scooterPlan.edges,
+ allowDirectScooterJourneys,
+ );
const maxTransitEdges =
scooterTransitEdges.length > 0 ? 4 : transitPlanEdges.length;
diff --git a/app/component/itinerary/LegInfo.js b/app/component/itinerary/LegInfo.js
index 214218f381..5bf0979d39 100644
--- a/app/component/itinerary/LegInfo.js
+++ b/app/component/itinerary/LegInfo.js
@@ -34,7 +34,10 @@ export default function LegInfo(
!constantOperationRoutes || !constantOperationRoutes[leg.route.gtfsId];
const mode = isCallAgency
? 'call'
- : getRouteMode({ mode: leg.mode, type: leg.route.type });
+ : getRouteMode(
+ { mode: leg.mode, type: leg.route.type, gtfsId: leg.route?.gtfsId },
+ config,
+ );
const capacity = getCapacityForLeg(config, leg);
let capacityTranslation;
if (capacity) {
diff --git a/app/component/itinerary/Legs.js b/app/component/itinerary/Legs.js
index 6a46710ac2..1da3999184 100644
--- a/app/component/itinerary/Legs.js
+++ b/app/component/itinerary/Legs.js
@@ -187,7 +187,14 @@ export default class Legs extends React.Component {
leg.mode === 'FUNICULAR') &&
!leg.interlineWithPreviousLeg
) {
- const mode = getRouteMode({ mode: leg.mode, type: leg.route?.type });
+ const mode = getRouteMode(
+ {
+ mode: leg.mode,
+ type: leg.route?.type,
+ gtfsId: leg.route?.gtfsId,
+ },
+ this.context.config,
+ );
legs.push(
);
} else if (leg.mode === 'AIRPLANE') {
legs.push(
diff --git a/app/component/itinerary/MobileTicketPurchaseInformation.js b/app/component/itinerary/MobileTicketPurchaseInformation.js
index 76b0d2f4e0..633c802239 100644
--- a/app/component/itinerary/MobileTicketPurchaseInformation.js
+++ b/app/component/itinerary/MobileTicketPurchaseInformation.js
@@ -21,7 +21,8 @@ export default function MobileTicketPurchaseInformation(
!fare.isUnknown,
config.availableTickets,
);
- const price = `${fare.price.toFixed(2)} €`.replace('.', ',');
+ const price =
+ fare.price > 0 ? `${fare.price.toFixed(2)} €`.replace('.', ',') : '';
const faresInfo = () => {
const header = `${intl.formatMessage({
@@ -40,16 +41,14 @@ export default function MobileTicketPurchaseInformation(
defaultMessage="Mobile ticket purchase information. Buy {ticketName} for {price}"
/>
@@ -58,18 +57,16 @@ export default function MobileTicketPurchaseInformation(
return (
-
- {faresInfo()}
-
-
- addAnalyticsEvent({ event: 'journey_planner_open_app' })
- }
- >
-
-
-
+ {faresInfo()}
+
+
+ addAnalyticsEvent({ event: 'journey_planner_open_app' })
+ }
+ >
+
+
);
diff --git a/app/component/itinerary/NaviBottom.js b/app/component/itinerary/NaviBottom.js
new file mode 100644
index 0000000000..a46bac6f33
--- /dev/null
+++ b/app/component/itinerary/NaviBottom.js
@@ -0,0 +1,58 @@
+import PropTypes from 'prop-types';
+import React from 'react';
+import { FormattedMessage } from 'react-intl';
+import { configShape } from '../../util/shapes';
+import { epochToTime } from '../../util/timeUtils';
+
+export default function NaviBottom({ setNavigation, arrival }, { config }) {
+ const remainingDuration = Math.ceil((arrival - Date.now()) / 60000); // ms to minutes
+ return (
+
+ );
+}
+
+NaviBottom.propTypes = {
+ setNavigation: PropTypes.func.isRequired,
+ arrival: PropTypes.number.isRequired,
+};
+
+NaviBottom.contextTypes = {
+ config: configShape.isRequired,
+};
diff --git a/app/component/itinerary/NaviCard.js b/app/component/itinerary/NaviCard.js
new file mode 100644
index 0000000000..e7e89f48e3
--- /dev/null
+++ b/app/component/itinerary/NaviCard.js
@@ -0,0 +1,60 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { legShape } from '../../util/shapes';
+import Icon from '../Icon';
+import { isRental } from '../../util/legUtils';
+import NaviInstructions from './NaviInstructions';
+import NaviCardExtension from './NaviCardExtension';
+
+const iconMap = {
+ BICYCLE: 'icon-icon_cyclist',
+ CAR: 'icon-icon_car-withoutBox',
+ SCOOTER: 'icon-icon_scooter_rider',
+ WALK: 'icon-icon_walk',
+ WAIT: 'icon-icon_navigation_wait',
+};
+
+export default function NaviCard({ leg, nextLeg, legType, cardExpanded }) {
+ const iconName = legType === 'wait' ? iconMap.WAIT : iconMap[leg.mode];
+ let instructions = `navileg-${leg.mode.toLowerCase()}`;
+
+ if (isRental(leg, nextLeg)) {
+ if (leg.mode === 'WALK' && nextLeg?.mode === 'SCOOTER') {
+ instructions = `navileg-rent-scooter`;
+ } else {
+ instructions = `navileg-rent-cycle`;
+ }
+ }
+ return (
+
+ );
+}
+
+NaviCard.propTypes = {
+ leg: legShape.isRequired,
+ nextLeg: legShape.isRequired,
+ legType: PropTypes.string.isRequired,
+ cardExpanded: PropTypes.bool,
+};
+NaviCard.defaultProps = {
+ cardExpanded: false,
+};
diff --git a/app/component/itinerary/NaviCardContainer.js b/app/component/itinerary/NaviCardContainer.js
new file mode 100644
index 0000000000..0caff26569
--- /dev/null
+++ b/app/component/itinerary/NaviCardContainer.js
@@ -0,0 +1,228 @@
+import React, { useEffect, useState, useRef } from 'react';
+import PropTypes from 'prop-types';
+import { FormattedMessage, intlShape } from 'react-intl';
+import distance from '@digitransit-search-util/digitransit-search-util-distance';
+import { legShape, configShape } from '../../util/shapes';
+import { legTime, legTimeStr } from '../../util/legUtils';
+import NaviCard from './NaviCard';
+import NaviStack from './NaviStack';
+import {
+ getItineraryAlerts,
+ getTransitLegState,
+ getAdditionalMessages,
+} from './NaviUtils';
+
+const DESTINATION_RADIUS = 20; // meters
+const TIME_AT_DESTINATION = 3; // * 10 seconds
+
+function getFirstLastLegs(legs) {
+ const first = legs[0];
+ const last = legs[legs.length - 1];
+ return { first, last };
+}
+
+function NaviCardContainer(
+ { focusToLeg, time, realTimeLegs, position },
+ { intl, config },
+) {
+ const [currentLeg, setCurrentLeg] = useState(null);
+ const [cardExpanded, setCardExpanded] = useState(false);
+ // All notifications including those user has dismissed.
+ const [messages, setMessages] = useState(new Map());
+ // notifications that are shown to the user.
+ const [activeMessages, setActiveMessages] = useState([]);
+ const focusRef = useRef(false);
+ // Destination counter. How long user has been at the destination. * 10 seconds
+ const destCountRef = useRef(0);
+
+ const handleClick = () => {
+ setCardExpanded(!cardExpanded);
+ };
+
+ useEffect(() => {
+ const newLeg = realTimeLegs.find(leg => {
+ return legTime(leg.start) <= time && time <= legTime(leg.end);
+ });
+
+ const incomingMessages = new Map();
+
+ // TODO proper alert handling.
+ // Alerts for NaviStack
+ const alerts = getItineraryAlerts(realTimeLegs, intl, messages);
+ alerts.forEach(alert => {
+ incomingMessages.set(alert.id, alert);
+ });
+
+ const legChanged = newLeg?.legId
+ ? newLeg.legId !== currentLeg?.legId
+ : currentLeg?.mode !== newLeg?.mode;
+ const l = currentLeg || newLeg;
+
+ if (l) {
+ const nextLeg = realTimeLegs.find(
+ leg => legTime(leg.start) > legTime(l.start),
+ );
+ if (nextLeg?.transitLeg) {
+ // Messages for NaviStack.
+ const transitLegState = getTransitLegState(nextLeg, intl, messages);
+ if (transitLegState) {
+ incomingMessages.set(transitLegState.id, transitLegState);
+ }
+ const additionalMsgs = getAdditionalMessages(
+ nextLeg,
+ time,
+ intl,
+ config,
+ messages,
+ );
+ if (additionalMsgs) {
+ additionalMsgs.forEach(m => {
+ incomingMessages.set(m.id, m);
+ });
+ }
+ }
+ if (newLeg) {
+ focusToLeg?.(newLeg);
+ }
+ if (legChanged) {
+ setCurrentLeg(newLeg);
+ setCardExpanded(false);
+ }
+ }
+ if (incomingMessages.size || legChanged) {
+ // Handle messages when new messages arrives or leg is changed.
+
+ // Current active messages. Filter away legChange messages when leg changes.
+ const previousValidMessages = legChanged
+ ? activeMessages.filter(m => m.expiresOn !== 'legChange')
+ : activeMessages;
+
+ // handle messages that are updated.
+ const updatedMessages = previousValidMessages.map(msg => {
+ const incoming = incomingMessages.get(msg.id);
+ if (incoming) {
+ incomingMessages.delete(msg.id);
+ return incoming;
+ }
+ return msg;
+ });
+ const newMessages = Array.from(incomingMessages.values());
+ setActiveMessages([...updatedMessages, ...newMessages]);
+ setMessages(new Map([...messages, ...incomingMessages]));
+ }
+
+ if (!focusRef.current && focusToLeg) {
+ // handle initial focus when not tracking
+ if (newLeg) {
+ focusToLeg(newLeg);
+ destCountRef.current = 0;
+ } else {
+ const { first, last } = getFirstLastLegs(realTimeLegs);
+ if (time < legTime(first.start)) {
+ focusToLeg(first);
+ } else {
+ focusToLeg(last);
+ }
+ }
+ focusRef.current = true;
+ }
+
+ // User position and distance from currentleg endpoint.
+ if (
+ position &&
+ currentLeg &&
+ distance(position, currentLeg.to) <= DESTINATION_RADIUS
+ ) {
+ destCountRef.current += 1;
+ } else {
+ // Todo: this works in transit legs, but do we need additional logic for bikes / scooters?
+ destCountRef.current = 0;
+ }
+ }, [time]);
+
+ const { first, last } = getFirstLastLegs(realTimeLegs);
+
+ let naviTopContent;
+ if (time < legTime(first.start)) {
+ naviTopContent = (
+
+ );
+ } else if (currentLeg) {
+ if (!currentLeg.transitLeg) {
+ const nextLeg = realTimeLegs.find(leg => {
+ return legTime(leg.start) > legTime(currentLeg.start);
+ });
+ let legType;
+ if (destCountRef.current >= TIME_AT_DESTINATION) {
+ legType = 'wait';
+ } else {
+ legType = 'move';
+ }
+ naviTopContent = (
+
+ );
+ } else {
+ naviTopContent = `Tracking ${currentLeg?.mode} leg`;
+ }
+ } else if (time > legTime(last.end)) {
+ naviTopContent =
;
+ } else {
+ naviTopContent =
;
+ }
+ const handleRemove = index => {
+ setActiveMessages(activeMessages.filter((_, i) => i !== index));
+ };
+
+ return (
+ <>
+
+ {activeMessages.length > 0 && (
+
+ )}
+ >
+ );
+}
+
+NaviCardContainer.propTypes = {
+ focusToLeg: PropTypes.func,
+ time: PropTypes.number.isRequired,
+ realTimeLegs: PropTypes.arrayOf(legShape).isRequired,
+ position: PropTypes.shape({
+ lat: PropTypes.number,
+ lon: PropTypes.number,
+ }),
+
+ /*
+ focusToPoint: PropTypes.func.isRequired,
+ */
+};
+
+NaviCardContainer.defaultProps = {
+ focusToLeg: undefined,
+ position: undefined,
+};
+
+NaviCardContainer.contextTypes = {
+ intl: intlShape.isRequired,
+ config: configShape.isRequired,
+};
+
+export default NaviCardContainer;
diff --git a/app/component/itinerary/NaviCardExtension.js b/app/component/itinerary/NaviCardExtension.js
new file mode 100644
index 0000000000..f21c0466de
--- /dev/null
+++ b/app/component/itinerary/NaviCardExtension.js
@@ -0,0 +1,68 @@
+import React from 'react';
+import Icon from '../Icon';
+import StopCode from '../StopCode';
+import PlatformNumber from '../PlatformNumber';
+import { getZoneLabel } from '../../util/legUtils';
+import ZoneIcon from '../ZoneIcon';
+import { legShape, configShape } from '../../util/shapes';
+import { getDestinationProperties } from './NaviUtils';
+
+const NaviCardExtension = ({ leg }, { config }) => {
+ const { stop, name } = leg.to;
+ const { code, platformCode, zoneId, vehicleMode } = stop || {};
+ const [place, address] = name?.split(/, (.+)/) || [];
+
+ let destination = {};
+ if (stop) {
+ destination = getDestinationProperties(leg, stop, config);
+ destination.name = stop.name;
+ } else {
+ destination.iconId = 'icon-icon_mapMarker-to';
+ destination.className = 'place';
+ destination.name = place;
+ }
+ return (
+
+
+
+
+
+
+ {destination.name}
+
+ {!stop && address &&
{address}
}
+ {code &&
}
+ {platformCode && (
+
+ )}
+
+
+
+
+
+ );
+};
+
+NaviCardExtension.propTypes = {
+ leg: legShape.isRequired,
+};
+
+NaviCardExtension.contextTypes = {
+ config: configShape.isRequired,
+};
+
+export default NaviCardExtension;
diff --git a/app/component/itinerary/NaviContainer.js b/app/component/itinerary/NaviContainer.js
new file mode 100644
index 0000000000..4ba123b60a
--- /dev/null
+++ b/app/component/itinerary/NaviContainer.js
@@ -0,0 +1,72 @@
+import PropTypes from 'prop-types';
+import React from 'react';
+import { legTime } from '../../util/legUtils';
+import { itineraryShape, relayShape } from '../../util/shapes';
+import NaviBottom from './NaviBottom';
+import NaviCardContainer from './NaviCardContainer';
+import { useRealtimeLegs } from './hooks/useRealtimeLegs';
+
+function NaviContainer(
+ { itinerary, focusToLeg, relayEnvironment, setNavigation, mapRef },
+ { getStore },
+) {
+ const { legs } = itinerary;
+ const position = getStore('PositionStore').getLocationState();
+
+ const { realTimeLegs, time, isPositioningAllowed } = useRealtimeLegs(
+ legs,
+ mapRef,
+ relayEnvironment,
+ );
+
+ // recompute estimated arrival
+ let lastTransitLeg;
+ let arrivalChange = 0;
+
+ legs.forEach(leg => {
+ if (leg.transitLeg) {
+ lastTransitLeg = leg;
+ }
+ });
+
+ if (lastTransitLeg) {
+ const rtLeg = realTimeLegs.find(leg => {
+ return leg.legId === lastTransitLeg.legId;
+ });
+ arrivalChange = legTime(rtLeg.end) - legTime(lastTransitLeg.end);
+ }
+
+ const arrivalTime = legTime(legs[legs.length - 1].end) + arrivalChange;
+
+ return (
+ <>
+
{' '}
+
+ >
+ );
+}
+
+NaviContainer.propTypes = {
+ itinerary: itineraryShape.isRequired,
+ focusToLeg: PropTypes.func.isRequired,
+ relayEnvironment: relayShape.isRequired,
+ setNavigation: PropTypes.func.isRequired,
+ // eslint-disable-next-line
+ mapRef: PropTypes.object,
+};
+
+NaviContainer.contextTypes = {
+ getStore: PropTypes.func.isRequired,
+};
+
+NaviContainer.defaultProps = { mapRef: undefined };
+
+export default NaviContainer;
diff --git a/app/component/itinerary/NaviDestination.js b/app/component/itinerary/NaviDestination.js
deleted file mode 100644
index b1299f311b..0000000000
--- a/app/component/itinerary/NaviDestination.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import { FormattedMessage, intlShape } from 'react-intl';
-import Icon from '../Icon';
-import StopCode from '../StopCode';
-import { legShape } from '../../util/shapes';
-
-function NaviDestination({ leg, focusToLeg }) {
- const { stop, rentalVehicle, vehicleParking, vehicleRentalStation } = leg.to;
-
- let toIcon;
- if (stop) {
- toIcon = `icon-icon_${stop.vehicleMode.toLowerCase()}-stop-lollipop`;
- } else if (rentalVehicle) {
- toIcon = 'icon-icon_scooter-lollipop';
- } else if (vehicleParking) {
- toIcon = 'icon-bike_parking';
- } else if (vehicleRentalStation) {
- toIcon = 'icon-icon_citybike';
- }
-
- const handleFocusToLeg = (l, maximize) => () => {
- focusToLeg(l, maximize);
- };
-
- return (
-
- {toIcon &&
}
-
- {stop?.name}
- {stop?.code && }
- {rentalVehicle?.rentalNetwork.networkId}
- {vehicleParking?.name}
- {vehicleRentalStation?.rentalNetwork.networkId}
- {vehicleRentalStation?.name}
-
-
-
- );
-}
-
-NaviDestination.propTypes = {
- leg: legShape.isRequired,
- focusToLeg: PropTypes.func.isRequired,
-};
-
-NaviDestination.contextTypes = {
- intl: intlShape.isRequired,
-};
-
-export default NaviDestination;
diff --git a/app/component/itinerary/NaviInstructions.js b/app/component/itinerary/NaviInstructions.js
new file mode 100644
index 0000000000..a5becf30ce
--- /dev/null
+++ b/app/component/itinerary/NaviInstructions.js
@@ -0,0 +1,92 @@
+import React, { useEffect, useState } from 'react';
+import { FormattedMessage, intlShape } from 'react-intl';
+import PropTypes from 'prop-types';
+import cx from 'classnames';
+import { legShape, configShape } from '../../util/shapes';
+import { legDestination } from '../../util/legUtils';
+import RouteNumber from '../RouteNumber';
+import { displayDistance } from '../../util/geo-utils';
+import { durationToString } from '../../util/timeUtils';
+
+export default function NaviInstructions(
+ { leg, nextLeg, instructions, legType },
+ { intl, config },
+) {
+ const { distance, duration } = leg;
+ const [fadeOut, setFadeOut] = useState(false);
+
+ useEffect(() => {
+ const timer = setTimeout(() => {
+ setFadeOut(true);
+ }, 10000);
+ return () => {
+ setFadeOut(false);
+ clearTimeout(timer);
+ };
+ }, [leg]);
+
+ if (legType === 'move') {
+ return (
+ <>
+
+
+
+ {legDestination(intl, leg, null, nextLeg)}
+
+ {distance && duration && (
+
+ {displayDistance(distance, config, intl.formatNumber)} (
+ {durationToString(duration * 1000)})
+
+ )}
+ >
+ );
+ }
+
+ if (legType === 'wait') {
+ const { mode, headsign, route } = nextLeg;
+
+ const color = route.color ? route.color : 'currentColor';
+ const localizedMode = intl.formatMessage({
+ id: `${mode.toLowerCase()}`,
+ defaultMessage: `${mode}`,
+ });
+ return (
+ <>
+
+
+
+
+ >
+ );
+ }
+ return null;
+}
+
+NaviInstructions.propTypes = {
+ leg: legShape.isRequired,
+ nextLeg: legShape.isRequired,
+ instructions: PropTypes.string.isRequired,
+ legType: PropTypes.string,
+};
+
+NaviInstructions.defaultProps = {
+ legType: 'move',
+};
+NaviInstructions.contextTypes = {
+ intl: intlShape.isRequired,
+ config: configShape.isRequired,
+};
diff --git a/app/component/itinerary/NaviLeg.js b/app/component/itinerary/NaviLeg.js
deleted file mode 100644
index 7e6a114db5..0000000000
--- a/app/component/itinerary/NaviLeg.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import PropTypes from 'prop-types';
-import React from 'react';
-import { FormattedMessage, intlShape } from 'react-intl';
-import { legShape } from '../../util/shapes';
-import Icon from '../Icon';
-import { legDestination } from '../../util/legUtils';
-import NaviDestination from './NaviDestination';
-
-const iconMap = {
- BICYCLE: 'icon-icon_cyclist',
- CAR: 'icon-icon_car-withoutBox',
- SCOOTER: 'icon-icon_scooter_rider',
- WALK: 'icon-icon_walk',
-};
-
-/* eslint-disable jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */
-export default function NaviLeg({ leg, focusToLeg }, { intl }) {
- const iconName = iconMap[leg.mode];
- const goTo = `navileg-${leg.mode.toLowerCase()}`;
-
- return (
-
-
-
-
-
- {legDestination(intl, leg)}
-
-
-
- );
-}
-
-NaviLeg.propTypes = {
- leg: legShape.isRequired,
- focusToLeg: PropTypes.func.isRequired,
-};
-
-NaviLeg.contextTypes = {
- intl: intlShape.isRequired,
-};
diff --git a/app/component/itinerary/NaviMessage.js b/app/component/itinerary/NaviMessage.js
new file mode 100644
index 0000000000..9c39b9a51f
--- /dev/null
+++ b/app/component/itinerary/NaviMessage.js
@@ -0,0 +1,82 @@
+import React, { useState } from 'react';
+import { intlShape } from 'react-intl';
+import cx from 'classnames';
+import PropTypes from 'prop-types';
+import { configShape } from '../../util/shapes';
+
+import Icon from '../Icon';
+
+function NaviMessage({ severity, children, index, handleRemove }, { config }) {
+ const [removingIndex, setRemovingIndex] = useState(null);
+
+ const handleRemoveClick = () => {
+ setRemovingIndex(index);
+ setTimeout(() => {
+ handleRemove(index);
+ setRemovingIndex(null);
+ }, 500);
+ };
+ let iconId;
+ let color;
+ switch (severity) {
+ case 'INFO':
+ iconId = 'icon-icon_info';
+ color = '#0074BF';
+ break;
+ case 'WARNING':
+ iconId = 'icon-icon_attention';
+ color = '#FED100';
+ break;
+ case 'ALERT':
+ iconId = 'icon-icon_caution_white_exclamation';
+ color = '#DC0451';
+ break;
+ default:
+ iconId = 'icon-icon_info';
+ color = '#0074BF';
+ }
+ return (
+
+
+ {children}
+
+
+ );
+}
+
+NaviMessage.propTypes = {
+ severity: PropTypes.string.isRequired,
+ children: PropTypes.node.isRequired,
+ index: PropTypes.number.isRequired,
+ handleRemove: PropTypes.func.isRequired,
+};
+
+NaviMessage.contextTypes = {
+ intl: intlShape.isRequired,
+ config: configShape.isRequired,
+};
+
+export default NaviMessage;
diff --git a/app/component/itinerary/NaviStack.js b/app/component/itinerary/NaviStack.js
new file mode 100644
index 0000000000..eb08da4298
--- /dev/null
+++ b/app/component/itinerary/NaviStack.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import cx from 'classnames';
+import NaviMessage from './NaviMessage';
+
+const NaviStack = ({ messages, handleRemove, cardExpanded }) => {
+ return (
+
+ {messages.map((notification, index) => (
+
+ {notification.content}
+
+ ))}
+
+ );
+};
+
+NaviStack.propTypes = {
+ messages: PropTypes.arrayOf(
+ PropTypes.shape({
+ id: PropTypes.string.isRequired,
+ severity: PropTypes.string.isRequired,
+ }),
+ ).isRequired,
+ handleRemove: PropTypes.func.isRequired,
+ cardExpanded: PropTypes.bool,
+};
+
+NaviStack.defaultProps = {
+ cardExpanded: false,
+};
+
+export default NaviStack;
diff --git a/app/component/itinerary/NaviUtils.js b/app/component/itinerary/NaviUtils.js
new file mode 100644
index 0000000000..5e519517e5
--- /dev/null
+++ b/app/component/itinerary/NaviUtils.js
@@ -0,0 +1,252 @@
+import React from 'react';
+import { FormattedMessage } from 'react-intl';
+import { legTime } from '../../util/legUtils';
+import { timeStr } from '../../util/timeUtils';
+import { getFaresFromLegs } from '../../util/fareUtils';
+import { ExtendedRouteTypes } from '../../constants';
+
+const TRANSFER_SLACK = 60000;
+
+function findTransferProblem(legs) {
+ for (let i = 1; i < legs.length - 1; i++) {
+ const prev = legs[i - 1];
+ const leg = legs[i];
+ const next = legs[i + 1];
+
+ if (prev.transitLeg && leg.transitLeg && !leg.interlineWithPreviousLeg) {
+ // transfer at a stop
+ if (legTime(leg.start) - legTime(prev.end) < TRANSFER_SLACK) {
+ return [prev, leg];
+ }
+ }
+
+ if (prev.transitLeg && next.transitLeg && !leg.transitLeg) {
+ // transfer with some walking
+ const t1 = legTime(prev.end);
+ const t2 = legTime(next.start);
+ const transferDuration = legTime(leg.end) - legTime(leg.start);
+ const slack = t2 - t1 - transferDuration;
+ if (slack < TRANSFER_SLACK) {
+ return [prev, next];
+ }
+ }
+ }
+ return null;
+}
+
+export const getAdditionalMessages = (leg, time, intl, config, messages) => {
+ const msgs = [];
+ const ticketDisplay = 120 * 1000; // 2 minutes
+ const ticketMsg = messages.get('ticket');
+ if (!ticketMsg && legTime(leg.start) - time < ticketDisplay) {
+ // Todo: multiple fares?
+ const fare = getFaresFromLegs([leg], config)[0];
+ msgs.push({
+ severity: 'INFO',
+ content: (
+
+
+
+ {fare.ticketName} {fare.price} €
+
+
+ ),
+ id: 'ticket',
+ });
+ }
+ return msgs;
+};
+
+export const getTransitLegState = (leg, intl, messages) => {
+ const { start, realtimeState, from, mode, legId } = leg;
+ const { scheduledTime, estimated } = start;
+ if (mode === 'WALK') {
+ return null;
+ }
+ const previousMessage = messages.get(legId);
+ const prevSeverity = previousMessage ? previousMessage.severity : null;
+
+ const late = estimated?.delay > 0;
+ const localizedMode = intl.formatMessage({
+ id: `${mode.toLowerCase()}`,
+ defaultMessage: `${mode}`,
+ });
+ let content;
+ let severity;
+ const isRealTime = realtimeState === 'UPDATED';
+
+ if (late && prevSeverity !== 'ALERT') {
+ // todo: Do this when design is ready.
+ severity = 'ALERT';
+ content =
Kulkuneuvo on myöhässä
;
+ } else if (!isRealTime && prevSeverity !== 'WARNING') {
+ severity = 'WARNING';
+ content = (
+
+
+
+
+ );
+ } else if (isRealTime && prevSeverity !== 'INFO') {
+ const { parentStation, name } = from.stop;
+ const stopOrStation = parentStation
+ ? intl.formatMessage({ id: 'from-station' })
+ : intl.formatMessage({ id: 'from-stop' });
+ content = (
+
+
+
+
+ );
+ severity = 'INFO';
+ }
+ const state = severity
+ ? { severity, content, id: legId, expiresOn: 'legChange' }
+ : null;
+ return state;
+};
+
+// We'll need the intl later.
+// eslint-disable-next-line no-unused-vars
+export const getItineraryAlerts = (realTimeLegs, intl, messages) => {
+ const alerts = [];
+ const canceled = realTimeLegs.filter(leg => leg.realtimeState === 'CANCELED');
+ const transferProblem = findTransferProblem(realTimeLegs);
+ const late = realTimeLegs.filter(leg => leg.start.estimate?.delay > 0);
+ let content;
+ // TODO: Proper ID handling
+ if (canceled.length > 0 && !messages.get('canceled')) {
+ content =
Osa matkan lähdöistä on peruttu
;
+ // Todo: No current design
+ // todo find modes that are canceled
+ alerts.push({
+ severity: 'ALERT',
+ content,
+ id: 'canceled',
+ });
+ }
+ if (transferProblem !== null) {
+ const transferId = `transfer-${transferProblem[0].legId}-${transferProblem[1].legId}}`;
+ if (!messages.get(transferId)) {
+ // todo no current design
+ content = (
+
{`Vaihto ${transferProblem[0].route.shortName} - ${transferProblem[1].route.shortName} ei onnistu reittisuunnitelman mukaisesti`}
+ );
+
+ alerts.push({
+ severity: 'ALERT',
+ content,
+ id: transferId,
+ });
+ }
+ }
+ if (late.length && !messages.get('late')) {
+ // Todo: No current design
+ // Todo add mode and delay time to this message
+ content =
Kulkuneuvo on myöhässä
;
+ alerts.push({
+ severity: 'ALERT',
+ content,
+ id: 'late',
+ });
+ }
+
+ return alerts;
+};
+
+/*
+ * Get the properties of the destination based on the leg.
+ *
+ */
+export const getDestinationProperties = (leg, stop, config) => {
+ const { rentalVehicle, vehicleParking, vehicleRentalStation } = leg.to;
+ const { vehicleMode, routes } = stop;
+
+ let destination = {};
+ let mode = vehicleMode;
+
+ if (routes && vehicleMode === 'BUS' && config.useExtendedRouteTypes) {
+ if (routes.some(p => p.type === ExtendedRouteTypes.BusExpress)) {
+ mode = 'bus-express';
+ }
+ } else if (routes && vehicleMode === 'TRAM' && config.useExtendedRouteTypes) {
+ if (routes.some(p => p.type === ExtendedRouteTypes.SpeedTram)) {
+ mode = 'speedtram';
+ }
+ }
+ // todo: scooter and citybike icons etc.
+ if (rentalVehicle) {
+ destination.name = rentalVehicle.rentalNetwork.networkId;
+ } else if (vehicleParking) {
+ destination.name = vehicleParking.name;
+ } else if (vehicleRentalStation) {
+ destination.name = vehicleRentalStation.name;
+ } else {
+ let iconProps = {};
+ switch (mode) {
+ case 'TRAM,BUS':
+ iconProps = {
+ iconId: 'icon-icon_bustram-stop-lollipop',
+ className: 'tram-stop',
+ };
+ break;
+ case 'SUBWAY':
+ iconProps = {
+ iconId: 'icon-icon_subway',
+ className: 'subway-stop',
+ };
+ break;
+ case 'RAIL':
+ iconProps = {
+ iconId: 'icon-icon_rail-stop-lollipop',
+ className: 'rail-stop',
+ };
+
+ break;
+ case 'FERRY':
+ iconProps = {
+ iconId: 'icon-icon_ferry',
+ className: 'ferry-stop',
+ };
+ break;
+ case 'bus-express':
+ iconProps = {
+ iconId: 'icon-icon_bus-stop-express-lollipop',
+ className: 'bus-stop',
+ };
+ break;
+ case 'speedtram':
+ iconProps = {
+ iconId: 'icon-icon_speedtram-stop-lollipop',
+ className: 'speedtram-stop',
+ };
+ break;
+ default:
+ iconProps = {
+ iconId: `icon-icon_${mode.toLowerCase()}-stop-lollipop`,
+ };
+ }
+ destination = {
+ ...iconProps,
+ name: stop.name,
+ };
+ }
+
+ return destination;
+};
diff --git a/app/component/itinerary/Navigator.js b/app/component/itinerary/Navigator.js
deleted file mode 100644
index 70a2a2f490..0000000000
--- a/app/component/itinerary/Navigator.js
+++ /dev/null
@@ -1,169 +0,0 @@
-import PropTypes from 'prop-types';
-import React, { useEffect, useState } from 'react';
-import { FormattedMessage, intlShape } from 'react-intl';
-import { createFragmentContainer, graphql } from 'react-relay';
-import { itineraryShape } from '../../util/shapes';
-import { legTime, legTimeStr } from '../../util/legUtils';
-import Icon from '../Icon';
-import NaviLeg from './NaviLeg';
-
-/*
- const legQuery = graphql`
- query legQuery($id: String!) {
- node(id: $id) {
- ... on Leg {
- start {
- scheduledTime
- estimated {
- time
- }
- }
- end {
- scheduledTime
- estimated {
- time
- }
- }
- }
- }
- }
-`;
-*/
-
-function Navigator({ itinerary, focusToLeg, setNavigation }, context) {
- const [time, setTime] = useState(Date.now());
- const [currentLeg, setCurrentLeg] = useState(null);
-
- // update view after every 5 seconds
- useEffect(() => {
- const interval = setInterval(() => {
- setTime(Date.now());
- }, 5000);
-
- return () => clearInterval(interval);
- }, []);
-
- useEffect(() => {
- const newLeg = itinerary.legs.find(leg => {
- return legTime(leg.start) <= time && time <= legTime(leg.end);
- });
-
- if (newLeg && newLeg !== currentLeg) {
- setCurrentLeg(newLeg);
- focusToLeg(newLeg, false);
- }
- }, [time]);
-
- const first = itinerary.legs[0];
- let info;
- if (time < legTime(first.start)) {
- info = (
-
- );
- } else if (currentLeg) {
- if (!currentLeg.transitLeg) {
- info =
;
- } else {
- info = `Tracking ${currentLeg?.mode} leg`;
- }
- }
- return (
-
-
-
-
-
-
-
{info}
-
- );
-}
-
-Navigator.propTypes = {
- itinerary: itineraryShape.isRequired,
- focusToLeg: PropTypes.func.isRequired,
- setNavigation: PropTypes.func.isRequired,
- /*
- focusToPoint: PropTypes.func.isRequired,
- relayEnvironment: relayShape.isRequired,
- */
-};
-
-Navigator.contextTypes = {
- intl: intlShape.isRequired,
-};
-
-const withRelay = createFragmentContainer(Navigator, {
- itinerary: graphql`
- fragment Navigator_itinerary on Itinerary {
- start
- end
- legs {
- mode
- transitLeg
- start {
- scheduledTime
- estimated {
- time
- }
- }
- end {
- scheduledTime
- estimated {
- time
- }
- }
- legGeometry {
- points
- }
- from {
- lat
- lon
- }
- to {
- lat
- lon
- stop {
- name
- code
- platformCode
- vehicleMode
- }
- vehicleParking {
- name
- }
- vehicleRentalStation {
- name
- rentalNetwork {
- networkId
- }
- availableVehicles {
- total
- }
- }
- rentalVehicle {
- rentalNetwork {
- networkId
- url
- }
- }
- }
- }
- }
- `,
-});
-
-export { Navigator as Component, withRelay as default };
diff --git a/app/component/itinerary/NavigatorIntro/NavigatorIntro.js b/app/component/itinerary/NavigatorIntro/NavigatorIntro.js
new file mode 100644
index 0000000000..2b41622b22
--- /dev/null
+++ b/app/component/itinerary/NavigatorIntro/NavigatorIntro.js
@@ -0,0 +1,94 @@
+import Button from '@hsl-fi/button';
+import { connectToStores } from 'fluxible-addons-react';
+import PropTypes from 'prop-types';
+import React from 'react';
+import { FormattedMessage, intlShape } from 'react-intl';
+import { configShape } from '../../../util/shapes';
+import Icon from '../../Icon';
+import NavigatorIntroFeature from './NavigatorIntroFeature';
+
+const NavigatorIntro = (
+ { logo, onPrimaryClick, onClose, isLoggedIn },
+ context,
+) => {
+ const { config, intl } = context;
+
+ const primaryColor =
+ config.colors?.accessiblePrimary || config.colors?.primary || 'black';
+
+ return (
+
+
+ {logo &&
}
+
+
+
+
+
+ {config.allowLogin && !isLoggedIn && (
+
+
+
+
+ )}
+
+
+
+
+
+
+ );
+};
+
+NavigatorIntro.propTypes = {
+ logo: PropTypes.string,
+ onClose: PropTypes.func.isRequired,
+ onPrimaryClick: PropTypes.func,
+ isLoggedIn: PropTypes.bool,
+};
+
+NavigatorIntro.defaultProps = {
+ logo: undefined,
+ onPrimaryClick: undefined,
+ isLoggedIn: false,
+};
+
+NavigatorIntro.contextTypes = {
+ intl: intlShape.isRequired,
+ config: configShape.isRequired,
+};
+
+export default connectToStores(
+ NavigatorIntro,
+ ['UserStore'],
+ ({ config, getStore }) => ({
+ isLoggedIn:
+ config?.allowLogin && getStore('UserStore')?.getUser()?.sub !== undefined,
+ }),
+);
diff --git a/app/component/itinerary/NavigatorIntro/NavigatorIntroFeature.js b/app/component/itinerary/NavigatorIntro/NavigatorIntroFeature.js
new file mode 100644
index 0000000000..aa2c19569a
--- /dev/null
+++ b/app/component/itinerary/NavigatorIntro/NavigatorIntroFeature.js
@@ -0,0 +1,47 @@
+import PropTypes from 'prop-types';
+import React from 'react';
+import { FormattedMessage } from 'react-intl';
+import Icon from '../../Icon';
+
+const NavigatorIntroFeature = ({
+ icon,
+ iconColor,
+ iconBackgroundColor,
+ header,
+ body,
+}) => {
+ return (
+
+ {icon && (
+
+ )}
+
+
+
+
+
+ );
+};
+
+NavigatorIntroFeature.propTypes = {
+ header: PropTypes.string.isRequired,
+ body: PropTypes.string.isRequired,
+ icon: PropTypes.string,
+ iconColor: PropTypes.string,
+ iconBackgroundColor: PropTypes.string,
+};
+
+NavigatorIntroFeature.defaultProps = {
+ icon: undefined,
+ iconColor: 'black',
+ iconBackgroundColor: 'transparent',
+};
+
+export default NavigatorIntroFeature;
diff --git a/app/component/itinerary/NavigatorIntro/NavigatorIntroModal.js b/app/component/itinerary/NavigatorIntro/NavigatorIntroModal.js
new file mode 100644
index 0000000000..ac12826698
--- /dev/null
+++ b/app/component/itinerary/NavigatorIntro/NavigatorIntroModal.js
@@ -0,0 +1,62 @@
+import Modal from '@hsl-fi/modal';
+import PropTypes from 'prop-types';
+import React, { useEffect, useState } from 'react';
+import { intlShape } from 'react-intl';
+import { configShape } from '../../../util/shapes';
+import NavigatorIntro from './NavigatorIntro';
+
+const NavigatorIntroModal = ({ onPrimaryClick, onClose }, context) => {
+ const { config } = context;
+ const [logo, setLogo] = useState();
+
+ useEffect(() => {
+ if (!config.navigationLogo) {
+ return;
+ }
+
+ const loadLogo = async () => {
+ try {
+ const importedLogo = await import(
+ /* webpackChunkName: "main" */ `../../../configurations/images/${config.navigationLogo}`
+ );
+ setLogo(importedLogo.default);
+ } catch (error) {
+ // eslint-disable-next-line no-console
+ console.error('Error loading logo:', error);
+ }
+ };
+
+ loadLogo();
+ }, []);
+
+ return (
+
+
+
+ );
+};
+
+NavigatorIntroModal.propTypes = {
+ onClose: PropTypes.func.isRequired,
+ onPrimaryClick: PropTypes.func,
+};
+
+NavigatorIntroModal.defaultProps = {
+ onPrimaryClick: undefined,
+};
+
+NavigatorIntroModal.contextTypes = {
+ intl: intlShape.isRequired,
+ config: configShape.isRequired,
+};
+
+export default NavigatorIntroModal;
diff --git a/app/component/itinerary/NavigatorIntro/navigator-intro.scss b/app/component/itinerary/NavigatorIntro/navigator-intro.scss
new file mode 100644
index 0000000000..2e41f20656
--- /dev/null
+++ b/app/component/itinerary/NavigatorIntro/navigator-intro.scss
@@ -0,0 +1,84 @@
+.navigator-intro-modal-overlay {
+ position: fixed;
+ height: 100%;
+ width: 100%;
+ top: 0;
+ left: 0;
+ background-color: rgba(0, 0, 0, 0.2);
+ z-index: 1000; // higher than navbar
+ display: flex;
+ flex-direction: row;
+ align-items: flex-end;
+}
+
+.navigator-intro-modal {
+ position: fixed;
+ background: white;
+ width: 100%;
+ border-radius: 30px 30px 0 0;
+ box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.2);
+}
+
+.navigator-intro-modal-content {
+ display: flex;
+ flex-direction: column;
+ padding: 0 var(--space-s);
+
+ .body {
+ display: flex;
+ flex-direction: column;
+ flex-wrap: wrap;
+ align-items: stretch;
+ padding: var(--space-xl) 0 var(--space-s) 0;
+ gap: var(--space-m);
+
+ h2 {
+ align-self: center;
+ }
+
+ p {
+ margin: unset;
+ }
+
+ .login-tip {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: nowrap;
+ justify-content: center;
+ gap: var(--space-xs);
+ padding: var(--space-xxs) var(--space-l);
+ }
+
+ .navigation-intro-body {
+ display: flex;
+ flex-wrap: wrap;
+ flex-direction: column;
+ align-content: center;
+ align-items: stretch;
+ gap: var(--space-m);
+ padding: 0 var(--space-m);
+
+ .content-box {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ gap: var(--space-s);
+
+ .right-column {
+ display: flex;
+ flex-direction: column;
+ align-items: start;
+ gap: var(--space-xxs);
+ }
+ }
+ }
+ }
+
+ .buttons {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ gap: var(--space-xs);
+ padding: var(--space-s) var(--space-s) var(--space-m) var(--space-s);
+ }
+}
diff --git a/app/component/itinerary/PlanConnection.js b/app/component/itinerary/PlanConnection.js
index 191711fe9a..fe8cc6080d 100644
--- a/app/component/itinerary/PlanConnection.js
+++ b/app/component/itinerary/PlanConnection.js
@@ -59,7 +59,6 @@ const planConnection = graphql`
...ItineraryListContainer_planEdges
node {
...ItineraryDetails_itinerary
- ...Navigator_itinerary
duration
walkDistance
emissionsPerPerson {
@@ -70,10 +69,29 @@ const planConnection = graphql`
mode
distance
transitLeg
+ legId: id
+ interlineWithPreviousLeg
+ duration
+ headsign
+ realtimeState
+ start {
+ scheduledTime
+ estimated {
+ time
+ }
+ }
+ end {
+ scheduledTime
+ estimated {
+ time
+ }
+ }
legGeometry {
points
}
route {
+ shortName
+ color
gtfsId
}
trip {
@@ -88,9 +106,22 @@ const planConnection = graphql`
lon
stop {
gtfsId
+ name
+ lat
+ lon
+ parentStation {
+ name
+ }
}
vehicleRentalStation {
stationId
+ name
+ rentalNetwork {
+ networkId
+ }
+ availableVehicles {
+ total
+ }
}
rentalVehicle {
vehicleId
@@ -99,11 +130,53 @@ const planConnection = graphql`
to {
lat
lon
+ name
stop {
gtfsId
+ name
+ code
+ platformCode
+ vehicleMode
+ zoneId
+ parentStation {
+ name
+ }
+ routes {
+ type
+ }
+ }
+ vehicleParking {
+ name
+ }
+ vehicleRentalStation {
+ name
+ rentalNetwork {
+ networkId
+ }
+ availableVehicles {
+ total
+ }
+ }
+ rentalVehicle {
+ rentalNetwork {
+ networkId
+ url
+ }
+ }
+ }
+ fareProducts {
+ product {
+ name
+ id
+ ... on DefaultFareProduct {
+ price {
+ amount
+ }
+ }
}
}
}
+ start
end
}
}
diff --git a/app/component/itinerary/ScooterLinkContainer.js b/app/component/itinerary/ScooterLinkContainer.js
index d2e39a69c6..1cf967c8cb 100644
--- a/app/component/itinerary/ScooterLinkContainer.js
+++ b/app/component/itinerary/ScooterLinkContainer.js
@@ -40,7 +40,13 @@ function ScooterLinkContainer(
-
+
diff --git a/app/component/itinerary/StartNavi.js b/app/component/itinerary/StartNavi.js
index b3c7fcdcac..f29a104a1c 100644
--- a/app/component/itinerary/StartNavi.js
+++ b/app/component/itinerary/StartNavi.js
@@ -1,38 +1,42 @@
-import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage } from 'react-intl';
+import React from 'react';
+import { FormattedMessage, intlShape } from 'react-intl';
+import { configShape } from '../../util/shapes';
import Icon from '../Icon';
-/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */
-export default function StartNavi({ setNavigation }) {
+const StartNavi = ({ setNavigation }, context) => {
+ const { config, intl } = context;
+
+ const color =
+ config.colors?.accessiblePrimary || config.colors?.primary || 'black';
+
return (
-
+
-
);
-}
+};
StartNavi.propTypes = {
setNavigation: PropTypes.func.isRequired,
};
+
+StartNavi.contextTypes = {
+ config: configShape.isRequired,
+ intl: intlShape.isRequired,
+};
+
+export default StartNavi;
diff --git a/app/component/itinerary/TransitLeg.js b/app/component/itinerary/TransitLeg.js
index 2cfa59d98b..3a83cd6134 100644
--- a/app/component/itinerary/TransitLeg.js
+++ b/app/component/itinerary/TransitLeg.js
@@ -505,7 +505,6 @@ class TransitLeg extends React.Component {
-
+
{
+ const [isPositioningAllowed, setPositioningAllowed] = useState(false);
+ const [realTimeLegs, setRealTimeLegs] = useState(initialLegs);
+ const [time, setTime] = useState(Date.now());
+
+ const enableMapTracking = useCallback(async () => {
+ const permission = await checkPositioningPermission();
+ const isPermissionGranted = permission.state === 'granted';
+ if (isPermissionGranted) {
+ mapRef?.enableMapTracking();
+ }
+ setPositioningAllowed(isPermissionGranted);
+ }, [mapRef]);
+
+ const queryAndMapRealtimeLegs = useCallback(
+ async legs => {
+ if (!legs.length) {
+ return {};
+ }
+
+ const legQueries = legs
+ .filter(leg => leg.transitLeg)
+ .map(leg =>
+ fetchQuery(
+ relayEnvironment,
+ legQuery,
+ { id: leg.legId },
+ { force: true },
+ ).toPromise(),
+ );
+ const responses = await Promise.all(legQueries);
+ return responses.reduce(
+ (map, response) => ({ ...map, [response.leg.legId]: response.leg }),
+ {},
+ );
+ },
+ [relayEnvironment],
+ );
+
+ const fetchAndSetRealtimeLegs = useCallback(async () => {
+ const rtLegMap = await queryAndMapRealtimeLegs(initialLegs).catch(err =>
+ // eslint-disable-next-line no-console
+ console.error('Failed to query and map real time legs', err),
+ );
+
+ const rtLegs = initialLegs.map(l => {
+ const rtLeg = l.legId ? rtLegMap[l.legId] : null;
+ if (rtLeg) {
+ return {
+ ...l,
+ ...rtLeg,
+ to: {
+ ...l.to,
+ vehicleRentalStation: rtLeg.to.vehicleRentalStation,
+ },
+ };
+ }
+ return { ...l };
+ });
+ setRealTimeLegs(rtLegs);
+ }, [initialLegs, queryAndMapRealtimeLegs]);
+
+ useEffect(() => {
+ enableMapTracking();
+ fetchAndSetRealtimeLegs();
+ const interval = setInterval(() => {
+ fetchAndSetRealtimeLegs();
+ setTime(Date.now());
+ }, 10000);
+
+ return () => clearInterval(interval);
+ }, [enableMapTracking, fetchAndSetRealtimeLegs]);
+
+ return { realTimeLegs, time, isPositioningAllowed };
+};
+
+export { useRealtimeLegs };
diff --git a/app/component/itinerary/itinerary-summary.scss b/app/component/itinerary/itinerary-summary.scss
index cf9ed0ec6a..9cdeba0418 100644
--- a/app/component/itinerary/itinerary-summary.scss
+++ b/app/component/itinerary/itinerary-summary.scss
@@ -465,6 +465,13 @@
}
}
+ .ferry-external .itinerary-icon_with-bicycle {
+ color: black;
+ height: 20px;
+ width: 20px;
+ padding-bottom: 4px;
+ }
+
.itinerary-icon_with-bicycle {
color: white;
height: 20px;
@@ -492,6 +499,10 @@
font-size: 15px;
padding: 1px 0 0 0;
}
+
+ .vehicle-number.ferry-external {
+ color: $black;
+ }
}
.leg-duration-container {
diff --git a/app/component/itinerary/itinerary.scss b/app/component/itinerary/itinerary.scss
index 848b819162..5952020926 100644
--- a/app/component/itinerary/itinerary.scss
+++ b/app/component/itinerary/itinerary.scss
@@ -44,6 +44,10 @@ $itinerary-tab-switch-height: 48px;
@include getCircleSvg($ferry-color, $fill);
}
+ &.ferry-external {
+ @include getCircleSvg($external-feed-color, $fill);
+ }
+
&.citybike {
@include getCircleSvg($citybike-color, $fill);
}
@@ -100,9 +104,10 @@ $itinerary-tab-switch-height: 48px;
top: 5px;
.disclaimer-container {
- background-color: rgba(254, 209, 0, 0.1);
- border: 1px solid #fed100;
- border-radius: 3px;
+ background-color: $disclaimer-background-color;
+ font-weight: $font-weight-disclaimer;
+ border: 1px solid $disclaimer-border-color;
+ border-radius: $border-radius-disclaimer;
display: flex;
font-size: $font-size-xsmall;
padding: $padding-medium;
@@ -661,34 +666,6 @@ $itinerary-tab-switch-height: 48px;
margin: 0 10px;
border-bottom: 1px solid #ddd;
- .ticket-type-agency-link {
- flex: 0;
-
- .external-link-container {
- width: 120px;
- text-align: center;
- border-radius: 25px;
- border: 1px solid #888;
- min-height: 28px;
-
- .external-link {
- font-weight: $font-weight-medium;
- color: $primary-color;
- font-size: $font-size-small;
- padding-top: 3px;
- }
-
- &:hover {
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
- cursor: pointer;
- }
- }
-
- @media print {
- display: none;
- }
- }
-
.itinerary-ticket-type,
.itinerary-co2-line {
display: flex;
@@ -710,10 +687,6 @@ $itinerary-tab-switch-height: 48px;
}
}
- .ticket-type-agency-link {
- align-self: center;
- }
-
.ticket-type-zone {
@include font-book;
@@ -776,10 +749,6 @@ $itinerary-tab-switch-height: 48px;
margin: 0;
}
}
-
- .ticket-type-agency-link {
- flex-grow: 0;
- }
}
}
}
@@ -804,6 +773,10 @@ $itinerary-tab-switch-height: 48px;
letter-spacing: -0.03em;
line-height: 22px;
text-align: center;
+
+ &.purchase {
+ color: #ffff;
+ }
}
.desktop {
@@ -855,6 +828,10 @@ $itinerary-tab-switch-height: 48px;
@include setModeCircles($ferry-color);
}
+ .ferry-external {
+ @include setModeCircles($external-feed-color);
+ }
+
&.funicular {
@include setModeCircles($funicular-color);
}
@@ -1767,6 +1744,11 @@ $itinerary-tab-switch-height: 48px;
}
}
+ .scooter-icon .icon-container .icon {
+ background-color: $scooter-color;
+ border-radius: 3px;
+ }
+
.citybike-info {
position: absolute;
bottom: 74px;
@@ -1844,6 +1826,10 @@ $itinerary-tab-switch-height: 48px;
width: auto;
padding: 4px 4px 0 0;
}
+
+ .vehicle-number.ferry-external {
+ color: $black;
+ }
}
.icon {
diff --git a/app/component/itinerary/mobile-ticket-purchase-information.scss b/app/component/itinerary/mobile-ticket-purchase-information.scss
index 737f9ca687..caa8139824 100644
--- a/app/component/itinerary/mobile-ticket-purchase-information.scss
+++ b/app/component/itinerary/mobile-ticket-purchase-information.scss
@@ -1,135 +1,58 @@
-@charset "UTF-8";
-
.itinerary-ticket-information-purchase {
display: flex;
- color: $gray;
+ flex-direction: row;
+ align-items: center;
+ color: #fff;
+ background-color: $primary-color;
font-weight: $font-weight-book;
font-size: $font-size-small;
margin: 0 10px;
+ border-radius: 10px;
+ line-height: 1.1;
- .ticket-type-agency-link {
- flex: 0;
-
- .external-link-container {
- width: 120px;
- text-align: center;
- border-radius: 23px;
- border: 1px solid #888;
- min-height: 26px;
-
- .external-link {
- font-weight: $font-weight-medium;
- color: $primary-color;
- padding-top: 3px;
- font-size: 13px;
- }
-
- &:hover {
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
- cursor: pointer;
- }
- }
-
- @media print {
- display: none;
- }
- }
-
- .itinerary-pinfo-ticket-type {
- .ticket-type-title {
- color: #fff;
- }
-
- .app-link {
- .external-link-container {
- border: 0;
- line-height: 25px;
-
- a.external-link {
- font-size: 16px;
- color: $primary-color;
- }
- }
-
- margin-right: 16px;
- display: flex;
- justify-content: space-evenly;
- align-items: center;
- padding: 3px 10px 5px 10px;
- width: 140px;
- height: 40px;
- right: 15px;
- top: 25px;
- background: #fff;
- font-weight: $font-weight-medium;
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
- border-radius: 20px;
- }
-
- border-radius: 10px;
- display: flex;
- flex-direction: row;
- align-items: center;
- flex-grow: 1;
- flex-shrink: 1;
- white-space: normal;
- line-height: 1.1;
- background-color: $primary-color;
- justify-content: space-between;
-
- .ticket-container {
- display: grid;
- align-items: center;
- justify-content: space-between;
- margin: 11px 6px 9px 15px;
+ .ticket-container {
+ margin: 11px 6px 9px 15px;
+ max-width: 50%;
- @include min-width(tablet) {
- margin-right: 15px;
- }
+ @include min-width(tablet) {
+ margin-right: 15px;
}
.ticket-type-zone {
- @include font-book;
+ @include font-medium;
align-items: center;
- color: $gray;
- display: flex;
- justify-content: space-between;
-
- .fare-container {
- display: flex;
- align-items: center;
- font-size: 1.125rem;
- }
-
- a {
- display: flex;
- align-items: center;
- text-decoration: none;
- font-size: $font-size-normal;
- }
+ font-size: 1.125rem;
.ticket-description {
- display: flex;
- color: #fff;
white-space: nowrap;
+ font-weight: $font-weight-book;
}
+ }
+ }
- .ticket-identifier {
- @include font-medium;
+ .app-link {
+ .external-link-container {
+ border: 0;
+ line-height: 25px;
+ padding: 0 10px;
- color: $black;
- padding-right: 6px;
+ a.external-link {
+ font-size: 16px;
+ color: $primary-color;
}
}
- }
-}
-.zone-ticket {
- &.purchase {
- color: #ffff;
- letter-spacing: -0.03em;
- line-height: 22px;
- text-align: center;
+ position: absolute;
+ right: 24px;
+ display: flex;
+ justify-content: space-evenly;
+ align-items: center;
+ min-width: 140px;
+ height: 40px;
+ background: #fff;
+ font-weight: $font-weight-medium;
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
+ border-radius: 20px;
}
}
diff --git a/app/component/itinerary/navigator.scss b/app/component/itinerary/navigator.scss
index e542973727..f2defb6ce5 100644
--- a/app/component/itinerary/navigator.scss
+++ b/app/component/itinerary/navigator.scss
@@ -1,117 +1,432 @@
.navi-start-container {
+ padding: 0 10px;
+
+ button {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ background-color: $infobox-color-generic-blue;
+ margin: 4px 0 0 0;
+ padding: var(--space-m);
+ gap: var(--space-s);
+ font-weight: normal;
+ border-radius: $border-radius-bigger;
+
+ .content {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ justify-content: center;
+ gap: var(--space-s);
+ }
+
+ span.icon-container {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ :last-of-type {
+ margin-left: auto;
+ }
+ }
+
+ span.icon-container:last-of-type {
+ margin-left: auto;
+ }
+ }
+}
+
+.navitop {
+ margin-bottom: 5px;
+ position: fixed;
+ top: 80px;
+ width: 92%;
+ margin-left: 4%;
+ border-radius: 15px;
+ min-height: 70px;
+ color: black;
+ background-color: white !important;
display: flex;
align-items: center;
- justify-content: space-between;
- height: 56px;
- flex-direction: row;
- background-color: #e5f2fa;
- color: $black;
- margin-right: 10px;
- margin-left: 10px;
- margin-top: 16px;
- border-radius: 10px;
+
+ &.expanded {
+ max-height: 150px;
+ }
+
+ .navitop-arrow {
+ margin-right: var(--space-m);
+
+ .inverted {
+ transform: rotate(180deg);
+ }
+
+ position: absolute;
+ right: 20px;
+ }
+
+ .notifier {
+ margin: 15px 20px 0 20px;
+ width: 100%;
+ color: red;
+ }
+
+ .content {
+ width: 100%;
+
+ .navi-top-card {
+ .main-card {
+ display: flex;
+ flex-direction: row;
+ color: black;
+ margin: var(--space-s) var(--space-m) 0;
+
+ .mode {
+ width: var(--space-l);
+ height: var(--space-l);
+ color: black;
+ margin-right: var(--space-s);
+ margin-top: var(--space-xxs);
+ }
+ }
+
+ .instructions {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ font-size: $font-size-normal;
+ font-weight: $font-weight-medium;
+
+ .destination-header {
+ font-size: $font-size-normal;
+ font-weight: $font-weight-medium;
+ display: flex;
+ }
+
+ .wait-leg {
+ display: flex;
+ align-items: center;
+ margin-top: 3px;
+
+ .headsign {
+ margin-left: 10px;
+ font-size: $font-size-small;
+ font-weight: $font-weight-book;
+ max-width: 120px;
+ }
+
+ .icon {
+ margin-top: 2px;
+ height: 25px;
+ width: 25px;
+ }
+
+ .route-number {
+ min-width: 55px;
+
+ .vcenter-children {
+ .vehicle-number {
+ color: white;
+ font-size: $font-size-large;
+ margin-top: 4px;
+ }
+
+ display: flex;
+ }
+ }
+ }
+ }
+
+ .duration {
+ &.fade-out {
+ animation: fadeOut 3s forwards;
+ }
+
+ font-size: $font-size-xsmall;
+ font-weight: $font-weight-book;
+ display: flex;
+ }
+ }
+
+ .secondary-info {
+ flex-direction: column;
+ max-height: 250px;
+ padding-top: var(--space-xxs);
+
+ .secondary-divider {
+ border: 1px solid #ddd;
+ width: 75%;
+ margin-left: 50px;
+ }
+
+ .secondary-content {
+ display: flex;
+ margin-left: var(--space-xxl);
+ margin-bottom: var(--space-s);
+ margin-top: var(--space-xs);
+ }
+
+ .icon-expand {
+ margin-top: 5px;
+ width: var(--space-m);
+ height: var(--space-m);
+ }
+
+ .destination-icon {
+ margin: 0 10px;
+
+ &.place {
+ fill: $to-color;
+ }
+
+ &.bus-stop {
+ color: $bus-color;
+ }
+
+ &.tram-stop {
+ color: $tram-color;
+ }
+
+ &.subway-stop {
+ color: $metro-color;
+ }
+
+ &.rail-stop {
+ color: $rail-color;
+ }
+
+ &.ferry-stop {
+ color: $ferry-color;
+ }
+
+ &.funicular-stop {
+ color: $funicular-color;
+ }
+
+ &.speedtram-stop {
+ color: $speedtram-color;
+ }
+ }
+
+ .destination {
+ font-weight: $font-weight-book;
+ text-align: left;
+
+ .details {
+ > * {
+ margin-right: var(--space-xs);
+ }
+
+ .address {
+ color: #888;
+ }
+
+ .platform-short {
+ width: unset;
+ }
+
+ .zone-icon-container {
+ margin-top: 2px;
+ }
+
+ display: flex;
+ flex-direction: row;
+ }
+ }
+ }
+ }
}
-.navi-start-leftgroup {
- display: flex;
- flex-direction: row;
- margin-top: 5px;
- margin-left: 10px;
- font-size: $font-size-xsmall;
- font-weight: $font-weight-book;
+@keyframes slideIn {
+ from {
+ transform: translateY(-100%);
+ opacity: 0;
+ }
+
+ to {
+ transform: translateY(0);
+ opacity: 1;
+ }
}
-.navi-start-icon {
- margin-right: 12px;
- margin-left: 5px;
+@keyframes slideOut {
+ from {
+ transform: translateY(0);
+ opacity: 1;
+ }
+
+ to {
+ transform: translateY(-100%);
+ opacity: 0;
+ }
}
-.navi-start-button {
- margin-right: 16px;
- background-color: $primary-color;
- color: $white;
+@keyframes slideOutRight {
+ from {
+ transform: translateX(0);
+ opacity: 1;
+ }
- &:hover {
- background-color: $standalone-btn-hover-color;
- color: $white;
+ to {
+ transform: translateX(-100%);
+ opacity: 0;
+ }
+}
+
+@keyframes fadeOut {
+ from {
+ opacity: 1;
}
- font-size: $font-size-normal;
- border-radius: 20px;
- width: 140px;
- height: 40px;
- text-align: center;
+ to {
+ opacity: 0;
+ }
}
-.navigator {
- .navigator-top-section {
- font-size: $font-size-xsmall;
- text-align: center;
- margin-top: 10px;
+.info-stack {
+ position: fixed;
+ height: 69px;
+ margin-left: 5%;
+ width: 90%;
+ top: 150px;
+
+ &.expanded {
+ top: 180px;
+ }
+
+ &.slide-out {
+ animation: slideOut 0.5s ease-out forwards;
+ pointer-events: none;
+ }
+
+ &.slide-in {
+ animation: slideIn 0.5s ease-out forwards;
+ }
+
+ .info-stack-item {
+ position: relative;
+ border-radius: 15px;
+ display: flex;
+ align-items: center;
+ height: 100%;
+ margin-top: 5px;
+
+ &.info {
+ background-color: #e5f2fa;
+ }
+
+ &.warning {
+ background-color: #fff8e8;
+ }
+
+ &.alert {
+ background-color: #fdf3f6;
+ }
- .close-navigator {
+ &.slide-out-right {
+ animation: slideOutRight 0.5s ease-out forwards;
+ pointer-events: none;
+ }
+
+ .info-close {
position: absolute;
- right: 0;
- padding-right: 20px;
- color: $secondary-color;
+ top: 7px;
+ right: 9px;
+ }
+
+ .info-icon {
+ margin-top: 10px;
+ margin-left: 20px;
+ }
+
+ &.slide-in {
+ animation: slideIn 0.5s ease-out forwards;
+ }
+
+ .navi-info {
+ display: flex;
+ flex-direction: column;
+ margin-left: 25px;
+
+ span:first-child {
+ font-weight: $font-weight-medium;
+ font-size: $font-size-normal;
+ }
+
+ span:last-child {
+ font-size: $font-size-xsmall;
+ }
+ }
+
+ .navi-info-content {
+ display: flex;
+ flex-direction: column;
+ margin-left: 15px;
+
+ span:first-child {
+ font-weight: $font-weight-medium;
+ font-size: $font-size-normal;
+ }
+
+ span:last-child {
+ font-size: $font-size-xsmall;
+ font-weight: $font-weight-book;
+ }
}
}
+}
+.navibottomsheet {
.divider {
width: 100%;
height: 1px;
border-top: 1px solid #ddd;
- margin-bottom: 10px;
margin-top: 10px;
}
- .info {
- margin: 15px 20px 0 20px;
- width: 100%;
-
- .navileg-goto {
- display: flex;
- flex-direction: row;
- align-items: center;
+ .navi-bottom-controls {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+ font-size: $font-size-normal;
+ text-align: center;
+ margin: 20px 24px 10px 24px;
- .navileg-mode {
- width: 32px;
- height: 32px;
- margin-right: 12px;
- }
+ .navi-close-button {
+ border-style: solid;
+ border-width: 1px;
+ border-radius: 20px;
+ width: 100px;
+ height: 40px;
+ text-align: center;
+ background-color: white;
+ border-color: red;
+ color: red;
}
- .navileg-destination {
+ .navi-time {
display: flex;
- flex-direction: row;
- align-items: center;
- margin-top: 10px;
- font-size: $font-size-xsmall;
- font-weight: $font-weight-book;
-
- .navi-left-bar {
- margin-left: 10px;
- margin-right: 10px;
- width: 8px;
- height: 80px;
- border-radius: 4px;
- background-color: #e5f2fa;
- }
+ flex-direction: column;
- .navileg-destination-details {
- display: flex;
- flex-direction: column;
+ .navi-daytime {
+ font-size: $font-size-xsmall;
+ font-weight: $font-weight-book;
+ }
+ }
- .navi-destination-icon {
- width: 24px;
- height: 24px;
- }
+ .navi-ticket-button {
+ border-radius: 20px;
+ width: 100px;
+ height: 40px;
+ text-align: center;
+ margin-left: 16px;
+ background-color: $primary-color;
+ color: white;
- .navileg-focus {
- font-weight: $font-weight-medium;
- color: $primary-color;
- margin-top: 8px;
- }
+ a {
+ color: white;
+ text-decoration: none;
}
}
}
diff --git a/app/component/itinerary/queries/LegQuery.js b/app/component/itinerary/queries/LegQuery.js
new file mode 100644
index 0000000000..94dbc7f4d5
--- /dev/null
+++ b/app/component/itinerary/queries/LegQuery.js
@@ -0,0 +1,32 @@
+import { graphql } from 'react-relay';
+
+const legQuery = graphql`
+ query LegQuery($id: String!) {
+ leg(id: $id) {
+ legId: id
+ start {
+ scheduledTime
+ estimated {
+ time
+ }
+ }
+ end {
+ scheduledTime
+ estimated {
+ time
+ }
+ }
+
+ to {
+ vehicleRentalStation {
+ availableVehicles {
+ total
+ }
+ }
+ }
+ realtimeState
+ }
+ }
+`;
+
+export { legQuery };
diff --git a/app/component/map/ItineraryLine.js b/app/component/map/ItineraryLine.js
index 1d10b7046e..187ad0c624 100644
--- a/app/component/map/ItineraryLine.js
+++ b/app/component/map/ItineraryLine.js
@@ -69,7 +69,14 @@ class ItineraryLine extends React.Component {
}
const nextLeg = this.props.legs[i + 1];
- let mode = getRouteMode({ mode: leg.mode, type: leg.route?.type });
+ let mode = getRouteMode(
+ {
+ mode: leg.mode,
+ type: leg.route?.type,
+ gtfsId: leg.route?.gtfsId,
+ },
+ this.context.config,
+ );
const [interliningLines, interliningLegs] = getInterliningLegs(
this.props.legs,
@@ -260,6 +267,7 @@ export default createFragmentContainer(ItineraryLine, {
transitLeg
interlineWithPreviousLeg
route {
+ gtfsId
shortName
color
type
diff --git a/app/component/map/Line.js b/app/component/map/Line.js
index 32bee4a443..8711808464 100644
--- a/app/component/map/Line.js
+++ b/app/component/map/Line.js
@@ -99,6 +99,10 @@ export default class Line extends React.Component {
if (this.props.mode === 'walk') {
legWeight *= 0.8;
}
+ if (this.props.mode === 'ferry-external') {
+ haloWeight *= 0.6;
+ legWeight *= 0.6;
+ }
if (this.props.passive) {
haloWeight *= 0.5;
legWeight *= 0.5;
diff --git a/app/component/map/Map.js b/app/component/map/Map.js
index 87cf694866..f11de88043 100644
--- a/app/component/map/Map.js
+++ b/app/component/map/Map.js
@@ -21,8 +21,6 @@ import {
import PositionMarker from './PositionMarker';
import VectorTileLayerContainer from './tile-layer/VectorTileLayerContainer';
import { boundWithMinimumArea } from '../../util/geo-utils';
-import { isDebugTiles } from '../../util/browser';
-import { BreakpointConsumer } from '../../util/withBreakpoint';
import events from '../../util/events';
import { getLayerBaseUrl } from '../../util/mapLayerUtils';
import GeoJSON from './GeoJSON';
@@ -30,7 +28,7 @@ import { mapLayerShape } from '../../store/MapLayerStore';
const zoomOutText = ``;
const zoomInText = ``;
-
+const EXTRA_PADDING = 100;
/* foo-eslint-disable react/sort-comp */
const startClient = context => {
@@ -64,9 +62,6 @@ export default class Map extends React.Component {
lon: PropTypes.number,
zoom: PropTypes.number,
bounds: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.number)),
- boundsOptions: PropTypes.shape({
- paddingBottomRight: PropTypes.arrayOf(PropTypes.number),
- }),
hilightedStops: PropTypes.arrayOf(PropTypes.string),
stopsToShow: PropTypes.arrayOf(PropTypes.string),
objectsToHide: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)),
@@ -75,29 +70,29 @@ export default class Map extends React.Component {
leafletEvents: PropTypes.object,
leafletObjs: PropTypes.arrayOf(PropTypes.node),
mergeStops: PropTypes.bool,
+ leafletMapRef: PropTypes.func,
mapRef: PropTypes.func,
locationPopup: PropTypes.string,
onSelectLocation: PropTypes.func,
- mapBottomPadding: PropTypes.number,
- buttonBottomPadding: PropTypes.number,
+ bottomPadding: PropTypes.number,
bottomButtons: PropTypes.node,
topButtons: PropTypes.node,
// eslint-disable-next-line
geoJson: PropTypes.object,
mapLayers: mapLayerShape,
+ breakpoint: PropTypes.string,
};
static defaultProps = {
animate: true,
mapRef: null,
+ leafletMapRef: null,
lat: undefined,
lon: undefined,
zoom: undefined,
bounds: undefined,
locationPopup: 'reversegeocoding',
- boundsOptions: {},
- mapBottomPadding: 0,
- buttonBottomPadding: 0,
+ bottomPadding: undefined,
bottomButtons: null,
topButtons: null,
mergeStops: true,
@@ -109,6 +104,7 @@ export default class Map extends React.Component {
leafletEvents: undefined,
leafletObjs: undefined,
objectsToHide: { vehicleRentalStations: [] },
+ breakpoint: undefined,
};
static contextTypes = {
@@ -121,6 +117,20 @@ export default class Map extends React.Component {
constructor(props) {
super(props);
this.state = { zoom: 14 };
+ if (props.mapRef) {
+ props.mapRef(this);
+ }
+ if (this.props.breakpoint === 'large') {
+ this.boundsOptions = {
+ paddingTopLeft: [0, EXTRA_PADDING],
+ paddingBottomRight: [0, (window.innerHeight - 64) / 2],
+ };
+ } else {
+ this.boundsOptions = {
+ paddingTopLeft: [0, 0],
+ paddingBottomRight: [0, 0],
+ };
+ }
}
updateZoom = () => {
@@ -136,6 +146,9 @@ export default class Map extends React.Component {
startClient(this.context);
}
this.updateZoom();
+ if (this.props.mapRef) {
+ this.props.mapRef(this);
+ }
}
// eslint-disable-next-line camelcase
@@ -156,11 +169,13 @@ export default class Map extends React.Component {
componentDidUpdate() {
// move leaflet attribution control elements according to given padding
// leaflet api doesn't allow controlling element position so have to use this hack
- const bottomControls = document.getElementsByClassName('leaflet-bottom');
- Array.prototype.forEach.call(bottomControls, elem => {
- // eslint-disable-next-line no-param-reassign
- elem.style.transform = `translate(0, -${this.props.buttonBottomPadding}px)`;
- });
+ if (this.props.bottomPadding !== undefined) {
+ const bottomControls = document.getElementsByClassName('leaflet-bottom');
+ Array.prototype.forEach.call(bottomControls, elem => {
+ // eslint-disable-next-line no-param-reassign
+ elem.style.transform = `translate(0, -${this.props.bottomPadding}px)`;
+ });
+ }
}
componentWillUnmount() {
@@ -175,26 +190,43 @@ export default class Map extends React.Component {
this.updateZoom();
};
+ // eslint-disable-next-line react/no-unused-class-component-methods
+ setBottomPadding = padding => {
+ this.boundsOptions.paddingBottomRight = [
+ 0,
+ Math.max(
+ Math.min(padding, window.innerHeight - 2 * EXTRA_PADDING),
+ EXTRA_PADDING,
+ ),
+ ];
+ };
+
render() {
const {
zoom,
lat,
lon,
- boundsOptions,
locationPopup,
onSelectLocation,
leafletObjs,
geoJson,
mapLayers,
+ bottomPadding,
} = this.props;
const { config } = this.context;
const naviProps = {}; // these define map center and zoom
+ if (bottomPadding !== undefined) {
+ this.boundsOptions.paddingBottomRight = [
+ 0,
+ Math.min(bottomPadding + EXTRA_PADDING, window.innerHeight - 60),
+ ];
+ }
if (this.props.bounds) {
// bounds overrule center & zoom
naviProps.bounds = boundWithMinimumArea(this.props.bounds); // validate
} else if (lat && lon) {
- if (this.props.mapBottomPadding && this.props.mapBottomPadding > 0) {
+ if (this.boundsOptions.paddingBottomRight !== undefined) {
// bounds fitting can take account the wanted padding, so convert to bounds
naviProps.bounds = boundWithMinimumArea([[lat, lon]], zoom);
} else {
@@ -227,12 +259,7 @@ export default class Map extends React.Component {
return null;
}
- if (this.props.mapBottomPadding) {
- boundsOptions.paddingBottomRight = [0, this.props.mapBottomPadding];
- }
- const mapBaseUrl =
- (isDebugTiles && `${config.URL.OTP}inspector/tile/traversal/`) ||
- getLayerBaseUrl(config.URL.MAP, this.props.lang);
+ const mapBaseUrl = getLayerBaseUrl(config.URL.MAP, this.props.lang);
const mapUrl = config.hasAPISubscriptionQueryParameter
? `${mapBaseUrl}{z}/{x}/{y}{size}.png?${config.API_SUBSCRIPTION_QUERY_PARAMETER_NAME}=${config.API_SUBSCRIPTION_TOKEN}`
: `${mapBaseUrl}{z}/{x}/{y}{size}.png`;
@@ -294,7 +321,7 @@ export default class Map extends React.Component {
{this.props.bottomButtons}
@@ -306,8 +333,8 @@ export default class Map extends React.Component {
keyboard={false}
ref={el => {
this.map = el;
- if (this.props.mapRef) {
- this.props.mapRef(el);
+ if (this.props.leafletMapRef) {
+ this.props.leafletMapRef(el);
}
}}
minZoom={config.map.minZoom}
@@ -315,7 +342,7 @@ export default class Map extends React.Component {
zoomControl={false}
attributionControl={false}
animate={this.props.animate}
- boundsOptions={boundsOptions}
+ boundsOptions={this.boundsOptions}
{...leafletEvents}
onPopupopen={onPopupopen}
closePopupOnClick={false}
@@ -325,51 +352,41 @@ export default class Map extends React.Component {
tileSize={config.map.tileSize || 256}
zoomOffset={config.map.zoomOffset || 0}
updateWhenIdle={false}
- size={
- config.map.useRetinaTiles && L.Browser.retina && !isDebugTiles
- ? '@2x'
- : ''
- }
+ size={config.map.useRetinaTiles && L.Browser.retina ? '@2x' : ''}
minZoom={config.map.minZoom}
maxZoom={config.map.maxZoom}
attribution={attribution}
/>
-
- {breakpoint =>
- attribution && (
-
- )
- }
-
+ {attribution && (
+
+ )}
{config.map.showScaleBar && (
)}
-
- {breakpoint =>
- breakpoint === 'large' &&
- config.map.showZoomControl && (
-
- )
- }
-
+ {this.props.breakpoint === 'large' &&
+ config.map.showZoomControl && (
+
+ )}
{leafletObjNew}
diff --git a/app/component/map/MapBottomsheetContext.js b/app/component/map/MapBottomsheetContext.js
index 640f66ec63..f5acb150a3 100644
--- a/app/component/map/MapBottomsheetContext.js
+++ b/app/component/map/MapBottomsheetContext.js
@@ -1,5 +1,4 @@
-import React from 'react';
+import { createContext } from 'react';
-const context = React.createContext({ paddingBottomRight: [0, 0] });
-
-export default context;
+// value 0 = default map bottom padding, used in desktop
+export default createContext(0);
diff --git a/app/component/map/MapContainer.js b/app/component/map/MapContainer.js
index 003bd9c8ea..3fb6e0daf7 100644
--- a/app/component/map/MapContainer.js
+++ b/app/component/map/MapContainer.js
@@ -1,30 +1,22 @@
import PropTypes from 'prop-types';
-import React from 'react';
+import React, { useContext } from 'react';
import connectToStores from 'fluxible-addons-react/connectToStores';
import MapBottomsheetContext from './MapBottomsheetContext';
import withGeojsonObjects from './withGeojsonObjects';
-
import LazilyLoad, { importLazy } from '../LazilyLoad';
const mapModules = {
Map: () => importLazy(import(/* webpackChunkName: "map" */ './Map')),
};
-function MapContainer({ className, children, ...props }) {
+function MapContainer({ className, children, bottomPadding, ...props }) {
+ const contextPadding = useContext(MapBottomsheetContext);
return (
{({ Map }) => {
return (
-
- {context => (
-
- )}
-
+
);
}}
@@ -36,15 +28,13 @@ function MapContainer({ className, children, ...props }) {
MapContainer.propTypes = {
className: PropTypes.string,
children: PropTypes.node,
- boundsOptions: PropTypes.shape({
- paddingBottomRight: PropTypes.arrayOf(PropTypes.number),
- }),
+ bottomPadding: PropTypes.number,
};
MapContainer.defaultProps = {
className: '',
children: undefined,
- boundsOptions: {},
+ bottomPadding: undefined,
};
export default connectToStores(
diff --git a/app/component/map/MapWithTracking.js b/app/component/map/MapWithTracking.js
index 14928f8f7c..8551ebbed8 100644
--- a/app/component/map/MapWithTracking.js
+++ b/app/component/map/MapWithTracking.js
@@ -87,6 +87,7 @@ class MapWithTrackingStateHandler extends React.Component {
breakpoint: PropTypes.string.isRequired,
lang: PropTypes.string.isRequired,
topButtons: PropTypes.node,
+ bottomPadding: PropTypes.number,
};
static defaultProps = {
@@ -108,6 +109,7 @@ class MapWithTrackingStateHandler extends React.Component {
leafletEvents: {},
mapLayerOptions: null,
topButtons: null,
+ bottomPadding: undefined,
};
constructor(props) {
@@ -130,15 +132,11 @@ class MapWithTrackingStateHandler extends React.Component {
// eslint-disable-next-line camelcase
UNSAFE_componentWillReceiveProps(newProps) {
- let newState;
-
- if (newProps.mapTracking && !this.state.mapTracking) {
- newState = { ...newState, mapTracking: true };
- } else if (newProps.mapTracking === false && this.state.mapTracking) {
- newState = { ...newState, mapTracking: false };
- }
- if (newState) {
- this.setState(newState);
+ if (
+ newProps.mapTracking !== undefined &&
+ newProps.mapTracking !== this.state.mapTracking
+ ) {
+ this.setState({ mapTracking: newProps.mapTracking });
}
}
@@ -151,13 +149,23 @@ class MapWithTrackingStateHandler extends React.Component {
}
};
+ setMap = map => {
+ this.map = map;
+ };
+
enableMapTracking = () => {
if (!this.props.position.hasLocation) {
this.context.executeAction(startLocationWatch);
}
- this.setState({
- mapTracking: true,
- });
+ if (!this.state.mapTracking) {
+ // enabling tracking will trigger same navigation events as user navigation
+ // this hack prevents those events from clearing tracking
+ this.ignoreNavigation = true;
+ setTimeout(() => {
+ this.ignoreNavigation = false;
+ }, 500);
+ this.setState({ mapTracking: true });
+ }
if (this.props.onMapTracking) {
this.props.onMapTracking();
}
@@ -224,6 +232,12 @@ class MapWithTrackingStateHandler extends React.Component {
};
};
+ // eslint-disable-next-line react/no-unused-class-component-methods
+ setBottomPadding = padding => {
+ this.map?.setBottomPadding(padding);
+ this.setState({ bottomPadding: padding });
+ };
+
render() {
const {
lat,
@@ -303,8 +317,6 @@ class MapWithTrackingStateHandler extends React.Component {
? this.context.intl.formatMessage({ id: 'tracking-button-on' })
: this.context.intl.formatMessage({ id: 'tracking-button-off' });
- const iconColor = this.state.mapTracking ? '#ff0000' : '#78909c';
-
const mergedMapLayers = this.getMapLayers();
return (
<>
@@ -321,7 +333,9 @@ class MapWithTrackingStateHandler extends React.Component {
}}
{...this.naviProps}
{...rest}
- mapRef={this.setMapElementRef}
+ leafletMapRef={this.setMapElementRef}
+ mapRef={this.setMap}
+ breakpoint={this.props.breakpoint}
bottomButtons={
{config.map.showLayerSelector && (
@@ -344,18 +358,11 @@ class MapWithTrackingStateHandler extends React.Component {
{
if (this.state.mapTracking) {
this.disableMapTracking();
} else {
- // enabling tracking will trigger same navigation events as user navigation
- // this hack prevents those events from clearing tracking
- this.ignoreNavigation = true;
- setTimeout(() => {
- this.ignoreNavigation = false;
- }, 500);
this.enableMapTracking();
}
}}
@@ -363,6 +370,7 @@ class MapWithTrackingStateHandler extends React.Component {
/>
}
+ bottomPadding={this.state.bottomPadding}
topButtons={topButtons}
mapLayers={mergedMapLayers}
>
diff --git a/app/component/map/StopsNearYouMap.js b/app/component/map/StopsNearYouMap.js
index 64ca638c3a..cf6588a70b 100644
--- a/app/component/map/StopsNearYouMap.js
+++ b/app/component/map/StopsNearYouMap.js
@@ -26,12 +26,10 @@ import {
import ItineraryLine from './ItineraryLine';
import {
locationShape,
- mapLayerOptionsShape,
relayShape,
configShape,
stopShape,
} from '../../util/shapes';
-import { mapLayerShape } from '../../store/MapLayerStore';
import Loading from '../Loading';
import LazilyLoad, { importLazy } from '../LazilyLoad';
import { getDefaultNetworks } from '../../util/vehicleRentalUtils';
@@ -155,12 +153,9 @@ function StopsNearYouMap(
favouriteIds,
relay,
position,
- onEndNavigation,
- onMapTracking,
- mapLayers,
- mapLayerOptions,
showWalkRoute,
prioritizedStopsNearYou,
+ ...rest
},
{ ...context },
) {
@@ -458,13 +453,10 @@ function StopsNearYouMap(
stopsToShow: mode === 'FAVORITE' ? Array.from(favouriteIds) : undefined,
hilightedStops: hilightedStops(),
mergeStops: false,
- mapLayers,
- mapLayerOptions,
bounds,
leafletObjs,
breakpoint,
- onEndNavigation,
- onMapTracking,
+ ...rest,
};
if (breakpoint === 'large') {
@@ -499,15 +491,11 @@ StopsNearYouMap.propTypes = {
prioritizedStopsNearYou: PropTypes.arrayOf(stopShape),
// eslint-disable-next-line
favouriteIds: PropTypes.object,
- mapLayers: mapLayerShape.isRequired,
- mapLayerOptions: mapLayerOptionsShape,
position: locationShape.isRequired,
match: matchShape.isRequired,
breakpoint: PropTypes.string.isRequired,
language: PropTypes.string.isRequired,
relay: relayShape.isRequired,
- onEndNavigation: PropTypes.func,
- onMapTracking: PropTypes.func,
loading: PropTypes.bool,
showWalkRoute: PropTypes.bool,
};
@@ -518,9 +506,6 @@ StopsNearYouMap.defaultProps = {
loading: false,
favouriteIds: undefined,
prioritizedStopsNearYou: [],
- mapLayerOptions: undefined,
- onEndNavigation: undefined,
- onMapTracking: undefined,
};
StopsNearYouMap.contextTypes = {
diff --git a/app/component/map/map.scss b/app/component/map/map.scss
index 9ed66118af..8eab8c528f 100644
--- a/app/component/map/map.scss
+++ b/app/component/map/map.scss
@@ -830,6 +830,10 @@ div.origin-popup {
min-width: 50px;
height: 18px;
+ &.only-icon {
+ min-width: 0;
+ }
+
.wide {
min-width: 64px;
}
@@ -862,6 +866,10 @@ div.origin-popup {
color: $white;
}
+ .map-route-number.ferry-external {
+ color: $black;
+ }
+
&::before {
content: '';
width: 0;
@@ -878,12 +886,20 @@ div.origin-popup {
}
}
+.map .arrow-bottomLeft.only-icon div::before {
+ border-right: 10px solid transparent;
+}
+
.map .arrow-bottomRight {
display: flex;
align-items: center;
min-width: 50px;
height: 18px;
+ &.only-icon {
+ min-width: 0;
+ }
+
.wide {
min-width: 64px;
}
@@ -916,6 +932,10 @@ div.origin-popup {
color: $white;
}
+ .map-route-number.ferry-external {
+ color: $black;
+ }
+
&::before {
content: '';
width: 0;
@@ -931,12 +951,20 @@ div.origin-popup {
}
}
+.map .arrow-bottomRight.only-icon div::before {
+ border-right: 9px solid transparent;
+}
+
.map .arrow-topRight {
display: flex;
align-items: center;
min-width: 50px;
height: 18px;
+ &.only-icon {
+ min-width: 0;
+ }
+
.wide {
min-width: 64px;
}
@@ -969,6 +997,10 @@ div.origin-popup {
color: $white;
}
+ .map-route-number.ferry-external {
+ color: $black;
+ }
+
&::before {
content: '';
width: 0;
@@ -985,12 +1017,21 @@ div.origin-popup {
}
}
+.map .arrow-topRight.only-icon div::before {
+ border-left: 15px solid transparent;
+ right: 11px;
+}
+
.map .arrow-topLeft {
display: flex;
align-items: center;
min-width: 50px;
height: 18px;
+ &.only-icon {
+ min-width: 0;
+ }
+
.wide {
min-width: 64px;
}
@@ -1023,6 +1064,10 @@ div.origin-popup {
color: $white;
}
+ .map-route-number.ferry-external {
+ color: $black;
+ }
+
&::before {
content: '';
width: 0;
@@ -1045,6 +1090,11 @@ div.origin-popup {
min-width: 50px;
height: 18px;
+ &.only-icon {
+ min-width: 0;
+ align-items: normal;
+ }
+
.wide {
min-width: 64px;
}
@@ -1210,6 +1260,10 @@ div.origin-popup {
padding-right: 3px;
color: $white;
}
+
+ .map-route-number.ferry-external {
+ color: $black;
+ }
}
}
@@ -1250,6 +1304,14 @@ div.origin-popup {
stroke-opacity: 0.5;
}
+.map-line.ferry-external.leg {
+ color: $external-feed-map-color;
+}
+
+.map-line.scooter.leg {
+ color: $scooter-map-color;
+}
+
/* Fix to default leaflet behavior */
.leaflet-map-pane svg {
position: relative;
diff --git a/app/component/map/non-tile-layer/LegMarker.js b/app/component/map/non-tile-layer/LegMarker.js
index 92cf3672cd..2683d87d75 100644
--- a/app/component/map/non-tile-layer/LegMarker.js
+++ b/app/component/map/non-tile-layer/LegMarker.js
@@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import Icon from '../../Icon';
import { isBrowser } from '../../../util/browser';
-import { legShape } from '../../../util/shapes';
+import { legShape, configShape } from '../../../util/shapes';
/* eslint-disable global-require */
@@ -28,10 +28,26 @@ class LegMarker extends React.Component {
style: undefined,
};
+ static contextTypes = {
+ config: configShape.isRequired,
+ };
+
// An arrow marker will be displayed if the normal marker can't fit
getLegMarker() {
const color = this.props.color ? this.props.color : 'currentColor';
const className = this.props.wide ? 'wide' : '';
+ // Do not display route number if it is an external route and the route number is empty.
+ const displayRouteNumber = !(
+ this.context.config.externalFeedIds !== undefined &&
+ this.props.mode.includes('external') &&
+ this.props.leg.name === ''
+ );
+ const routeNumber = displayRouteNumber
+ ? `
${
+ this.props.leg.name
+ }
+
${this.props.leg.name.toLowerCase()}`
+ : '';
return (
${
- this.props.leg.name
- }
- ${this.props.leg.name.toLowerCase()}
+ ${routeNumber}
`,
className: `${
this.props.style ? `arrow-${this.props.style}` : 'legmarker'
- } ${this.props.mode}`,
+ } ${this.props.mode} ${displayRouteNumber ? '' : 'only-icon'}`,
iconSize: null,
})}
zIndexOffset={this.props.zIndexOffset}
diff --git a/app/component/map/popups/LocationPopup.js b/app/component/map/popups/LocationPopup.js
index ffee0bdff8..b953378df5 100644
--- a/app/component/map/popups/LocationPopup.js
+++ b/app/component/map/popups/LocationPopup.js
@@ -134,7 +134,9 @@ class LocationPopup extends React.Component {
return (
- {zoneId && }
+ {zoneId && zoneId !== place && (
+
+ )}
{(this.props.locationPopup === 'all' ||
this.props.locationPopup === 'origindestination') && (
diff --git a/app/component/map/tile-layer/RentalVehicles.js b/app/component/map/tile-layer/RentalVehicles.js
index 8b15d5f442..fbb7cc16e0 100644
--- a/app/component/map/tile-layer/RentalVehicles.js
+++ b/app/component/map/tile-layer/RentalVehicles.js
@@ -38,7 +38,10 @@ class RentalVehicles {
fetchAndDraw = lang => {
const zoomedIn =
this.tile.coords.z > this.config.vehicleRental.cityBikeSmallIconZoom;
- const baseUrl = getLayerBaseUrl(this.config.URL.RENTAL_VEHICLE_MAP, lang);
+ const baseUrl = getLayerBaseUrl(
+ this.config.URL.REALTIME_RENTAL_VEHICLE_MAP,
+ lang,
+ );
const tileUrl = `${baseUrl}${
this.tile.coords.z + (this.tile.props.zoomOffset || 0)
}/${this.tile.coords.x}/${this.tile.coords.y}.pbf`;
@@ -54,7 +57,7 @@ class RentalVehicles {
const vt = new VectorTile(new Protobuf(buf));
this.features = [];
- const layer = vt.layers.rentalVehicles;
+ const layer = vt.layers.realtimeRentalVehicles;
const settings = getSettings(this.config);
const { scooterNetworks } = settings;
const scooterIconPrefix = `icon-icon_scooter`;
@@ -166,7 +169,8 @@ class RentalVehicles {
shouldShowRentalVehicle = (id, network, pickupAllowed, formFactor) =>
(!this.tile.stopsToShow || this.tile.stopsToShow.includes(id)) &&
(!network ||
- (this.config.vehicleRental.networks[network].enabled &&
+ (this.config.vehicleRental.networks[network] &&
+ this.config.vehicleRental.networks[network].enabled &&
this.config.vehicleRental.networks[network].showRentalVehicles &&
this.config.vehicleRental.networks[network].type ===
formFactor.toLowerCase())) &&
diff --git a/app/component/rental-vehicle-content.scss b/app/component/rental-vehicle-content.scss
index fc2c84168c..08e01a6c92 100644
--- a/app/component/rental-vehicle-content.scss
+++ b/app/component/rental-vehicle-content.scss
@@ -40,6 +40,7 @@
.icon-container {
.icon {
width: 2.25rem;
+ background-color: $scooter-color;
}
}
}
@@ -186,11 +187,16 @@
}
}
+ .scooter-icon .icon-container .icon {
+ background-color: $scooter-color;
+ border-radius: 3px;
+ }
+
.citybike-info {
position: absolute;
bottom: 74px;
}
- } // test end here....
+ }
}
}
@@ -252,11 +258,15 @@
.icon-container .icon {
width: 48px;
height: 48px;
+ background-color: $scooter-color;
+ border-radius: 5px;
}
.back-button .icon-container .icon {
width: 1.3em;
height: 1.3em;
+ background-color: transparent;
+ border-radius: 0;
}
}
}
diff --git a/app/component/routepage/FuzzyTripLink.js b/app/component/routepage/FuzzyTripLink.js
index 09f0f8cdb9..eca5b10aad 100644
--- a/app/component/routepage/FuzzyTripLink.js
+++ b/app/component/routepage/FuzzyTripLink.js
@@ -133,11 +133,12 @@ FuzzyTripLink.propTypes = {
trip: tripShape,
vehicle: vehicleShape.isRequired,
stopName: PropTypes.string.isRequired,
- nextStopName: PropTypes.string.isRequired,
+ nextStopName: PropTypes.string,
};
FuzzyTripLink.defaultProps = {
trip: undefined,
+ nextStopName: undefined,
};
FuzzyTripLink.contextTypes = {
diff --git a/app/configurations/config.default.js b/app/configurations/config.default.js
index 68611b7dd8..90026414cb 100644
--- a/app/configurations/config.default.js
+++ b/app/configurations/config.default.js
@@ -10,7 +10,7 @@ const MAP_URL =
process.env.MAP_URL || 'https://digitransit-dev-cdn-origin.azureedge.net';
const MAP_VERSION = process.env.MAP_VERSION || 'v2';
const POI_MAP_PREFIX = `${MAP_URL}/map/v3/finland`;
-const OTP_URL = process.env.OTP_URL || `${API_URL}/routing/v2/routers/finland/`;
+const OTP_URL = process.env.OTP_URL || `${API_URL}/routing/v2/finland/`;
const STOP_TIMETABLES_URL =
process.env.STOP_TIMETABLES_URL || 'https://dev.kartat.hsl.fi';
const APP_PATH = process.env.APP_CONTEXT || '';
@@ -60,9 +60,6 @@ export default {
REALTIME_RENTAL_STATION_MAP: {
default: `${POI_MAP_PREFIX}/fi/realtimeRentalStations/`,
},
- RENTAL_VEHICLE_MAP: {
- default: `${POI_MAP_PREFIX}/fi/rentalVehicles/`,
- },
REALTIME_RENTAL_VEHICLE_MAP: {
default: `${POI_MAP_PREFIX}/fi/realtimeRentalVehicles/`,
},
@@ -349,6 +346,9 @@ export default {
},
maxNearbyRentalVehicleAmount: 5,
maxDistanceToRentalVehiclesInMeters: 100,
+ maxMinutesToRentalJourneyStart: 60,
+ maxMinutesToRentalJourneyEnd: 720,
+ allowDirectScooterJourneys: false,
},
// Lowest level for stops and terminals are rendered
@@ -371,6 +371,7 @@ export default {
colors: {
primary: '#000F94',
+ backgroundInfo: '#e5f2fa',
iconColors: {
'mode-airplane': '#0046ad',
'mode-bus': '#0088ce',
@@ -379,7 +380,7 @@ export default {
'mode-rail': '#af8dbc',
'mode-ferry': '#247C7B',
'mode-citybike': '#f2b62d',
- 'mode-scooter': '#BABABA',
+ 'mode-scooter': '#C5CAD2',
},
},
iconModeSet: 'digitransit',
@@ -835,4 +836,5 @@ export default {
},
},
],
+ navigation: false,
};
diff --git a/app/configurations/config.hameenlinna.js b/app/configurations/config.hameenlinna.js
index 3d19b84492..9cf473d05e 100644
--- a/app/configurations/config.hameenlinna.js
+++ b/app/configurations/config.hameenlinna.js
@@ -11,14 +11,14 @@ export default configMerger(walttiConfig, {
CONFIG,
appBarLink: {
- name: 'Hämeenlinna',
- href: 'http://www.hameenlinna.fi/joukkoliikenne/',
+ name: 'Hämeenlinnan joukkoliikenne',
+ href: 'http://hameenlinnanjoukkoliikenne.fi/',
},
colors: {
- primary: '#F76013',
+ primary: 'rgb(196,40,31)',
iconColors: {
- 'mode-bus': '#F76013',
+ 'mode-bus': 'rgb(196,40,31)',
},
},
diff --git a/app/configurations/config.hsl.js b/app/configurations/config.hsl.js
index 9006b58903..70973fff12 100644
--- a/app/configurations/config.hsl.js
+++ b/app/configurations/config.hsl.js
@@ -3,7 +3,7 @@ import { BIKEAVL_WITHMAX } from '../util/vehicleRentalUtils';
const CONFIG = 'hsl';
const API_URL = process.env.API_URL || 'https://dev-api.digitransit.fi';
-const OTP_URL = process.env.OTP_URL || `${API_URL}/routing/v2/routers/hsl/`;
+const OTP_URL = process.env.OTP_URL || `${API_URL}/routing/v2/hsl/`;
const MAP_URL =
process.env.MAP_URL || 'https://digitransit-dev-cdn-origin.azureedge.net';
const POI_MAP_PREFIX = `${MAP_URL}/map/v3/hsl`;
@@ -12,10 +12,15 @@ const HSLTimetables = require('./timetableConfigUtils').default.HSL;
const HSLParkAndRideUtils = require('../util/ParkAndRideUtils').default.HSL;
const rootLink = process.env.ROOTLINK || 'https://test.hslfi.hsldev.com';
-const BANNER_URL =
- process.env.BANNER_URL ||
- 'https://cms-test.hslfi.hsldev.com/api/v1/banners?site=JourneyPlanner';
-// 'https://content.hsl.fi/api/v1/banners?site=JourneyPlanner';
+
+const BANNER_URL = process.env.CONTENT_DOMAIN
+ ? `${process.env.CONTENT_DOMAIN}/api/v1/banners?site=JourneyPlanner`
+ : process.env.BANNER_URL ||
+ 'https://cms-test.hslfi.hsldev.com/api/v1/banners?site=JourneyPlanner';
+const SUGGESTION_URL = process.env.CONTENT_DOMAIN
+ ? `${process.env.CONTENT_DOMAIN}/api/v1/search/suggestions`
+ : 'https://content.hsl.fi/api/v1/search/suggestions'; // old url
+
const localStorageEmitter =
process.env.USE_EMITTER && rootLink + '/local-storage-emitter';
@@ -34,9 +39,6 @@ export default {
REALTIME_RENTAL_STATION_MAP: {
default: `${POI_MAP_PREFIX}/fi/realtimeRentalStations/`,
},
- RENTAL_VEHICLE_MAP: {
- default: `${POI_MAP_PREFIX}/fi/rentalVehicles/`,
- },
REALTIME_RENTAL_VEHICLE_MAP: {
default: `${POI_MAP_PREFIX}/fi/realtimeRentalVehicles/`,
},
@@ -54,7 +56,7 @@ export default {
FONTCOUNTER: 'https://cloud.typography.com/6364294/7432412/css/fonts.css',
ROOTLINK: rootLink,
BANNERS: BANNER_URL,
- HSL_FI_SUGGESTIONS: 'https://content.hsl.fi/api/v1/search/suggestions',
+ HSL_FI_SUGGESTIONS: SUGGESTION_URL,
EMBEDDED_SEARCH_GENERATION: '/reittiopas-elementti',
EMISSIONS_INFO: {
fi: 'https://www.hsl.fi/hsl/sahkobussit/ymparisto-lukuina',
@@ -85,6 +87,7 @@ export default {
useRoutingFeedbackPrompt: true,
feedIds: ['HSL', 'HSLlautta', 'Sipoo'],
+ externalFeedIds: ['HSLlautta'],
showHSLTracking: false,
allowLogin: true,
@@ -414,6 +417,8 @@ export default {
ticketPurchaseLink: function purchaseTicketLink(fare) {
return `https://open.app.hsl.fi/zoneTicketWizard/TICKET_TYPE_SINGLE_TICKET/${fare.ticketName}/adult/-`;
},
+ ticketLink: 'https://open.app.hsl.fi/tickets',
+ ticketLinkOperatorCode: 'hsl',
// mapping fareId from OTP fare identifiers to human readable form
// in the new HSL zone model, just strip off the prefix 'HSL:'
fareMapping: function mapHslFareId(fareId) {
@@ -421,6 +426,7 @@ export default {
? fareId.substring(fareId.indexOf(':') + 1)
: '';
},
+ ticketButtonTextId: 'open-app',
trafficNowLink: {
fi: 'matkustaminen/liikenne',
@@ -512,6 +518,21 @@ export default {
sv: 'https://www.hsl.fi/sv/stadscyklar?utm_campaign=kaupunkipyorat-omat&utm_source=reittiopas&utm_medium=referral#block-28474',
en: 'https://www.hsl.fi/en/citybikes?utm_campaign=kaupunkipyorat-omat&utm_source=reittiopas&utm_medium=referral#block-28474',
},
+ scooterInfoLink: {
+ fi: {
+ text: 'Potkulaudat',
+ url: 'https://www.hsl.fi/reittiopas_potkulaudat',
+ },
+ en: {
+ text: 'Scooters',
+ url: 'https://www.hsl.fi/en/journey_planner_scooters',
+ },
+ sv: {
+ text: 'Elsparkcyklar',
+ url: 'https://www.hsl.fi/sv/reseplaneraren_sparkcyklar',
+ },
+ },
+ maxMinutesToRentalJourneyEnd: 240,
},
showVehiclesOnItineraryPage: true,
@@ -561,6 +582,7 @@ export default {
useRealtimeTravellerCapacities: true,
navigation: true,
+ navigationLogo: 'hsl/navigator-logo.svg',
stopCard: {
header: {
diff --git a/app/configurations/config.jyvaskyla.js b/app/configurations/config.jyvaskyla.js
index 3a777ebae2..165b982080 100644
--- a/app/configurations/config.jyvaskyla.js
+++ b/app/configurations/config.jyvaskyla.js
@@ -172,47 +172,7 @@ export default configMerger(walttiConfig, {
includeBikeSuggestions: false,
transferPenalty: 1600,
},
-
- ticketPurchaseLink: function purchaseTicketLink(fare) {
- const fareId = fare.fareProducts[0].product.id;
- const ticket = fareId?.substring
- ? fareId.substring(fareId.indexOf(':') + 1)
- : '';
- let zones = '';
- // Waltti wants zone ids, so map A to 01, B to 02 etc
- for (let i = 0; i < ticket.length; i++) {
- zones += `0${ticket.charCodeAt(i) - 64}`; // eslint-disable
- }
- return `https://waltti.fi/walttiappfeat/busTicket/?operator=50209&ticketType=single&customerGroup=adult&zones=${zones}`;
- },
-
- fareMapping: function mapFareId(fareId) {
- const id = fareId?.substring?.(fareId.indexOf(':') + 1);
- switch (id) {
- case 'A':
- return 'Käteismaksu autossa, Vyöhyke A';
- case 'AB':
- return 'Käteismaksu autossa, Vyöhykkeet AB';
- case 'ABC':
- return 'Käteismaksu autossa, Vyöhykkeet ABC';
- case 'ABCD':
- return 'Käteismaksu autossa, Vyöhykkeet ABCD';
- case 'B':
- return 'Käteismaksu autossa, Vyöhyke B';
- case 'BC':
- return 'Käteismaksu autossa, Vyöhykkeet BC';
- case 'BCD':
- return 'Käteismaksu autossa, Vyöhykkeet BCD';
- case 'C':
- return 'Käteismaksu autossa, Vyöhyke C';
- case 'CD':
- return 'Käteismaksu autossa, Vyöhykkeet CD';
- case 'D':
- return 'Käteismaksu autossa, Vyöhyke D';
- default:
- return '';
- }
- },
+ ticketLinkOperatorCode: 50209,
stopCard: {
header: {
diff --git a/app/configurations/config.kela.js b/app/configurations/config.kela.js
index 1306c3fd20..d01718a7a2 100644
--- a/app/configurations/config.kela.js
+++ b/app/configurations/config.kela.js
@@ -7,8 +7,7 @@ const CONFIG = 'kela';
const APP_TITLE = 'Reittiopas';
const APP_DESCRIPTION = 'Digitransit-reittiopas';
const API_URL = process.env.API_URL || 'https://dev-api.digitransit.fi';
-const OTP_URL =
- process.env.OTP_URL || `${API_URL}/routing/v2-kela/routers/kela/`;
+const OTP_URL = process.env.OTP_URL || `${API_URL}/routing/v2-kela/kela/`;
const MAP_URL =
process.env.MAP_URL || 'https://digitransit-dev-cdn-origin.azureedge.net';
const POI_MAP_PREFIX = `${MAP_URL}/map/v3-kela/kela`;
@@ -115,7 +114,6 @@ export default {
'mode-ferry-pier': '#666666',
'mode-citybike': '#FCBC19',
'mode-citybike-secondary': '#333333',
- 'mode-scooter': '#BABABA',
},
},
diff --git a/app/configurations/config.kotka.js b/app/configurations/config.kotka.js
index 619c830e26..772e45177f 100644
--- a/app/configurations/config.kotka.js
+++ b/app/configurations/config.kotka.js
@@ -7,10 +7,10 @@ const APP_TITLE = 'Kotkan seudun reittiopas';
const APP_DESCRIPTION = 'Kotkan seudun reittiopas';
const walttiConfig = require('./config.waltti').default;
-const minLat = 60.423693;
-const maxLat = 60.688566;
-const minLon = 26.422982;
-const maxLon = 27.739367;
+const minLat = 60.243;
+const maxLat = 60.688;
+const minLon = 26.422;
+const maxLon = 27.738;
export default configMerger(walttiConfig, {
CONFIG,
diff --git a/app/configurations/config.lahti.js b/app/configurations/config.lahti.js
index f8446f358a..73e87ec78d 100644
--- a/app/configurations/config.lahti.js
+++ b/app/configurations/config.lahti.js
@@ -172,4 +172,18 @@ export default configMerger(walttiConfig, {
},
},
},
+
+ showTicketInformation: true,
+ useTicketIcons: true,
+ ticketLink: 'https://www.lsl.fi/liput-ja-hinnat/',
+ showTicketPrice: true,
+
+ showTicketLinkOnlyWhenTesting: true,
+ settingsForFeatureTesting: {
+ walkSpeed: 0.69,
+ bikeSpeed: 8.33,
+ includeBikeSuggestions: false,
+ transferPenalty: 1600,
+ },
+ ticketLinkOperatorCode: 50223,
});
diff --git a/app/configurations/config.matka.js b/app/configurations/config.matka.js
index 50dbb42010..00fc3035bf 100644
--- a/app/configurations/config.matka.js
+++ b/app/configurations/config.matka.js
@@ -61,7 +61,7 @@ export default {
'mode-ferry-pier': '#666666',
'mode-citybike': '#FCBC19',
'mode-citybike-secondary': '#333333',
- 'mode-scooter': '#BABABA',
+ 'mode-scooter': '#C5CAD2',
},
},
feedIds: [
@@ -90,6 +90,7 @@ export default {
'VARELY',
'Harma',
'PohjolanMatka',
+ 'Korsisaari',
],
additionalFeedIds: {
@@ -176,6 +177,20 @@ export default {
...KotkaConfig.vehicleRental.networks,
...KouvolaConfig.vehicleRental.networks,
},
+ scooterInfoLink: {
+ fi: {
+ text: 'Potkulaudat',
+ url: 'https://www.fintraffic.fi/fi/uutiset/sahkopotkulaudat-nyt-mukana-opasmatkafi-reittioppaassa',
+ },
+ en: {
+ text: 'Scooters',
+ url: 'https://www.fintraffic.fi/en/news/electric-scooters-now-included-opasmatkafi-journey-planner',
+ },
+ sv: {
+ text: 'Elsparkcyklar',
+ url: 'https://www.fintraffic.fi/sv/nyheter/elsparkcyklarna-finns-nu-med-i-reseplaneraren-opasmatkafi',
+ },
+ },
},
getAutoSuggestIcons: {
diff --git a/app/configurations/config.oulu.js b/app/configurations/config.oulu.js
index 3b4c524452..8a7953a4bf 100644
--- a/app/configurations/config.oulu.js
+++ b/app/configurations/config.oulu.js
@@ -100,7 +100,7 @@ export default configMerger(walttiConfig, {
sv: 'Zoner',
en: 'Zones',
},
- url: '/assets/geojson/oulu_zone_lines_20230223.geojson',
+ url: '/assets/geojson/oulu_zone_lines_20241011.geojson',
},
],
},
@@ -138,11 +138,7 @@ export default configMerger(walttiConfig, {
],
},
zoneIdMapping: {
- 1: 'L',
- 2: 'A',
- 3: 'B',
- 4: 'C',
- 5: 'D',
+ 1: 'Oulu',
},
zones: {
stops: true,
diff --git a/app/configurations/config.turku.js b/app/configurations/config.turku.js
index c39021532d..264f33d4c1 100644
--- a/app/configurations/config.turku.js
+++ b/app/configurations/config.turku.js
@@ -40,7 +40,7 @@ const walttiConfig = require('./config.waltti').default;
export default configMerger(walttiConfig, {
CONFIG,
- feedIds: ['FOLI', 'FUNI'],
+ feedIds: ['FOLI', 'FUNI', 'TurkuTest'],
searchParams: {
'boundary.rect.min_lat': 59.963388,
diff --git a/app/configurations/config.vaasa.js b/app/configurations/config.vaasa.js
index 80dcab8647..a0e0b27a37 100644
--- a/app/configurations/config.vaasa.js
+++ b/app/configurations/config.vaasa.js
@@ -35,7 +35,7 @@ export default configMerger(walttiConfig, {
title: APP_TITLE,
- logo: 'vaasa/vaasa_vasa_rgb_nega_v01.png',
+ logo: 'vaasa/vaasa-favicon.png',
secondaryLogo: 'vaasa/secondary-logo.png',
feedIds: ['Vaasa'],
diff --git a/app/configurations/config.varely.js b/app/configurations/config.varely.js
index 3a543d0a09..162faac671 100644
--- a/app/configurations/config.varely.js
+++ b/app/configurations/config.varely.js
@@ -5,7 +5,7 @@ const CONFIG = 'varely';
const API_URL = process.env.API_URL || 'https://dev-api.digitransit.fi';
const APP_TITLE = 'Seutu+ reittiopas';
const APP_DESCRIPTION = 'Varsinais-Suomen ELY-keskuksen reittiopas';
-const OTP_URL = process.env.OTP_URL || `${API_URL}/routing/v2/routers/varely/`;
+const OTP_URL = process.env.OTP_URL || `${API_URL}/routing/v2/varely/`;
const MAP_URL =
process.env.MAP_URL || 'https://digitransit-dev-cdn-origin.azureedge.net';
const POI_MAP_PREFIX = `${MAP_URL}/map/v3/varely`;
@@ -14,10 +14,10 @@ const walttiConfig = require('./config.waltti').default;
const colorPrimary = '#008161';
-const minLat = 60;
+const minLat = 59.98;
const maxLat = 61.8;
const minLon = 21;
-const maxLon = 23.6;
+const maxLon = 23.9;
export default configMerger(walttiConfig, {
CONFIG,
@@ -32,7 +32,7 @@ export default configMerger(walttiConfig, {
},
},
- feedIds: ['VARELY', 'FOLI', 'Rauma'],
+ feedIds: ['VARELY', 'FOLI', 'Rauma', 'Pori', 'Salo'],
colors: {
primary: colorPrimary,
@@ -123,7 +123,7 @@ export default configMerger(walttiConfig, {
{
header: 'Tietoja palvelusta',
paragraphs: [
- 'Tervetuloa reittioppaaseen! Reittiopas kertoo, miten pääset nopeasti ja helposti perille joukkoliikenteellä Turussa, Aurassa, Maskussa, Mynämäellä, Nousiaisissa, Paimiossa ja Paraisilla. Reittiopas-palvelun tarjoaa Varsinais-Suomen ELY-keskus, ja se perustuu Digitransit –palvelualustaan.',
+ 'Tervetuloa reittioppaaseen! Reittiopas kertoo, miten pääset nopeasti ja helposti perille joukkoliikenteellä Turussa, Aurassa, Maskussa, Mynämäellä, Nousiaisissa, Paimiossa, Paraisilla, Raumalla, Porissa ja Salossa. Reittiopas-palvelun tarjoaa Varsinais-Suomen ELY-keskus, ja se perustuu Digitransit –palvelualustaan.',
],
},
],
@@ -132,7 +132,7 @@ export default configMerger(walttiConfig, {
{
header: 'Om tjänsten',
paragraphs: [
- 'Den här tjänsten är för reseplanering inom Egentliga Finland (Åbo, Aura, Masku, Mynämäki, Nousis, Pemar and Pargas). Reseplaneraren täcker med vissa begränsningar kollektivtrafik, promenad, cykling samt privatbilism. Tjänsten baserar sig på Digitransit-plattformen.',
+ 'Den här tjänsten är för reseplanering inom Egentliga Finland (Åbo, Aura, Masku, Virmo, Nousis, Pemar, Pargas, Raumo, Björneborg och Salo). Reseplaneraren täcker med vissa begränsningar kollektivtrafik, promenad, cykling samt privatbilism. Tjänsten baserar sig på Digitransit-plattformen.',
],
},
],
@@ -141,7 +141,7 @@ export default configMerger(walttiConfig, {
{
header: 'About this service',
paragraphs: [
- 'Welcome to the Journey Planner! The Journey Planner shows you how to get to your destination fast and easy by public transport in Turku, Aura, Masku, Mynämäki, Nousiainen, Paimio and Parainen. You can also use the planner to find fast walking and cycling routes, and to an extent, for driving directions. The Journey Planner is provided by Centre for Economic Development, Transport and the Environment of Southwest Finland and it is based on the Digitransit service platform.',
+ 'Welcome to the Journey Planner! The Journey Planner shows you how to get to your destination fast and easy by public transport in Turku, Aura, Masku, Mynämäki, Nousiainen, Paimio, Parainen, Rauma, Pori and Salo. You can also use the planner to find fast walking and cycling routes, and to an extent, for driving directions. The Journey Planner is provided by Centre for Economic Development, Transport and the Environment of Southwest Finland and it is based on the Digitransit service platform.',
],
},
],
@@ -163,6 +163,16 @@ export default configMerger(walttiConfig, {
sv: 'Åboregion',
en: 'Turku region',
},
+ Salo: {
+ fi: 'Salo',
+ sv: 'Salo',
+ en: 'Salo',
+ },
+ Pori: {
+ fi: 'Pori',
+ sv: 'Björneborg',
+ en: 'Pori',
+ },
},
staticMessages: [],
@@ -170,4 +180,5 @@ export default configMerger(walttiConfig, {
showNearYouButtons: true,
allowLogin: false,
routeNotifications: [],
+ analyticsScript: '',
});
diff --git a/app/configurations/config.waltti.js b/app/configurations/config.waltti.js
index 68853ea50f..758e62a911 100644
--- a/app/configurations/config.waltti.js
+++ b/app/configurations/config.waltti.js
@@ -1,5 +1,5 @@
const API_URL = process.env.API_URL || 'https://dev-api.digitransit.fi';
-const OTP_URL = process.env.OTP_URL || `${API_URL}/routing/v2/routers/waltti/`;
+const OTP_URL = process.env.OTP_URL || `${API_URL}/routing/v2/waltti/`;
const MAP_URL =
process.env.MAP_URL || 'https://digitransit-dev-cdn-origin.azureedge.net';
const POI_MAP_PREFIX = `${MAP_URL}/map/v3/waltti`;
@@ -31,9 +31,6 @@ export default {
sv: `${POI_MAP_PREFIX}/sv/vehicleParkingGroups/`,
fi: `${POI_MAP_PREFIX}/fi/vehicleParkingGroups/`,
},
- RENTAL_VEHICLE_MAP: {
- default: `${POI_MAP_PREFIX}/fi/rentalVehicles/`,
- },
REALTIME_RENTAL_VEHICLE_MAP: {
default: `${POI_MAP_PREFIX}/fi/realtimeRentalVehicles/`,
},
@@ -267,4 +264,24 @@ export default {
value: 600,
},
],
+ navigation: true,
+
+ ticketPurchaseLink: function purchaseTicketLink(fare, operatorCode) {
+ const fareId = fare.fareProducts[0].product.id;
+ const ticket = fareId?.substring
+ ? fareId.substring(fareId.indexOf(':') + 1)
+ : '';
+ let zones = '';
+ // Waltti wants zone ids, so map A to 01, B to 02 etc
+ for (let i = 0; i < ticket.length; i++) {
+ zones += `0${ticket.charCodeAt(i) - 64}`; // eslint-disable
+ }
+ return `https://waltti.fi/walttiapp/busTicket/?operator=${operatorCode}&ticketType=single&customerGroup=adult&zones=${zones}`;
+ },
+ ticketButtonTextId: 'buy-in-app',
+
+ analyticsScript: function createAnalyticsScript(hostname) {
+ // eslint-disable-next-line no-useless-escape
+ return `\n`;
+ })(window,document,'script','dataLayer','${config.GTMid}');\n`;
+ }
+ return '';
}
const handleChange = () => {
if (!window.CookieInformation) {
diff --git a/app/util/browser.js b/app/util/browser.js
index 32991a2fa0..2c492ae2b9 100644
--- a/app/util/browser.js
+++ b/app/util/browser.js
@@ -12,8 +12,6 @@ export const isWindowsPhone =
isBrowser && navigator.userAgent.match(/Windows Phone/) != null;
export const isLangMockEn =
isBrowser && window.location.search.indexOf('enmock') !== -1;
-export const isDebugTiles =
- isBrowser && window.location.search.indexOf('debugTiles') !== -1;
export const isMobile =
isBrowser && navigator.userAgent.match(/Mobile/) != null;
export const isFirefox =
diff --git a/app/util/envUtils.js b/app/util/envUtils.js
index 75eaf89b8e..40cc01f540 100644
--- a/app/util/envUtils.js
+++ b/app/util/envUtils.js
@@ -1,5 +1,3 @@
-/* eslint-disable import/prefer-default-export */
-
/** Check if application is running in a dev environment. RUN_ENV is defined in kubernetes-deploy for dev instances. For running dev locally, NODE_ENV is checked * */
export const isDevelopmentEnvironment = config => {
return (
diff --git a/app/util/fareUtils.js b/app/util/fareUtils.js
index c5371e48db..3179b45686 100644
--- a/app/util/fareUtils.js
+++ b/app/util/fareUtils.js
@@ -119,6 +119,7 @@ export const shouldShowFarePurchaseInfo = (config, breakpoint, fares) => {
!unknownFares &&
fares?.length === 1 &&
config.ticketPurchaseLink &&
+ config.ticketLinkOperatorCode &&
breakpoint !== 'large'
);
};
diff --git a/app/util/feedScopedIdUtils.js b/app/util/feedScopedIdUtils.js
index 410d755561..b83f9eae17 100644
--- a/app/util/feedScopedIdUtils.js
+++ b/app/util/feedScopedIdUtils.js
@@ -1,5 +1,3 @@
-/* eslint-disable import/prefer-default-export */
-
/**
* Returns id without the feedId prefix.
*
@@ -14,3 +12,30 @@ export const getIdWithoutFeed = feedScopedId => {
}
return feedScopedId.split(':')[1];
};
+
+/**
+ * Returns feedId without the objectId.
+ *
+ * @param {String} feedScopedId should be in feedId:objectId format.
+ */
+export const getFeedWithoutId = feedScopedId => {
+ if (!feedScopedId) {
+ return undefined;
+ }
+ if (feedScopedId.indexOf(':') === -1) {
+ return feedScopedId;
+ }
+ return feedScopedId.split(':')[0];
+};
+
+/**
+ * Returns boolean indicating whether the feed is external or not.
+ */
+export const isExternalFeed = (feedId, config) => {
+ return (
+ config !== undefined &&
+ config.externalFeedIds !== undefined &&
+ feedId !== undefined &&
+ config.externalFeedIds.includes(feedId)
+ );
+};
diff --git a/app/util/filterUtils.js b/app/util/filterUtils.js
index f8b4e71ef9..931da943d1 100644
--- a/app/util/filterUtils.js
+++ b/app/util/filterUtils.js
@@ -1,5 +1,3 @@
-/* eslint-disable import/prefer-default-export */
-
/**
* Filters object that contains objects so that only objects that have
* a certain key with the correct value defined are returned.
diff --git a/app/util/gtfs.js b/app/util/gtfs.js
index 539ed4ced2..8796b34062 100644
--- a/app/util/gtfs.js
+++ b/app/util/gtfs.js
@@ -1,4 +1,3 @@
-/* eslint-disable import/prefer-default-export */
export const typeToName = {
0: 'tram',
1: 'subway',
diff --git a/app/util/gtfsRtParser.js b/app/util/gtfsRtParser.js
index 597378fc57..d4b71068eb 100644
--- a/app/util/gtfsRtParser.js
+++ b/app/util/gtfsRtParser.js
@@ -1,6 +1,6 @@
import ceil from 'lodash/ceil';
import Pbf from 'pbf';
-// eslint-disable-next-line import/prefer-default-export
+
export const parseFeedMQTT = (feedParser, data, topic) => {
const pbf = new Pbf(data);
const feed = feedParser(pbf);
diff --git a/app/util/legUtils.js b/app/util/legUtils.js
index 2f6a308bb0..a7758f7cbc 100644
--- a/app/util/legUtils.js
+++ b/app/util/legUtils.js
@@ -606,18 +606,30 @@ export const showBikeBoardingNote = (leg, config) => {
);
};
+/**
+ * Determines whether a leg after walk leg contains rental vehicles
+ * @param {object} leg - The leg object
+ * @param {object} nextLeg - The Leg after the current leg
+ * @returns {boolean}
+ */
+export const isRental = (leg, nextLeg) =>
+ leg.mode === 'WALK' &&
+ (leg.to.vehicleRentalStation ||
+ leg.to.vehicleRental ||
+ nextLeg?.mode === 'SCOOTER');
+
/**
* Return translated string that describes leg destination
*
- * @param {object} intl - rect-intl context
- * @param {object} leg - The leg object.
- * @param {object} secondary - optional walk leg
+ * @param {object} intl - react-intl context
+ * @param {object} leg - leg object
+ * @param {object} secondary - optional second destination
+ * @param {object} nextLeg - optional leg after the current leg
* @returns {string}
*/
-export const legDestination = (intl, leg, secondary) => {
+export const legDestination = (intl, leg, secondary, nextLeg = null) => {
const { to } = leg;
let id = 'modes.to-place';
-
if (leg.mode === 'BICYCLE' && to.vehicleParking) {
id = 'modes.to-bike-park';
} else if (leg.mode === 'CAR' && to.vehicleParking) {
@@ -627,5 +639,8 @@ export const legDestination = (intl, leg, secondary) => {
if (mode) {
id = `modes.to-${mode.toLowerCase()}`;
}
+ if (isRental(leg, nextLeg)) {
+ id = 'modes.from-place';
+ }
return intl.formatMessage({ id, defaultMessage: 'place' });
};
diff --git a/app/util/modeUtils.js b/app/util/modeUtils.js
index aee5f90a6e..768aabba92 100644
--- a/app/util/modeUtils.js
+++ b/app/util/modeUtils.js
@@ -7,6 +7,7 @@ import { isInBoundingBox } from './geo-utils';
import { addAnalyticsEvent } from './analyticsUtils';
import { ExtendedRouteTypes, TransportMode } from '../constants';
import { isDevelopmentEnvironment } from './envUtils';
+import { getFeedWithoutId, isExternalFeed } from './feedScopedIdUtils';
function seasonMs(ddmmyyyy) {
const parts = ddmmyyyy.split('.');
@@ -113,7 +114,7 @@ export function getTransportModes(config) {
};
}
-export function getRouteMode(route) {
+export function getRouteMode(route, config) {
switch (route.type) {
case ExtendedRouteTypes.BusExpress:
return 'bus-express';
@@ -122,7 +123,9 @@ export function getRouteMode(route) {
case ExtendedRouteTypes.SpeedTram:
return 'speedtram';
default:
- return route.mode?.toLowerCase();
+ return isExternalFeed(getFeedWithoutId(route?.gtfsId), config)
+ ? `${route.mode?.toLowerCase()}-external`
+ : route.mode?.toLowerCase();
}
}
diff --git a/app/util/patternUtils.js b/app/util/patternUtils.js
index db9cc42e06..bc26fd68ff 100644
--- a/app/util/patternUtils.js
+++ b/app/util/patternUtils.js
@@ -4,7 +4,6 @@ import moment from 'moment';
Return false if pattern doesn't have active dates information available
or if current day is not found in active days
* */
-// eslint-disable-next-line import/prefer-default-export
export const isActiveDate = pattern => {
if (!pattern || !pattern.activeDates) {
return false;
diff --git a/app/util/planParamUtil.js b/app/util/planParamUtil.js
index 846d489f51..836df3e010 100644
--- a/app/util/planParamUtil.js
+++ b/app/util/planParamUtil.js
@@ -123,7 +123,7 @@ export function planQueryNeeded(
{
params: { from, to },
location: {
- query: { intermediatePlaces },
+ query: { intermediatePlaces, arriveBy, time },
},
},
planType,
@@ -198,13 +198,20 @@ export function planQueryNeeded(
case PLANTYPE.SCOOTERTRANSIT:
/* special logic: relaxed scooter query is made only if no networks allowed */
+ /* special logic: scooter queries are not made if the search is n minutes or more into the future or if arrival time is too late */
return (
config.transportModes.scooter.availableForSelection &&
transitModes.length > 0 &&
!wheelchair &&
(relaxSettings
? settings.scooterNetworks.length === 0
- : settings.scooterNetworks.length > 0)
+ : settings.scooterNetworks.length > 0) &&
+ ((!arriveBy &&
+ (time - Date.now() / 1000) / 60 <
+ config.vehicleRental.maxMinutesToRentalJourneyStart) ||
+ (arriveBy &&
+ (time - Date.now() / 1000) / 60 <
+ config.vehicleRental.maxMinutesToRentalJourneyEnd))
);
case PLANTYPE.PARKANDRIDE:
return (
diff --git a/app/util/shapes.js b/app/util/shapes.js
index c8d0fd1845..3c6cc3c61b 100644
--- a/app/util/shapes.js
+++ b/app/util/shapes.js
@@ -1,4 +1,3 @@
-/* eslint-disable import/prefer-default-export */
import PropTypes from 'prop-types';
import { PlannerMessageType } from '../constants';
diff --git a/app/util/vehicleRentalUtils.js b/app/util/vehicleRentalUtils.js
index 3e6ec7cc5d..242489e5f9 100644
--- a/app/util/vehicleRentalUtils.js
+++ b/app/util/vehicleRentalUtils.js
@@ -131,33 +131,30 @@ const addAnalytics = (action, name) => {
* Updates the list of allowed networks either by removing or adding.
* Note: legacy settings had network names always in uppercase letters.
*
- * @param currentSettings the current settings
- * @param newValue the network to be added/removed
- * @param config The configuration for the software installation
- * @param isUsingCitybike if citybike is enabled
+ * @param networks the previously selected networks
+ * @param networkName the network to be added/removed
+ * @param type the type of the network
* @returns the updated citybike networks
*/
-export const updateVehicleNetworks = (currentSettings, newValue) => {
- let chosenNetworks;
+export const updateVehicleNetworks = (networks, networkName, type) => {
+ let updatedNetworks;
+ let toggleAction;
- if (currentSettings) {
- chosenNetworks = currentSettings.find(
- o => o.toLowerCase() === newValue.toLowerCase(),
- )
- ? without(currentSettings, newValue, newValue.toUpperCase())
- : currentSettings.concat([newValue]);
+ if (networks.find(o => o.toLowerCase() === networkName.toLowerCase())) {
+ updatedNetworks = without(networks, networkName, networkName.toUpperCase());
+ toggleAction = 'Disable';
} else {
- chosenNetworks = [newValue];
+ updatedNetworks = networks.concat([networkName]);
+ toggleAction = 'Enable';
}
- if (Array.isArray(currentSettings) && Array.isArray(chosenNetworks)) {
- const action = `Settings${
- currentSettings.length > chosenNetworks.length ? 'Disable' : 'Enable'
- }CityBikeNetwork`;
- addAnalytics(action, newValue);
- }
- return chosenNetworks;
+ const action = `Settings${toggleAction}${
+ type === 'citybike' ? 'CityBikeNetwork' : 'ScooterNetwork'
+ }`;
+ addAnalytics(action, networkName);
+
+ return updatedNetworks;
};
export const getVehicleMinZoomOnStopsNearYou = (config, override) => {
@@ -184,11 +181,17 @@ export const hasVehicleRentalCode = rentalId => {
};
export const mapVehicleRentalFromStore = vehicleRentalStation => {
- const network = vehicleRentalStation.networks[0];
+ const originalId = vehicleRentalStation.stationId;
+ const network =
+ vehicleRentalStation.networks?.[0] || originalId.split(':')[0];
+ const stationId = originalId.startsWith(network)
+ ? originalId
+ : `${network}:${originalId}`;
+
const newStation = {
...vehicleRentalStation,
network,
- stationId: `${network}:${vehicleRentalStation.stationId}`,
+ stationId,
};
delete newStation.networks;
return newStation;
diff --git a/build/generate-schema.js b/build/generate-schema.js
index 2ccb4a3630..ae0153b6bc 100644
--- a/build/generate-schema.js
+++ b/build/generate-schema.js
@@ -4,7 +4,7 @@ const http = require('https');
const graphqlSchemaSource =
process.env.SCHEMA_SRC ||
- 'https://raw.githubusercontent.com/HSLdevcom/OpenTripPlanner/dev-2.x/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls';
+ 'https://raw.githubusercontent.com/HSLdevcom/OpenTripPlanner/dev-2.x/application/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls';
const outputGraphQLFilename = 'schema.graphql';
const outputGraphQLFileCopy = `../digitransit-search-util/packages/digitransit-search-util-query-utils/schema/${outputGraphQLFilename}`;
diff --git a/build/schema.graphql b/build/schema.graphql
index 6e1195f590..28024656e2 100644
--- a/build/schema.graphql
+++ b/build/schema.graphql
@@ -670,6 +670,11 @@ type Leg {
"""
headsign: String
"""
+ An identifier for the leg, which can be used to re-fetch transit leg information.
+ Re-fetching fails when the underlying transit data no longer exists.
+ """
+ id: String
+ """
Interlines with previous leg.
This is true when the same vehicle is used for the previous leg as for this leg
and passenger can stay inside the vehicle.
@@ -1166,6 +1171,11 @@ type QueryType {
time: Int!
): Trip
"""
+ Try refetching the current state of a transit leg using its id.
+ This fails when the underlying transit data (mostly IDs) has changed or are no longer available.
+ """
+ leg(id: String!): Leg
+ """
Get all places (stops, stations, etc. with coordinates) within the specified
radius from a location. The returned type is a Relay connection (see
https://facebook.github.io/relay/graphql/connections.htm). The placeAtDistance
@@ -1512,7 +1522,7 @@ type QueryType {
walkSpeed: Float,
"Whether the itinerary must be wheelchair accessible. Default value: false"
wheelchair: Boolean
- ): Plan @async
+ ): Plan @async @deprecated(reason : "Use `planConnection` instead.")
"""
Plan (itinerary) search that follows
[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm).
@@ -1597,7 +1607,7 @@ type QueryType {
number of itineraries in each search.
"""
searchWindow: Duration
- ): PlanConnection @async @deprecated(reason : "Experimental and can include breaking changes, use plan instead")
+ ): PlanConnection @async
"Get a single rental vehicle based on its ID, i.e. value of field `vehicleId`"
rentalVehicle(id: String!): RentalVehicle
"Get all rental vehicles"
@@ -1620,9 +1630,17 @@ type QueryType {
"Only return routes with these feedIds"
feeds: [String],
"Only return routes with these ids"
- ids: [String],
+ ids: [String] @deprecated(reason : "Since it is hard to reason about the ID filter being combined with others in this resolver, it will be moved to a separate one."),
"Query routes by this name"
name: String,
+ """
+ Only include routes whose pattern operates on at least one service date specified by this filter.
+
+ **Note**: A service date is a technical term useful for transit planning purposes and might not
+ correspond to a how a passenger thinks of a calendar date. For example, a night bus running
+ on Sunday morning at 1am to 3am, might have the previous Saturday's service date.
+ """
+ serviceDates: LocalDateRangeInput,
"Only include routes, which use one of these modes"
transportModes: [Mode]
): [Route]
@@ -1847,7 +1865,16 @@ type Route implements Node {
"Transport mode of this route, e.g. `BUS`"
mode: TransitMode
"List of patterns which operate on this route"
- patterns: [Pattern]
+ patterns(
+ """
+ Filter patterns by the service dates they operate on.
+
+ **Note**: A service date is a technical term useful for transit planning purposes and might not
+ correspond to a how a passenger thinks of a calendar date. For example, a night bus running
+ on Sunday morning at 1am to 3am, might have the previous Saturday's service date.
+ """
+ serviceDates: LocalDateRangeInput
+ ): [Pattern]
"Short name of the route, usually a line number, e.g. 550"
shortName: String
"""
@@ -1984,7 +2011,16 @@ type Stop implements Node & PlaceInterface {
"Identifier of the platform, usually a number. This value is only present for stops that are part of a station"
platformCode: String
"Routes which pass through this stop"
- routes: [Route!]
+ routes(
+ """
+ Only include routes which are operational on at least one service date specified by this filter.
+
+ **Note**: A service date is a technical term useful for transit planning purposes and might not
+ correspond to a how a passenger thinks of a calendar date. For example, a night bus running
+ on Sunday morning at 1am to 3am, might have the previous Saturday's service date.
+ """
+ serviceDates: LocalDateRangeInput
+ ): [Route!]
"Returns timetable of the specified pattern at this stop"
stopTimesForPattern(
"Id of the pattern"
@@ -3045,6 +3081,12 @@ enum PlanAccessMode {
"""
BICYCLE_RENTAL
"""
+ Driving to a stop and boarding a vehicle with the car.
+ Access can use driving only if the mode used for transfers
+ and egress is also `CAR`.
+ """
+ CAR
+ """
Getting dropped off by a car to a location that is accessible with a car.
Note, this can include walking after the drop-off.
"""
@@ -3154,6 +3196,11 @@ enum PlanEgressMode {
"""
BICYCLE_RENTAL
"""
+ Driving from a stop to the destination. Egress can use driving only if the mode
+ used for access and transfers is also `CAR`.
+ """
+ CAR
+ """
Getting picked up by a car from a location that is accessible with a car.
Note, this can include walking before the pickup.
"""
@@ -3191,6 +3238,11 @@ enum PlanTransferMode {
cycling if the mode used for access and egress is also `BICYCLE`.
"""
BICYCLE
+ """
+ Driving between transit vehicles. Transfers can only use driving if the mode
+ used for access and egress is also `CAR`.
+ """
+ CAR
"Walking between transit vehicles (typically between stops)."
WALK
}
@@ -3517,6 +3569,13 @@ scalar GeoJson @specifiedBy(url : "https://www.rfcreader.com/#rfc7946")
scalar Grams
+"""
+An ISO-8601-formatted local date, i.e. `2024-05-24` for the 24th of May, 2024.
+
+ISO-8601 allows many different date formats, however only the most common one - `yyyy-MM-dd` - is accepted.
+"""
+scalar LocalDate @specifiedBy(url : "https://www.iso.org/standard/70907.html")
+
"A IETF BCP 47 language tag"
scalar Locale @specifiedBy(url : "https://www.rfcreader.com/#rfc5646")
@@ -3857,6 +3916,23 @@ input InputUnpreferred {
useUnpreferredRoutesPenalty: Int @deprecated(reason : "Use unpreferredCost instead")
}
+"Filters an entity by a date range."
+input LocalDateRangeInput {
+ """
+ **Exclusive** end date of the filter. This means that if you want a time window from Sunday to
+ Sunday, `end` must be on Monday.
+
+ If `null` this means that no end filter is applied and all entities that are after or on `start`
+ are selected.
+ """
+ end: LocalDate
+ """
+ **Inclusive** start date of the filter. If `null` this means that no `start` filter is applied and all
+ dates that are before `end` are selected.
+ """
+ start: LocalDate
+}
+
"""
The filter definition to include or exclude parking facilities used during routing.
diff --git a/digitransit-component/packages/digitransit-component-autosuggest-panel/README.md b/digitransit-component/packages/digitransit-component-autosuggest-panel/README.md
index 1ad69aee98..1e36a6c4ad 100644
--- a/digitransit-component/packages/digitransit-component-autosuggest-panel/README.md
+++ b/digitransit-component/packages/digitransit-component-autosuggest-panel/README.md
@@ -73,7 +73,7 @@ const getAutoSuggestIcons: {
return ['citybike-stop-digitransit', '#f2b62d'];
}
}
-const targets = ['Locations', 'Stops', 'Routes']; // Defines what you are searching. all available options are Locations, Stops, Routes, VehicleRentalStation, FutureRoutes, MapPosition and CurrentPosition. Leave empty to search all targets.
+const targets = ['Locations', 'Stops', 'Routes']; // Defines what you are searching. all available options are Locations, Stops, Stations, Routes, VehicleRentalStation, FutureRoutes, MapPosition and CurrentPosition. Leave empty to search all targets.
const sources = ['Favourite', 'History', 'Datasource'] // Defines where you are searching. all available are: Favourite, History (previously searched searches), and Datasource. Leave empty to use all sources.
{
* }
* const transportMode = undefined;
* const placeholder = "stop-near-you";
- * const targets = ['Locations', 'Stops', 'Routes']; // Defines what you are searching. all available options are Locations, Stops, Routes, VehicleRentalStations, FutureRoutes, MapPosition and CurrentPosition. Leave empty to search all targets.
+ * const targets = ['Locations', 'Stops', 'Routes']; // Defines what you are searching. Options are Locations, Stops, Stations, Routes, VehicleRentalStations, FutureRoutes, MapPosition and CurrentPosition. Leave empty to search all targets.
* const sources = ['Favourite', 'History', 'Datasource'] // Defines where you are searching. all available are: Favourite, History (previously searched searches) and Datasource. Leave empty to use all sources.
* return (
* {
- return filterMatchingToInput(stops, input, [
+function filterFavouriteStops(stopsAndStations, input, useStops, useStations) {
+ return stopsAndStations.then(stopsStations => {
+ const candidates = stopsStations.filter(s =>
+ s.type === 'stop' ? useStops : useStations,
+ );
+ return filterMatchingToInput(candidates, input, [
'properties.name',
'properties.name',
'properties.address',
@@ -229,9 +232,12 @@ const routeLayers = [
'route-FERRY',
'route-SUBWAY',
'route-AIRPLANE',
+ 'route-FUNICULAR',
];
-const locationLayers = ['favouritePlace', 'venue', 'address', 'street'];
+const locationLayers = ['venue', 'address', 'street'];
const parkingLayers = ['carpark', 'bikepark'];
+const stopLayers = ['stop', 'station'];
+
/**
* Executes the search
*
@@ -323,16 +329,17 @@ export function getSearchResults(
}
if (allSources || sources.includes('Datasource')) {
- const geocodingLayers = ['station', 'venue', 'address', 'street'];
- const feedis = feedIDs.map(v => `gtfs${v}`);
- const geosources = geocodingSources.concat(feedis).join(',');
+ const geocodingLayers = ['venue', 'address', 'street'];
+ if (targets.includes('Stations')) {
+ geocodingLayers.push('station'); // search stations from OSM
+ }
searchComponents.push(
getGeocodingResults(
input,
searchParams,
language,
focusPoint,
- geosources,
+ geocodingSources.join(','),
URL_PELIAS,
minimalRegexp,
geocodingLayers,
@@ -341,18 +348,10 @@ export function getSearchResults(
}
if (allSources || sources.includes('History')) {
const locationHistory = getOldSearches(context, 'endpoint');
- const dropLayers = [
- 'currentPosition',
- 'selectFromMap',
- 'futureRoute',
- 'ownLocations',
- 'vehicleRentalStation',
- 'bikepark',
- 'carpark',
- 'stop',
- 'back',
- ];
+ const dropLayers = ['bikestation'];
+ dropLayers.push(...stopLayers);
dropLayers.push(...routeLayers);
+ dropLayers.push(...parkingLayers);
searchComponents.push(
filterOldSearches(locationHistory, input, dropLayers),
);
@@ -386,25 +385,18 @@ export function getSearchResults(
}
if (allSources || sources.includes('History')) {
const history = getOldSearches(context);
- const dropLayers = [
- 'currentPosition',
- 'selectFromMap',
- 'futureRoute',
- 'ownLocations',
- 'favouritePlace',
- 'bikestation',
- 'vehicleRentalStation',
- 'back',
- 'stop',
- 'station',
- ];
+ const dropLayers = ['bikestation'];
+ dropLayers.push(...stopLayers);
dropLayers.push(...routeLayers);
dropLayers.push(...locationLayers);
searchComponents.push(filterOldSearches(history, input, dropLayers));
}
}
- if (allTargets || targets.includes('Stops')) {
+ const useStops = targets.includes('Stops');
+ const useStations = targets.includes('Stations');
+
+ if (allTargets || useStops || useStations) {
if (sources.includes('Favourite')) {
const favouriteStops = getFavouriteStops(context);
let stopsAndStations;
@@ -430,10 +422,18 @@ export function getSearchResults(
return results;
});
}
- searchComponents.push(filterFavouriteStops(stopsAndStations, input));
+ searchComponents.push(
+ filterFavouriteStops(stopsAndStations, input, useStops, useStations),
+ );
}
if (allSources || sources.includes('Datasource')) {
- const geocodingLayers = ['stop', 'station'];
+ const geocodingLayers = [];
+ if (useStops) {
+ geocodingLayers.push('stop');
+ }
+ if (useStations) {
+ geocodingLayers.push('station');
+ }
const searchParams =
geocodingSize && geocodingSize !== 10 ? { size: geocodingSize } : {};
if (geocodingSearchParams && geocodingSearchParams['boundary.country']) {
@@ -445,14 +445,14 @@ export function getSearchResults(
if (allTargets || targets.includes('Locations')) {
searchParams.dedupestops = 1;
}
- const feedis = feedIDs.map(v => `gtfs${v}`).join(',');
+ const feeds = feedIDs.map(v => `gtfs${v}`).join(',');
searchComponents.push(
getGeocodingResults(
input,
searchParams,
language,
focusPoint,
- feedis,
+ feeds,
URL_PELIAS,
minimalRegexp,
geocodingLayers,
@@ -471,23 +471,17 @@ export function getSearchResults(
}
return true;
});
- const dropLayers = [
- 'currentPosition',
- 'selectFromMap',
- 'futureRoute',
- 'ownLocations',
- 'favouritePlace',
- 'vehicleRentalStation',
- 'back',
- ];
+ const dropLayers = ['bikestation'];
dropLayers.push(...routeLayers);
dropLayers.push(...locationLayers);
dropLayers.push(...parkingLayers);
+ if (!useStops) {
+ dropLayers.push('stop');
+ }
+ if (!useStations) {
+ dropLayers.push('station');
+ }
if (transportMode) {
- if (transportMode !== 'route-CITYBIKE') {
- dropLayers.push('vehicleRentalStation');
- dropLayers.push('bikestation');
- }
searchComponents.push(
filterOldSearches(stopHistory, input, dropLayers).then(result =>
filterResults ? filterResults(result, mode) : result,
@@ -500,7 +494,6 @@ export function getSearchResults(
}
}
}
-
if (allTargets || targets.includes('Routes')) {
if (sources.includes('Favourite')) {
const favouriteRoutes = getFavouriteRoutes(context);
@@ -518,26 +511,14 @@ export function getSearchResults(
);
if (allSources || sources.includes('History')) {
const routeHistory = getOldSearches(context);
- const dropLayers = [
- 'currentPosition',
- 'selectFromMap',
- 'futureRoute',
- 'favouritePlace',
- 'stop',
- 'station',
- 'bikepark',
- 'carpark',
- 'ownLocations',
- 'back',
- ];
+ const dropLayers = ['bikestation'];
if (transportMode) {
- if (transportMode !== 'route-CITYBIKE') {
- dropLayers.push('vehicleRentalStation');
- dropLayers.push('bikestation');
- }
dropLayers.push(...routeLayers.filter(i => !(i === transportMode)));
}
+ dropLayers.push(...stopLayers);
dropLayers.push(...locationLayers);
+ dropLayers.push(...parkingLayers);
+
searchComponents.push(
filterOldSearches(routeHistory, input, dropLayers).then(results =>
filterResults ? filterResults(results, mode, 'Routes') : results,
@@ -578,6 +559,15 @@ export function getSearchResults(
}),
);
}
+ if (allSources || sources.includes('History')) {
+ const history = getOldSearches(context);
+ const dropLayers = [...stopLayers];
+ dropLayers.push(...routeLayers);
+ dropLayers.push(...locationLayers);
+ dropLayers.push(...parkingLayers);
+
+ searchComponents.push(filterOldSearches(history, input, dropLayers));
+ }
}
const searchResultsPromise = Promise.all(searchComponents)
diff --git a/digitransit-search-util/packages/digitransit-search-util-execute-search-immidiate/package.json b/digitransit-search-util/packages/digitransit-search-util-execute-search-immidiate/package.json
index 30bdbcb355..737f1e6445 100644
--- a/digitransit-search-util/packages/digitransit-search-util-execute-search-immidiate/package.json
+++ b/digitransit-search-util/packages/digitransit-search-util-execute-search-immidiate/package.json
@@ -1,6 +1,6 @@
{
"name": "@digitransit-search-util/digitransit-search-util-execute-search-immidiate",
- "version": "2.0.3",
+ "version": "3.0.1",
"description": "digitransit-search-util execute-search-immidiate module",
"main": "index.js",
"publishConfig": {
diff --git a/digitransit-search-util/packages/digitransit-search-util-get-json/package.json b/digitransit-search-util/packages/digitransit-search-util-get-json/package.json
index a007c1ae88..b2ce27d1d6 100644
--- a/digitransit-search-util/packages/digitransit-search-util-get-json/package.json
+++ b/digitransit-search-util/packages/digitransit-search-util-get-json/package.json
@@ -22,6 +22,6 @@
"license": "(AGPL-3.0 OR EUPL-1.2)",
"dependencies": {
"@digitransit-search-util/digitransit-search-util-serialize": "0.0.2",
- "axios": "1.6.7"
+ "axios": "1.7.7"
}
}
diff --git a/digitransit-search-util/packages/digitransit-search-util-query-utils/schema/schema.graphql b/digitransit-search-util/packages/digitransit-search-util-query-utils/schema/schema.graphql
index 6e1195f590..28024656e2 100644
--- a/digitransit-search-util/packages/digitransit-search-util-query-utils/schema/schema.graphql
+++ b/digitransit-search-util/packages/digitransit-search-util-query-utils/schema/schema.graphql
@@ -670,6 +670,11 @@ type Leg {
"""
headsign: String
"""
+ An identifier for the leg, which can be used to re-fetch transit leg information.
+ Re-fetching fails when the underlying transit data no longer exists.
+ """
+ id: String
+ """
Interlines with previous leg.
This is true when the same vehicle is used for the previous leg as for this leg
and passenger can stay inside the vehicle.
@@ -1166,6 +1171,11 @@ type QueryType {
time: Int!
): Trip
"""
+ Try refetching the current state of a transit leg using its id.
+ This fails when the underlying transit data (mostly IDs) has changed or are no longer available.
+ """
+ leg(id: String!): Leg
+ """
Get all places (stops, stations, etc. with coordinates) within the specified
radius from a location. The returned type is a Relay connection (see
https://facebook.github.io/relay/graphql/connections.htm). The placeAtDistance
@@ -1512,7 +1522,7 @@ type QueryType {
walkSpeed: Float,
"Whether the itinerary must be wheelchair accessible. Default value: false"
wheelchair: Boolean
- ): Plan @async
+ ): Plan @async @deprecated(reason : "Use `planConnection` instead.")
"""
Plan (itinerary) search that follows
[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm).
@@ -1597,7 +1607,7 @@ type QueryType {
number of itineraries in each search.
"""
searchWindow: Duration
- ): PlanConnection @async @deprecated(reason : "Experimental and can include breaking changes, use plan instead")
+ ): PlanConnection @async
"Get a single rental vehicle based on its ID, i.e. value of field `vehicleId`"
rentalVehicle(id: String!): RentalVehicle
"Get all rental vehicles"
@@ -1620,9 +1630,17 @@ type QueryType {
"Only return routes with these feedIds"
feeds: [String],
"Only return routes with these ids"
- ids: [String],
+ ids: [String] @deprecated(reason : "Since it is hard to reason about the ID filter being combined with others in this resolver, it will be moved to a separate one."),
"Query routes by this name"
name: String,
+ """
+ Only include routes whose pattern operates on at least one service date specified by this filter.
+
+ **Note**: A service date is a technical term useful for transit planning purposes and might not
+ correspond to a how a passenger thinks of a calendar date. For example, a night bus running
+ on Sunday morning at 1am to 3am, might have the previous Saturday's service date.
+ """
+ serviceDates: LocalDateRangeInput,
"Only include routes, which use one of these modes"
transportModes: [Mode]
): [Route]
@@ -1847,7 +1865,16 @@ type Route implements Node {
"Transport mode of this route, e.g. `BUS`"
mode: TransitMode
"List of patterns which operate on this route"
- patterns: [Pattern]
+ patterns(
+ """
+ Filter patterns by the service dates they operate on.
+
+ **Note**: A service date is a technical term useful for transit planning purposes and might not
+ correspond to a how a passenger thinks of a calendar date. For example, a night bus running
+ on Sunday morning at 1am to 3am, might have the previous Saturday's service date.
+ """
+ serviceDates: LocalDateRangeInput
+ ): [Pattern]
"Short name of the route, usually a line number, e.g. 550"
shortName: String
"""
@@ -1984,7 +2011,16 @@ type Stop implements Node & PlaceInterface {
"Identifier of the platform, usually a number. This value is only present for stops that are part of a station"
platformCode: String
"Routes which pass through this stop"
- routes: [Route!]
+ routes(
+ """
+ Only include routes which are operational on at least one service date specified by this filter.
+
+ **Note**: A service date is a technical term useful for transit planning purposes and might not
+ correspond to a how a passenger thinks of a calendar date. For example, a night bus running
+ on Sunday morning at 1am to 3am, might have the previous Saturday's service date.
+ """
+ serviceDates: LocalDateRangeInput
+ ): [Route!]
"Returns timetable of the specified pattern at this stop"
stopTimesForPattern(
"Id of the pattern"
@@ -3045,6 +3081,12 @@ enum PlanAccessMode {
"""
BICYCLE_RENTAL
"""
+ Driving to a stop and boarding a vehicle with the car.
+ Access can use driving only if the mode used for transfers
+ and egress is also `CAR`.
+ """
+ CAR
+ """
Getting dropped off by a car to a location that is accessible with a car.
Note, this can include walking after the drop-off.
"""
@@ -3154,6 +3196,11 @@ enum PlanEgressMode {
"""
BICYCLE_RENTAL
"""
+ Driving from a stop to the destination. Egress can use driving only if the mode
+ used for access and transfers is also `CAR`.
+ """
+ CAR
+ """
Getting picked up by a car from a location that is accessible with a car.
Note, this can include walking before the pickup.
"""
@@ -3191,6 +3238,11 @@ enum PlanTransferMode {
cycling if the mode used for access and egress is also `BICYCLE`.
"""
BICYCLE
+ """
+ Driving between transit vehicles. Transfers can only use driving if the mode
+ used for access and egress is also `CAR`.
+ """
+ CAR
"Walking between transit vehicles (typically between stops)."
WALK
}
@@ -3517,6 +3569,13 @@ scalar GeoJson @specifiedBy(url : "https://www.rfcreader.com/#rfc7946")
scalar Grams
+"""
+An ISO-8601-formatted local date, i.e. `2024-05-24` for the 24th of May, 2024.
+
+ISO-8601 allows many different date formats, however only the most common one - `yyyy-MM-dd` - is accepted.
+"""
+scalar LocalDate @specifiedBy(url : "https://www.iso.org/standard/70907.html")
+
"A IETF BCP 47 language tag"
scalar Locale @specifiedBy(url : "https://www.rfcreader.com/#rfc5646")
@@ -3857,6 +3916,23 @@ input InputUnpreferred {
useUnpreferredRoutesPenalty: Int @deprecated(reason : "Use unpreferredCost instead")
}
+"Filters an entity by a date range."
+input LocalDateRangeInput {
+ """
+ **Exclusive** end date of the filter. This means that if you want a time window from Sunday to
+ Sunday, `end` must be on Monday.
+
+ If `null` this means that no end filter is applied and all entities that are after or on `start`
+ are selected.
+ """
+ end: LocalDate
+ """
+ **Inclusive** start date of the filter. If `null` this means that no `start` filter is applied and all
+ dates that are before `end` are selected.
+ """
+ start: LocalDate
+}
+
"""
The filter definition to include or exclude parking facilities used during routing.
diff --git a/docs/Installation.md b/docs/Installation.md
index 7b2f32f56f..31745130c6 100644
--- a/docs/Installation.md
+++ b/docs/Installation.md
@@ -14,12 +14,27 @@ You also need a C compiler:
- OS X: Xcode 5.0 or later
- Windows: for example MSVC 2013 Express
+### WSL
+To use Windows Subsystem for Linux in digitransit-ui development you may need to do at least the following
+1. Add the following to your `/etc/hosts`. This is because the project uses ipv6 compliant `::1` instead of ipv4 style `0.0.0.0`:
+```
+::1 ip6-localhost ip6-loopback localhost
+```
+2. Add the following to your `/etc/wsl.conf` if not yet present. This prevents WSL from regenerating the `/etc/hosts` as well as the `/etc/resolv.conf`:
+```
+[network]
+generateResolvConf=false
+generateHosts = false
+```
+
## Install watchman
### Version
A bit newer version of watchman is now required and 4.9.0 is no longer supported.
-Version 20220320.140531.0, for example, works.
+Working versions include at least
+- 20220320.140531.0
+- 20240407.093313.0
### OS X
@@ -89,7 +104,7 @@ By default digitransit-ui uses services from https://dev-api.digitransit.fi but
If you want to specify different URL (not just base URL) for individual services, you can define variables OTP_URL, MAP_URL and/or GEOCODING_BASE_URL (URL path before /search or /reverse).
- `yarn run build`
-- `GEOCODING_BASE_URL=https://api.digitransit.fi/geocoding/v1 OTP_URL=https://api.digitransit.fi/routing/v1/routers/finland/ yarn run start`
+- `GEOCODING_BASE_URL=https://api.digitransit.fi/geocoding/v1 OTP_URL=https://api.digitransit.fi/routing/v2/finland/ yarn run start`
### Using Sentry to track client errors (optional)
Sentry can be configured like so:
diff --git a/package.json b/package.json
index f3df387584..e9a383c981 100644
--- a/package.json
+++ b/package.json
@@ -133,6 +133,7 @@
"@babel/preset-env": "7.23.9",
"@babel/preset-react": "7.23.3",
"@babel/register": "7.23.7",
+ "@hsl-fi/button": "^1.2.4",
"@hsl-fi/container-spinner": "0.3.2",
"@hsl-fi/hooks": "1.2.4",
"@hsl-fi/modal": " ^0.3.2",
@@ -142,16 +143,16 @@
"@hsl-fi/site-header": "4.5.0",
"@mapbox/sphericalmercator": "1.1.0",
"@mapbox/vector-tile": "1.3.1",
- "axios": "1.6.7",
+ "axios": "1.7.7",
"babel-plugin-dynamic-import-node": "2.3.3",
"babel-plugin-relay": "16.2.0",
- "body-parser": "1.19.0",
+ "body-parser": "1.20.3",
"classnames": "2.2.6",
- "connect-redis": "7.1.1",
+ "connect-redis": "5.0.0",
"cookie-parser": "1.4.5",
"debug": "4.3.4",
"esm": "3.2.25",
- "express": "4.17.1",
+ "express": "4.20.0",
"express-http-proxy": "1.6.2",
"express-session": "1.18.0",
"express-static-gzip": "2.0.8",
@@ -204,7 +205,7 @@
"react-swipe": "6.0.4",
"react-truncate-markup": "5.1.0",
"recompose": "0.30.0",
- "redis": "4.6.13",
+ "redis": "2.8.0",
"relay-runtime": "16.2.0",
"serialize-javascript": "4.0.0",
"suncalc": "1.8.0",
@@ -265,7 +266,7 @@
"eslint-plugin-react": "7.33.2",
"eslint-plugin-react-hooks": "4.6.0",
"favicons-webpack-plugin": "4.2.0",
- "fetch-mock": "9.11.0",
+ "fetch-mock": "^12.0.2",
"file-loader": "5.0.2",
"git-precommit-checks": "3.0.0",
"graphql": "16.8.1",
@@ -293,7 +294,7 @@
"postcss-loader": "^4",
"prettier": "3.1.1",
"relay-compiler": "16.2.0",
- "rollup": "2.35.1",
+ "rollup": "2.79.2",
"rollup-plugin-babel": "4.4.0",
"rollup-plugin-commonjs": "10.1.0",
"rollup-plugin-peer-deps-external": "2.2.4",
diff --git a/sass/_main.scss b/sass/_main.scss
index 5c5f3534f5..dcf055ec56 100644
--- a/sass/_main.scss
+++ b/sass/_main.scss
@@ -12,6 +12,7 @@ $body-font-weight: $font-weight-medium;
@import 'base/elements';
@import '~zurb-foundation-5/scss/foundation/components/grid';
@import 'base/helper-classes-after-foundations';
+@import 'base/spacing';
// Some of these files override sass variables Foundation uses,
// so they must be loaded before the relevant foundation modules
@@ -63,6 +64,7 @@ $body-font-weight: $font-weight-medium;
@import '../app/component/itinerary/mobile-ticket-purchase-information';
@import 'base/button';
@import '../app/component/itinerary/navigator';
+@import '../app/component/itinerary/NavigatorIntro/navigator-intro';
/* Modal */
@import '~foundation-apps/scss/helpers/breakpoints';
diff --git a/sass/base/_helper-classes.scss b/sass/base/_helper-classes.scss
index 740b9e66e5..ec34c58e18 100644
--- a/sass/base/_helper-classes.scss
+++ b/sass/base/_helper-classes.scss
@@ -44,6 +44,10 @@
color: $ferry-color;
}
+.ferry-external {
+ color: $external-feed-color;
+}
+
.funicular {
color: $funicular-color;
}
diff --git a/sass/base/_spacing.scss b/sass/base/_spacing.scss
new file mode 100644
index 0000000000..9530e5b926
--- /dev/null
+++ b/sass/base/_spacing.scss
@@ -0,0 +1,32 @@
+$fixed-space-xxs: 4px;
+$fixed-space-xs: 8px;
+$fixed-space-s: 16px;
+$fixed-space-m: 24px;
+$fixed-space-l: 32px;
+$fixed-space-xl: 48px;
+$fixed-space-xxl: 64px;
+$fixed-space-xxxl: 80px;
+
+:root {
+ --space-xxs: #{$fixed-space-xxs};
+ --space-xs: #{$fixed-space-xs};
+ --space-s: #{$fixed-space-s};
+ --space-m: #{$fixed-space-m};
+ --space-l: #{$fixed-space-l};
+ --space-xl: #{$fixed-space-xl};
+ --space-xxl: #{$fixed-space-xxl};
+ --space-xxxl: #{$fixed-space-xxxl};
+}
+
+@media screen and (max-width: 900px) {
+ :root {
+ --space-xxs: #{$fixed-space-xxs};
+ --space-xs: #{$fixed-space-xxs};
+ --space-s: #{$fixed-space-xs};
+ --space-m: #{$fixed-space-s};
+ --space-l: #{$fixed-space-m};
+ --space-xl: #{$fixed-space-l};
+ --space-xxl: #{$fixed-space-xl};
+ --space-xxxl: #{$fixed-space-xxl};
+ }
+}
diff --git a/sass/themes/default/_theme.scss b/sass/themes/default/_theme.scss
index 746ee791dd..4ebcc77e15 100644
--- a/sass/themes/default/_theme.scss
+++ b/sass/themes/default/_theme.scss
@@ -62,6 +62,9 @@ $caution-icon-color: $white;
$caution-icon-font-color: none;
$top-bar-color: $primary-color;
$nav-content-color: false;
+$disclaimer-background-color: rgba(254, 209, 0, 0.1);
+$disclaimer-border-color: #fed100;
+$link-color-accessible: $primary-color;
/* Vehicle palette */
$airplane-color: $livi-airplane-blue;
@@ -75,12 +78,15 @@ $ferry-color: $livi-ferry-blue;
$funicular-color: $livi-funicular-pink;
$citybike-color: #f2b62d;
$citybike-off-color: #919191;
-$walk-color: #666;
+$walk-color: #000;
$wait-color: #979797;
$bicycle-color: #666;
$car-color: #333;
-$scooter-color: #bababa;
+$scooter-color: #c5cad2;
+$scooter-map-color: #666;
$call-agency-color: #666;
+$external-feed-color: #c5cad2;
+$external-feed-map-color: #666;
/* Fonts */
$font-family: 'Roboto', arial, georgia, serif;
@@ -89,6 +95,7 @@ $button-font-family: $font-family;
$font-weight-book: 400;
$font-weight-medium: 700;
$font-weight-map-container: $font-weight-book;
+$font-weight-disclaimer: $font-weight-medium;
$letter-spacing: 0;
$letter-spacing-front-page: -0.67px;
$font-family-narrow: 'Roboto Condensed', 'Arial Condensed', arial, georgia,
@@ -121,6 +128,7 @@ $padding-xlarge: 2em;
$border-radius-small: 2px;
$border-radius: 3px;
$border-radius-bigger: 8px;
+$border-radius-disclaimer: $border-radius;
$spinner-image: url('../default/default-spinner.png');
/* Navbar dimensions */
diff --git a/sass/themes/hameenlinna/_theme.scss b/sass/themes/hameenlinna/_theme.scss
index 85c8574e42..8efa1a652d 100644
--- a/sass/themes/hameenlinna/_theme.scss
+++ b/sass/themes/hameenlinna/_theme.scss
@@ -1,7 +1,7 @@
@import '../../base/waltti';
/* main theme colors */
-$primary-color: #f76013;
+$primary-color: rgb(196, 40, 31);
$secondary-color: darken($primary-color, 20%);
$hilight-color: $primary-color;
$action-color: $primary-color;
@@ -15,3 +15,6 @@ $desktop-title-color: $primary-color;
$desktop-title-arrow-icon-color: $secondary-color;
$link-color: $primary-color;
$top-bar-color: $primary-color;
+
+/* Navbar dimensions */
+$nav-logo-height: 4em;
diff --git a/sass/themes/hsl/_theme.scss b/sass/themes/hsl/_theme.scss
index 8958549ea6..ef98062cee 100644
--- a/sass/themes/hsl/_theme.scss
+++ b/sass/themes/hsl/_theme.scss
@@ -13,6 +13,7 @@ $hsl-metro-orange: #ca4000;
$hsl-bus-express: #ca4000;
$hsl-rail-red: #8c4799;
$hsl-ferry-blue: #007a97;
+$hsl-blue-accessible: #0074bf;
/* Application palette */
$primary-color: $hsl-blue;
@@ -31,6 +32,9 @@ $link-color: $primary-color;
$desktop-title-color: #007ac9;
$desktop-title-arrow-icon-color: $secondary-color;
$top-bar-color: $primary-color;
+$disclaimer-background-color: #e5f2fa;
+$disclaimer-border-color: #e5f2fa;
+$link-color-accessible: $hsl-blue-accessible;
/* Vehicle palette */
$airplane-color: #0046ad;
@@ -56,3 +60,7 @@ $font-family-narrow: 'Gotham XNarrow SSm A', 'Gotham XNarrow SSm B',
/* Spinner */
$spinner-image: url('hsl-spinner.png');
+$font-weight-disclaimer: 400 !important;
+
+/* Borders */
+$border-radius-disclaimer: 8px;
diff --git a/sass/themes/varely/_theme.scss b/sass/themes/varely/_theme.scss
index 853e8ce3d6..f3d155283c 100644
--- a/sass/themes/varely/_theme.scss
+++ b/sass/themes/varely/_theme.scss
@@ -12,7 +12,6 @@ $standalone-btn-color: $primary-color;
$link-color: $primary-color;
/* Component palette */
-$standalone-btn-color: #fff;
$desktop-title-color: $primary-color;
$desktop-title-arrow-icon-color: $white;
$link-color: $primary-color;
diff --git a/scripts/README.md b/scripts/README.md
index 0613f70d9f..f40d37425c 100644
--- a/scripts/README.md
+++ b/scripts/README.md
@@ -1,16 +1,20 @@
# Using scripts
-## Before using:
+## Before using
```
source ui.sh
```
## Usage examples
-Using remote instance of OTP with subscription key.
+Using remote instance of OTP with subscription key:
```
SUBSCRIPTION_KEY= ui hsl
```
-Using local instance of OTP on port `9080`.
+Using local instance of OTP on port `9080`:
+```
+SUBSCRIPTION_KEY= uiotp matka
+```
+In case you do not need features usable with a subscription key when running a local instance of OTP on port `9080`:
+```
+NO_SUBSCRIPTION_KEY=true uiotp matka
```
-uiotp matka
-```
\ No newline at end of file
diff --git a/scripts/ui.sh b/scripts/ui.sh
index 3c1cd304ea..a2f0da62a1 100755
--- a/scripts/ui.sh
+++ b/scripts/ui.sh
@@ -1,17 +1,22 @@
#!/usr/bin/env bash
ui () {
+ if [ "$SUBSCRIPTION_KEY" = "" -a "$NO_SUBSCRIPTION_KEY" != "true" ]; then
+ echo "In order to use the UI you need to set the SUBSCRIPTION_KEY environment variable."
+ echo "If you want to run the UI without a subscription key, set NO_SUBSCRIPTION_KEY=true."
+ return 1 2>/dev/null
+ fi
CONFIG=$1 API_SUBSCRIPTION_QUERY_PARAMETER_NAME=digitransit-subscription-key API_SUBSCRIPTION_HEADER_NAME=digitransit-subscription-key API_SUBSCRIPTION_TOKEN=$SUBSCRIPTION_KEY yarn run dev
}
uiotp () {
if [ "$1" = "hsl" ]; then
- OTP_URL=http://localhost:9080/otp/routers/hsl/ ui hsl
+ OTP_URL=http://localhost:9080/otp/ ui hsl
elif [ "$1" = "matka" ]; then
- OTP_URL=http://localhost:9080/otp/routers/finland/ ui matka
+ OTP_URL=http://localhost:9080/otp/ ui matka
elif [ "$1" = "kela" ]; then
- OTP_URL=http://localhost:9080/otp/routers/kela/ ui kela
+ OTP_URL=http://localhost:9080/otp/ ui kela
else
- OTP_URL=http://localhost:9080/otp/routers/waltti/ ui $1
+ OTP_URL=http://localhost:9080/otp/ ui $1
fi
}
diff --git a/server/passport-openid-connect/openidConnect.js b/server/passport-openid-connect/openidConnect.js
index 16b86dbb05..df6dcd677e 100644
--- a/server/passport-openid-connect/openidConnect.js
+++ b/server/passport-openid-connect/openidConnect.js
@@ -4,7 +4,7 @@ const session = require('express-session');
const redis = require('redis');
const axios = require('axios');
const moment = require('moment');
-const RedisStore = require('connect-redis').default;
+const RedisStore = require('connect-redis')(session);
const LoginStrategy = require('./Strategy').Strategy;
const clearAllUserSessions = false; // set true if logout should erase all user's sessions
@@ -28,13 +28,13 @@ export default function setUpOIDC(app, port, indexPath, hostnames) {
const RedisHost = process.env.REDIS_HOST || 'localhost';
const RedisPort = process.env.REDIS_PORT || 6379;
- const RedisProtocol = process.env.REDIS_HOST ? 'rediss' : 'redis';
- const RedisURL = `${RedisProtocol}://${RedisHost}:${RedisPort}`;
const RedisKey = process.env.REDIS_KEY;
const RedisClient = RedisKey
- ? redis.createClient({ url: RedisURL, password: RedisKey })
- : redis.createClient({ url: RedisURL });
- RedisClient.connect().catch(console.error);
+ ? redis.createClient(RedisPort, RedisHost, {
+ auth_pass: RedisKey,
+ tls: { servername: RedisHost },
+ })
+ : redis.createClient(RedisPort, RedisHost);
const redirectUris = hostnames.map(host => `${host}${callbackPath}`);
const postLogoutRedirectUris = hostnames.map(
@@ -61,7 +61,7 @@ export default function setUpOIDC(app, port, indexPath, hostnames) {
console.log(`adding session for used ${userId} id ${sessionId}`);
}
if (clearAllUserSessions) {
- RedisClient.sAdd(`sessions-${userId}`, sessionId);
+ RedisClient.sadd(`sessions-${userId}`, sessionId);
}
},
});
@@ -125,6 +125,8 @@ export default function setUpOIDC(app, port, indexPath, hostnames) {
session({
secret: process.env.SESSION_SECRET || 'reittiopas_secret',
store: new RedisStore({
+ host: RedisHost,
+ port: RedisPort,
client: RedisClient,
ttl: 60 * 60 * 24 * 60,
}),
@@ -204,7 +206,7 @@ export default function setUpOIDC(app, port, indexPath, hostnames) {
}
const sessions = `sessions-${req.session.userId}`;
req.logout({}, () => {
- RedisClient.sMembers(sessions).then(sessionIds => {
+ RedisClient.smembers(sessions, function (err, sessionIds) {
req.session.destroy(function () {
res.clearCookie('connect.sid');
if (sessionIds && sessionIds.length > 0) {
diff --git a/server/server.js b/server/server.js
index 5f1e18e3b8..ae2c0c5f98 100644
--- a/server/server.js
+++ b/server/server.js
@@ -261,12 +261,7 @@ function setUpAvailableTickets() {
? `?${config.API_SUBSCRIPTION_QUERY_PARAMETER_NAME}=${config.API_SUBSCRIPTION_TOKEN}`
: '';
// try to fetch available ticketTypes every four seconds with 4 retries
- retryFetch(
- `${config.URL.OTP}index/graphql${queryParameters}`,
- 4,
- 4000,
- options,
- )
+ retryFetch(`${config.URL.OTP}gtfs/v1${queryParameters}`, 4, 4000, options)
.then(res => res.json())
.then(
result => {
@@ -286,7 +281,7 @@ function setUpAvailableTickets() {
console.log('failed to load availableTickets at launch, retrying');
// Continue attempts to fetch available ticketTypes in the background for one day once every minute
retryFetch(
- `${config.URL.OTP}index/graphql${queryParameters}`,
+ `${config.URL.OTP}gtfs/v1${queryParameters}`,
1440,
60000,
options,
diff --git a/static/assets/geojson/hml_zone_lines_20230214.geojson b/static/assets/geojson/hml_zone_lines_20230214.geojson
index 5e3f256219..48a5a807ac 100644
--- a/static/assets/geojson/hml_zone_lines_20230214.geojson
+++ b/static/assets/geojson/hml_zone_lines_20230214.geojson
@@ -1 +1 @@
-{"type":"FeatureCollection","generator":"JOSM","features":[{"type":"Feature","properties":{"Name":"A","icon":{"id":"hml-hml-icon-zone-a","svg":""}},"geometry":{"type":"Point","coordinates":[24.4575,60.9971]}},{"type":"Feature","properties":{"Name":"B","icon":{"id":"hml-icon-zone-b","svg":""}},"geometry":{"type":"MultiPoint","coordinates":[[24.276,61.0441],[24.6137,60.9243]]}},{"type":"Feature","properties":{"Name":"C","icon":{"id":"hml-icon-zone-c","svg":""}},"geometry":{"type":"MultiPoint","coordinates":[[24.0097,61.0241],[24.9588,61.1327],[24.5314,60.8211]]}},{"type":"Feature","properties":{"Name":"D","icon":{"id":"hml-icon-zone-d","svg":""}},"geometry":{"type":"Point","coordinates":[24.7224,60.7024]}},{"type":"Feature","properties":{"Name":"E","icon":{"id":"hml-icon-zone-e","svg":""}},"geometry":{"type":"MultiPoint","coordinates":[[25.1669,60.9758],[25.697,61.1711],[25.9003,60.8275]]}},{"type":"Feature","properties":{"Name":"F","icon":{"id":"hml-icon-zone-f","svg":""}},"geometry":{"type":"MultiPoint","coordinates":[[25.5157,61.0477],[25.8151,60.9024]]}},{"type":"Feature","properties":{"Name":"G","icon":{"id":"hml-icon-zone-g","svg":""}},"geometry":{"type":"Point","coordinates":[25.6421,60.9824]}},{"type":"Feature","properties":{"Id":"7"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[24.7145,60.7966],[24.7279,60.7957],[24.7344,60.7954],[24.7798,60.7839],[24.8153,60.7795],[24.8131,60.7766],[24.8283,60.7736],[24.8364,60.7761],[24.8221,60.7566],[24.8331,60.7573],[24.8403,60.7528],[24.8306,60.7492],[24.8447,60.7352],[24.829,60.7277],[24.8225,60.7192],[24.8277,60.7125],[24.8137,60.7091],[24.8039,60.702],[24.8156,60.6973],[24.8339,60.6818],[24.8351,60.6663],[24.8183,60.6685],[24.8095,60.6728],[24.7793,60.6539],[24.7642,60.6599],[24.7563,60.6545],[24.7493,60.6496],[24.7399,60.6475],[24.6913,60.6493],[24.6518,60.6602],[24.6391,60.6588],[24.6159,60.6676],[24.6134,60.6739],[24.6197,60.6844],[24.6056,60.6928],[24.6876,60.7256],[24.6907,60.7515]]}},{"type":"Feature","properties":{"Id":"3"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[24.6907,60.7515],[24.6706,60.773],[24.6531,60.7679],[24.6229,60.7797],[24.6237,60.756],[24.6026,60.7585],[24.5588,60.7641],[24.5595,60.765],[24.5574,60.7653],[24.5549,60.7648],[24.5531,60.7632],[24.5529,60.7635],[24.5512,60.7634],[24.5498,60.763],[24.5485,60.7603],[24.5471,60.7601],[24.545,60.7592],[24.5442,60.7576],[24.5413,60.7573],[24.5372,60.7573],[24.5345,60.7554],[24.5351,60.7551],[24.5383,60.7541],[24.5396,60.753],[24.5379,60.7522],[24.534,60.7527],[24.5322,60.7539],[24.5297,60.7537],[24.527,60.7523],[24.526,60.7508],[24.5233,60.7501],[24.5231,60.7488],[24.5216,60.7475],[24.5124,60.7502],[24.5039,60.754],[24.4908,60.7444],[24.4751,60.7472],[24.4359,60.7602],[24.4145,60.7565],[24.398,60.754],[24.3347,60.7946],[24.3114,60.7943],[24.2954,60.7983],[24.2793,60.7963],[24.2531,60.786],[24.2168,60.8125],[24.1755,60.8204],[24.1287,60.8192],[24.099,60.7963],[24.0922,60.7853],[24.0762,60.79],[24.0713,60.7911],[24.0706,60.792],[24.0632,60.7934],[24.0618,60.7969],[24.0396,60.8177],[24.0403,60.82],[24.0367,60.8204],[24.03,60.8231],[24.043,60.8254],[24.0447,60.8249],[24.0537,60.8303],[24.0596,60.8348],[23.9887,60.8794],[24.0216,60.9284],[23.9947,60.9359],[23.9867,60.9367],[23.9759,60.9404],[23.9635,60.9446],[23.9532,60.9463],[23.9667,60.9545],[23.9697,60.9553],[23.9709,60.9567],[23.9664,60.9572],[23.9586,60.9578],[23.9555,60.9571],[23.9478,60.9605],[23.9455,60.9604],[23.9433,60.9596],[23.942,60.9619],[23.9389,60.9639],[23.9361,60.9663],[23.9352,60.9662],[23.936,60.9637],[23.9409,60.9613],[23.9416,60.9597],[23.9064,60.9681],[23.8808,60.9737],[23.8794,60.9721],[23.8746,60.9737],[23.8658,60.9722],[23.8681,60.9715],[23.8658,60.9702],[23.8585,60.9726],[23.8563,60.9716],[23.8526,60.9804],[23.8247,60.9955],[23.815,61.0007],[23.8342,61.0026],[23.8338,61.01],[23.8358,61.0099],[23.8375,61.0092],[23.8358,61.0085],[23.8356,61.0074],[23.8377,61.0068],[23.8417,61.0072],[23.845,61.008],[23.8455,61.0095],[23.8464,61.0114],[23.8503,61.0128],[23.8547,61.0129],[23.8555,61.0117],[23.8574,61.012],[23.8585,61.0136],[23.862,61.0154],[23.8651,61.0149],[23.869,61.0167],[23.8681,61.0174],[23.871,61.018],[23.8742,61.0185],[23.876,61.0196],[23.878,61.0212],[23.8787,61.0224],[23.8745,61.0251],[23.8701,61.0285],[23.868,61.032],[23.8662,61.0373],[23.8214,61.0292],[23.7923,61.0249],[23.8047,61.036],[23.7956,61.0437],[23.8035,61.051],[23.7565,61.0574],[23.7864,61.0725],[23.7836,61.0735],[23.7842,61.0742],[23.7883,61.0734],[23.7975,61.0765],[23.8035,61.0793],[23.8253,61.0823],[23.8451,61.0744],[23.898,61.0853],[23.9078,61.0869],[23.9061,61.0884],[23.9085,61.0892],[23.9096,61.0883],[23.913,61.0892],[23.9139,61.0905],[23.9199,61.092],[23.9197,61.0904],[23.9239,61.0901],[23.9237,61.0881],[23.9213,61.0842],[23.9237,61.0837],[23.9253,61.085],[23.9258,61.088],[23.9258,61.0898],[23.9288,61.0895],[23.9283,61.0903],[23.9267,61.0911],[23.9246,61.0933],[23.935,61.0959],[23.9477,61.0993],[23.9572,61.1017],[23.9581,61.102],[24.0105,61.1155],[24.0261,61.1196],[24.0235,61.1208],[24.0256,61.1222],[24.0369,61.1248],[24.0411,61.1225],[24.0466,61.1244],[24.0516,61.1218],[24.0519,61.1204],[24.0621,61.1187],[24.0657,61.121],[24.0645,61.1221],[24.0643,61.123],[24.0894,61.1258],[24.11,61.1283],[24.1413,61.123],[24.1421,61.1247],[24.1439,61.1259],[24.1433,61.1274],[24.1439,61.129],[24.1413,61.1291],[24.1388,61.1314],[24.135,61.1328],[24.1337,61.1383],[24.1393,61.1434],[24.156,61.144],[24.1827,61.1451],[24.1941,61.1464],[24.2309,61.1501],[24.2353,61.1518],[24.297,61.1916],[24.2655,61.2087],[24.2578,61.2183],[24.2622,61.2227],[24.2656,61.2251],[24.2668,61.226],[24.2695,61.2256],[24.2731,61.229],[24.2686,61.2304],[24.2747,61.2348],[24.2768,61.2349],[24.2822,61.2405],[24.3018,61.2333],[24.3312,61.238],[24.3491,61.241],[24.3574,61.2422],[24.365,61.244],[24.3862,61.2496],[24.395,61.2478],[24.3994,61.2469],[24.4028,61.2536],[24.4117,61.2568],[24.4188,61.257],[24.4199,61.2549],[24.4179,61.2533],[24.4189,61.2529],[24.4201,61.2533],[24.4225,61.2549],[24.4259,61.2574],[24.43,61.2635],[24.4475,61.2698],[24.4554,61.2677],[24.4581,61.2681],[24.4651,61.2701],[24.4687,61.2723],[24.4757,61.2753],[24.4833,61.278],[24.4837,61.2791],[24.4857,61.279],[24.4925,61.2816],[24.5171,61.2898],[24.5264,61.2923],[24.5467,61.2973],[24.5545,61.299],[24.5605,61.3005],[24.5625,61.3001],[24.562,61.3009],[24.5628,61.3013],[24.5643,61.3007],[24.5647,61.3015],[24.5732,61.3037],[24.5791,61.3005],[24.5815,61.2983],[24.584,61.2976],[24.5851,61.2946],[24.5845,61.2929],[24.5869,61.2926],[24.5895,61.2882],[24.5946,61.2912],[24.6207,61.286],[24.6369,61.2825],[24.6376,61.2833],[24.6413,61.2825],[24.6406,61.2819],[24.6536,61.2793],[24.6661,61.2767],[24.6692,61.2776],[24.6704,61.2788],[24.6871,61.2798],[24.6913,61.2778],[24.7023,61.2726],[24.7083,61.2725],[24.7126,61.2761],[24.717,61.2794],[24.7168,61.283],[24.7181,61.2837],[24.7197,61.2987],[24.7318,61.3174],[24.7467,61.2979],[24.7564,61.286],[24.7706,61.2678],[24.8059,61.2727],[24.8122,61.2725],[24.8143,61.2735],[24.826,61.276],[24.8341,61.2754],[24.8416,61.2746],[24.8437,61.2755],[24.8448,61.2775],[24.8465,61.2785],[24.8914,61.2878],[24.8781,61.2979],[24.914,61.3246],[24.9172,61.3214],[24.9162,61.3164],[24.9156,61.3154],[24.9151,61.3143],[24.9153,61.314],[24.9214,61.3139],[24.921,61.3006],[24.921,61.286],[24.923,61.2831],[24.9263,61.2821],[24.9285,61.281],[24.931,61.2806],[24.9333,61.281],[24.9357,61.2834],[24.9408,61.2854],[24.9404,61.2869],[24.9442,61.2882],[24.9457,61.2896],[24.9474,61.2908],[24.9503,61.2896],[24.9546,61.2867],[24.9555,61.2834],[24.9594,61.281],[24.963,61.2811],[24.9648,61.2814],[24.9662,61.2784],[24.973,61.2762],[24.9766,61.2757],[24.982,61.2758],[24.988,61.2762],[24.9898,61.2777],[24.9999,61.2832],[25.0057,61.2862],[25.0118,61.2903],[25.0142,61.2908],[25.0141,61.2883],[25.0142,61.2853],[25.0126,61.2823],[25.0129,61.2787],[25.0161,61.2747],[25.029,61.2464],[25.0643,61.251],[25.0964,61.2558],[25.131,61.2515],[25.1674,61.2436],[25.1864,61.2402],[25.203,61.2411],[25.2008,61.2286],[25.1999,61.2219],[25.2066,61.2198],[25.2131,61.218],[25.2183,61.2141],[25.2233,61.2123],[25.2303,61.2073],[25.2344,61.2035],[25.2346,61.1994],[25.2405,61.1973],[25.2484,61.1952],[25.2558,61.1948],[25.2534,61.1924],[25.253,61.1895],[25.2604,61.1856],[25.2593,61.1821],[25.2554,61.1786],[25.2501,61.1763],[25.2508,61.175],[25.2535,61.1741],[25.2525,61.1727],[25.2538,61.1718],[25.2569,61.1716],[25.2551,61.1704],[25.2546,61.1693],[25.2555,61.168],[25.2545,61.167],[25.2577,61.1649],[25.2586,61.1628],[25.2619,61.161],[25.2698,61.1583],[25.2694,61.1569],[25.258,61.1595],[25.2561,61.1539],[25.2525,61.1479],[25.2466,61.1471],[25.2404,61.1448],[25.2361,61.1401],[25.246,61.1313],[25.2589,61.1284],[25.2545,61.1254],[25.2461,61.1242],[25.2444,61.1206],[25.2397,61.1146],[25.2262,61.1113],[25.2131,61.1036]]}},{"type":"Feature","properties":{"Id":"4"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[25.2131,61.1036],[25.2127,61.1034],[25.1981,61.0762],[25.1701,61.074],[25.1523,61.063],[25.057,61.0501],[25.0551,61.0484],[25.0532,61.0466],[25.0497,61.0434],[25.0452,61.0393],[25.0396,61.0343],[25.0344,61.0327],[25.0287,61.0309],[25.0454,61.0166],[25.0382,61.0118],[25.0351,61.0097],[25.0261,61.0043],[25.0274,60.9936],[25.0483,60.993],[25.0594,60.9859],[25.0403,60.9676],[25.0259,60.9617],[25.0075,60.9279],[25.0275,60.9278]]}},{"type":"Feature","properties":{"Id":"2"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[24.6924,60.9094],[24.6951,60.911],[24.6867,60.9439],[24.7246,61.0626],[24.7172,61.0743],[24.6907,61.0832],[24.5007,61.1023],[24.3369,61.1227],[24.2689,61.1061],[24.2501,61.0741],[24.203,61.0497],[24.2169,60.9935],[24.253,60.8937],[24.2695,60.8863],[24.3113,60.8894],[24.4562,60.8851],[24.603,60.8949],[24.6924,60.9094]]}},{"type":"Feature","properties":{"Id":"6"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[24.7145,60.7966],[24.7328,60.7765],[24.7495,60.7585],[24.6907,60.7515]]}},{"type":"Feature","properties":{"Id":"9"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[25.3255,60.9088],[25.3469,60.9001],[25.3699,60.8933],[25.3804,60.8899],[25.4033,60.8836],[25.4436,60.8751],[25.4785,60.8668],[25.5078,60.8524],[25.5283,60.8448],[25.5445,60.8388],[25.5661,60.8341],[25.5877,60.8304],[25.608,60.8285],[25.6456,60.8268],[25.6888,60.8261],[25.7354,60.8292],[25.7931,60.835],[25.8346,60.8415],[25.8799,60.8511],[25.9118,60.8611],[25.9573,60.8773],[25.991,60.8888],[26.0197,60.908],[26.0288,60.914],[26.0341,60.9199],[26.0367,60.9277],[26.0327,60.9444],[26.027,60.9553],[26.0132,60.9751],[25.9929,61.001],[25.9766,61.0209],[25.9569,61.039],[25.9131,61.0669],[25.8858,61.0839],[25.8658,61.0951],[25.8429,61.1028],[25.8144,61.1124],[25.7814,61.1206],[25.7388,61.128],[25.703,61.1317],[25.6624,61.1334],[25.6414,61.1332],[25.6035,61.1312],[25.5661,61.1269],[25.5198,61.1185],[25.491,61.1101],[25.4603,61.0993],[25.4326,61.0868],[25.4136,61.0798],[25.3934,61.0736],[25.3671,61.0654],[25.351,61.0593],[25.3309,61.0512],[25.2894,61.0319],[25.279,61.0269],[25.2685,61.0216],[25.2628,61.0182],[25.261,61.0152],[25.257,61.0078],[25.2614,60.9916],[25.2817,60.9605],[25.3031,60.9347],[25.3255,60.9088]]}},{"type":"Feature","properties":{"Id":"5"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[25.0275,60.9278],[25.0303,60.924],[25.0356,60.917],[25.0228,60.9148],[25.0229,60.9148],[25.0229,60.9147],[25.0229,60.9146],[25.0227,60.9146],[25.0226,60.9146],[25.0225,60.9145],[25.0225,60.9144],[25.0226,60.9143],[25.0227,60.9142],[25.0228,60.9142],[25.0228,60.9141],[25.023,60.914],[25.0231,60.914],[25.0232,60.914],[25.0235,60.9139],[25.0236,60.9139],[25.0237,60.9138],[25.0238,60.9137],[25.0239,60.9137],[25.0242,60.9136],[25.0246,60.9135],[25.0247,60.9135],[25.0248,60.9134],[25.025,60.9134],[25.0249,60.9133],[25.0247,60.9133],[25.0247,60.9132],[25.0247,60.9131],[25.0248,60.9129],[25.0249,60.9126],[25.0249,60.9125],[25.025,60.9122],[25.025,60.9119],[25.0248,60.9115],[25.0198,60.9117],[25.0199,60.9124],[25.0137,60.9126],[25.0135,60.9115],[25.0116,60.9109],[25.0059,60.9091],[24.9974,60.9065],[24.9914,60.9111],[24.9805,60.9077],[24.9927,60.8999],[24.9638,60.892],[24.9653,60.8864],[24.9525,60.8879],[24.9384,60.8898],[24.9361,60.891],[24.9347,60.8907],[24.9373,60.8885],[24.94,60.8877],[24.9389,60.886],[24.9386,60.8837],[24.9408,60.8825],[24.9427,60.8823],[24.9447,60.8805],[24.9456,60.8778],[24.9469,60.8721],[24.9525,60.8669],[24.9523,60.8647],[24.9507,60.8607],[24.9489,60.8613],[24.9446,60.8574],[24.9467,60.8575],[24.9475,60.8573],[24.9466,60.8535],[24.9428,60.8503],[24.9421,60.8484],[24.9421,60.8467],[24.9373,60.8471],[24.9347,60.8474],[24.9313,60.8456],[24.9313,60.8446],[24.9286,60.8444],[24.9263,60.8443],[24.9233,60.845],[24.9208,60.8459],[24.9167,60.8465],[24.9139,60.8464],[24.9137,60.8423],[24.9096,60.8406],[24.9073,60.8406],[24.9055,60.8409],[24.906,60.8393],[24.904,60.8392],[24.9019,60.8393],[24.9001,60.8388],[24.8914,60.8385],[24.8896,60.8396],[24.8882,60.8409],[24.8856,60.8422],[24.8838,60.8444],[24.8822,60.8457],[24.8801,60.8463],[24.8777,60.8472],[24.8769,60.8476],[24.8713,60.8485],[24.8664,60.8494],[24.8632,60.8502],[24.8603,60.8521],[24.8579,60.8524],[24.8556,60.8524],[24.8529,60.8532],[24.8521,60.8536],[24.8512,60.8555],[24.8483,60.8572],[24.8461,60.8582],[24.8441,60.8599],[24.8424,60.8607],[24.84,60.8601],[24.8408,60.8612],[24.8437,60.8614],[24.8439,60.8619],[24.8435,60.8628],[24.8436,60.8639],[24.8452,60.8642],[24.8465,60.8661],[24.8175,60.8678],[24.8095,60.8688],[24.8096,60.8552],[24.8086,60.8549],[24.8066,60.8528],[24.8056,60.8506],[24.8014,60.8487],[24.7962,60.8467],[24.7961,60.8444],[24.7975,60.8424],[24.7955,60.8412],[24.7952,60.8388],[24.7972,60.8362],[24.7953,60.8338],[24.793,60.8322],[24.7921,60.8319],[24.7903,60.8327],[24.7877,60.837],[24.7847,60.8391],[24.7328,60.836],[24.725,60.8168],[24.7197,60.8092],[24.7148,60.8042],[24.7127,60.7993],[24.7145,60.7966]]}},{"type":"Feature","properties":{"Id":"8"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[25.608,61.0111],[25.6006,61.0075],[25.5943,61.0035],[25.5884,60.9989],[25.5861,60.9954],[25.5831,60.99],[25.582,60.9848],[25.5823,60.9803],[25.5828,60.9775],[25.5832,60.975],[25.5867,60.9701],[25.5889,60.9676],[25.5908,60.9653],[25.5987,60.9561],[25.6057,60.9511],[25.618,60.9468],[25.6263,60.9451],[25.6426,60.9436],[25.6523,60.9433],[25.6594,60.9433],[25.6664,60.9438],[25.6778,60.9449],[25.6847,60.9464],[25.6909,60.9484],[25.697,60.9508],[25.7013,60.9535],[25.7099,60.9584],[25.7199,60.9646],[25.7271,60.972],[25.7307,60.9805],[25.7323,60.988],[25.7301,60.9937],[25.7257,61.0007],[25.7236,61.0029],[25.7147,61.0109],[25.7025,61.0138],[25.6867,61.0161],[25.668,61.0168],[25.6535,61.0174],[25.6448,61.017],[25.6355,61.0163],[25.6238,61.0145],[25.6159,61.013],[25.608,61.0111]]}},{"type":"Feature","properties":{"Id":"10"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[25.0275,60.9278],[25.0463,60.9277],[25.0938,60.919],[25.0975,60.905],[25.1224,60.8986],[25.1895,60.8905],[25.2249,60.882],[25.2457,60.8664],[25.251,60.8578],[25.2889,60.8328],[25.3574,60.8004],[25.4136,60.7792],[25.4333,60.7954],[25.4745,60.7927],[25.4973,60.7667],[25.6452,60.7706],[25.6666,60.771],[25.7256,60.772],[25.7809,60.7769],[25.8497,60.7865],[25.8739,60.7913],[25.9141,60.8048],[25.9528,60.8163],[25.982,60.8255],[26.099,60.856],[26.1395,60.867],[26.1658,60.9102],[26.177,60.928],[26.176,60.9464],[26.1438,61.0137],[26.1241,61.0755],[26.087,61.0977],[26.0645,61.1138],[25.9923,61.1482],[25.9641,61.1594],[25.9282,61.1709],[25.8678,61.1874],[25.8027,61.2007],[25.7498,61.2067],[25.6916,61.2099],[25.6419,61.2106],[25.589,61.2083],[25.5348,61.2039],[25.4869,61.1959],[25.461,61.1898],[25.4219,61.1778],[25.3644,61.1499],[25.3271,61.1326],[25.2909,61.1107],[25.2626,61.1066],[25.2131,61.1036]]}},{"type":"Feature","properties":{"Id":"1"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[24.5895,60.9742],[24.5937,60.9709],[24.5878,60.9619],[24.5843,60.9597],[24.5688,60.9568],[24.557,60.9545],[24.5463,60.9572],[24.541,60.9465],[24.5304,60.9412],[24.5207,60.9392],[24.4083,60.953],[24.3794,60.9642],[24.3535,60.9799],[24.3399,60.9984],[24.3731,61.0177],[24.3804,61.0284],[24.4132,61.0325],[24.4385,61.0373],[24.472,61.0422],[24.4781,61.0354],[24.5131,61.0413],[24.5736,61.0145],[24.5993,60.9794],[24.5895,60.9742]]}}]}
\ No newline at end of file
+{"type":"FeatureCollection","generator":"JOSM","features":[{"type":"Feature","properties":{"Name":"A","icon":{"id":"hml-hml-icon-zone-a","svg":""}},"geometry":{"type":"Point","coordinates":[24.4575,60.9971]}},{"type":"Feature","properties":{"Name":"B","icon":{"id":"hml-icon-zone-b","svg":""}},"geometry":{"type":"MultiPoint","coordinates":[[24.276,61.0441],[24.6137,60.9243]]}},{"type":"Feature","properties":{"Name":"C","icon":{"id":"hml-icon-zone-c","svg":""}},"geometry":{"type":"MultiPoint","coordinates":[[24.0097,61.0241],[24.9588,61.1327],[24.5314,60.8211]]}},{"type":"Feature","properties":{"Name":"D","icon":{"id":"hml-icon-zone-d","svg":""}},"geometry":{"type":"Point","coordinates":[24.7224,60.7024]}},{"type":"Feature","properties":{"Name":"E","icon":{"id":"hml-icon-zone-e","svg":""}},"geometry":{"type":"MultiPoint","coordinates":[[25.1669,60.9758],[25.697,61.1711],[25.9003,60.8275]]}},{"type":"Feature","properties":{"Name":"F","icon":{"id":"hml-icon-zone-f","svg":""}},"geometry":{"type":"MultiPoint","coordinates":[[25.5157,61.0477],[25.8151,60.9024]]}},{"type":"Feature","properties":{"Name":"G","icon":{"id":"hml-icon-zone-g","svg":""}},"geometry":{"type":"Point","coordinates":[25.6421,60.9824]}},{"type":"Feature","properties":{"Id":"7"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[24.7145,60.7966],[24.7279,60.7957],[24.7344,60.7954],[24.7798,60.7839],[24.8153,60.7795],[24.8131,60.7766],[24.8283,60.7736],[24.8364,60.7761],[24.8221,60.7566],[24.8331,60.7573],[24.8403,60.7528],[24.8306,60.7492],[24.8447,60.7352],[24.829,60.7277],[24.8225,60.7192],[24.8277,60.7125],[24.8137,60.7091],[24.8039,60.702],[24.8156,60.6973],[24.8339,60.6818],[24.8351,60.6663],[24.8183,60.6685],[24.8095,60.6728],[24.7793,60.6539],[24.7642,60.6599],[24.7563,60.6545],[24.7493,60.6496],[24.7399,60.6475],[24.6913,60.6493],[24.6518,60.6602],[24.6391,60.6588],[24.6159,60.6676],[24.6134,60.6739],[24.6197,60.6844],[24.6056,60.6928],[24.6876,60.7256],[24.6907,60.7515]]}},{"type":"Feature","properties":{"Id":"3"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[24.6907,60.7515],[24.6706,60.773],[24.6531,60.7679],[24.6229,60.7797],[24.6237,60.756],[24.6026,60.7585],[24.5588,60.7641],[24.5595,60.765],[24.5574,60.7653],[24.5549,60.7648],[24.5531,60.7632],[24.5529,60.7635],[24.5512,60.7634],[24.5498,60.763],[24.5485,60.7603],[24.5471,60.7601],[24.545,60.7592],[24.5442,60.7576],[24.5413,60.7573],[24.5372,60.7573],[24.5345,60.7554],[24.5351,60.7551],[24.5383,60.7541],[24.5396,60.753],[24.5379,60.7522],[24.534,60.7527],[24.5322,60.7539],[24.5297,60.7537],[24.527,60.7523],[24.526,60.7508],[24.5233,60.7501],[24.5231,60.7488],[24.5216,60.7475],[24.5124,60.7502],[24.5039,60.754],[24.4908,60.7444],[24.4751,60.7472],[24.4359,60.7602],[24.4145,60.7565],[24.398,60.754],[24.3347,60.7946],[24.3114,60.7943],[24.2954,60.7983],[24.2793,60.7963],[24.2531,60.786],[24.2168,60.8125],[24.1755,60.8204],[24.1287,60.8192],[24.099,60.7963],[24.0922,60.7853],[24.0762,60.79],[24.0713,60.7911],[24.0706,60.792],[24.0632,60.7934],[24.0618,60.7969],[24.0396,60.8177],[24.0403,60.82],[24.0367,60.8204],[24.03,60.8231],[24.043,60.8254],[24.0447,60.8249],[24.0537,60.8303],[24.0596,60.8348],[23.9887,60.8794],[24.0216,60.9284],[23.9947,60.9359],[23.9867,60.9367],[23.9759,60.9404],[23.9635,60.9446],[23.9532,60.9463],[23.9667,60.9545],[23.9697,60.9553],[23.9709,60.9567],[23.9664,60.9572],[23.9586,60.9578],[23.9555,60.9571],[23.9478,60.9605],[23.9455,60.9604],[23.9433,60.9596],[23.942,60.9619],[23.9389,60.9639],[23.9361,60.9663],[23.9352,60.9662],[23.936,60.9637],[23.9409,60.9613],[23.9416,60.9597],[23.9064,60.9681],[23.8808,60.9737],[23.8794,60.9721],[23.8746,60.9737],[23.8658,60.9722],[23.8681,60.9715],[23.8658,60.9702],[23.8585,60.9726],[23.8563,60.9716],[23.8526,60.9804],[23.8247,60.9955],[23.815,61.0007],[23.8342,61.0026],[23.8338,61.01],[23.8358,61.0099],[23.8375,61.0092],[23.8358,61.0085],[23.8356,61.0074],[23.8377,61.0068],[23.8417,61.0072],[23.845,61.008],[23.8455,61.0095],[23.8464,61.0114],[23.8503,61.0128],[23.8547,61.0129],[23.8555,61.0117],[23.8574,61.012],[23.8585,61.0136],[23.862,61.0154],[23.8651,61.0149],[23.869,61.0167],[23.8681,61.0174],[23.871,61.018],[23.8742,61.0185],[23.876,61.0196],[23.878,61.0212],[23.8787,61.0224],[23.8745,61.0251],[23.8701,61.0285],[23.868,61.032],[23.8662,61.0373],[23.8214,61.0292],[23.7923,61.0249],[23.8047,61.036],[23.7956,61.0437],[23.8035,61.051],[23.7565,61.0574],[23.7864,61.0725],[23.7836,61.0735],[23.7842,61.0742],[23.7883,61.0734],[23.7975,61.0765],[23.8035,61.0793],[23.8253,61.0823],[23.8451,61.0744],[23.898,61.0853],[23.9078,61.0869],[23.9061,61.0884],[23.9085,61.0892],[23.9096,61.0883],[23.913,61.0892],[23.9139,61.0905],[23.9199,61.092],[23.9197,61.0904],[23.9239,61.0901],[23.9237,61.0881],[23.9213,61.0842],[23.9237,61.0837],[23.9253,61.085],[23.9258,61.088],[23.9258,61.0898],[23.9288,61.0895],[23.9283,61.0903],[23.9267,61.0911],[23.9246,61.0933],[23.935,61.0959],[23.9477,61.0993],[23.9572,61.1017],[23.9581,61.102],[24.0105,61.1155],[24.0261,61.1196],[24.0235,61.1208],[24.0256,61.1222],[24.0369,61.1248],[24.0411,61.1225],[24.0466,61.1244],[24.0516,61.1218],[24.0519,61.1204],[24.0621,61.1187],[24.0657,61.121],[24.0645,61.1221],[24.0643,61.123],[24.0894,61.1258],[24.11,61.1283],[24.1413,61.123],[24.1421,61.1247],[24.1439,61.1259],[24.1433,61.1274],[24.1439,61.129],[24.1413,61.1291],[24.1388,61.1314],[24.135,61.1328],[24.1337,61.1383],[24.1393,61.1434],[24.156,61.144],[24.1827,61.1451],[24.1941,61.1464],[24.2309,61.1501],[24.2353,61.1518],[24.297,61.1916],[24.2655,61.2087],[24.2578,61.2183],[24.2622,61.2227],[24.2656,61.2251],[24.2668,61.226],[24.2695,61.2256],[24.2731,61.229],[24.2686,61.2304],[24.2747,61.2348],[24.2768,61.2349],[24.2822,61.2405],[24.3018,61.2333],[24.3312,61.238],[24.3491,61.241],[24.3574,61.2422],[24.365,61.244],[24.3862,61.2496],[24.395,61.2478],[24.3994,61.2469],[24.4028,61.2536],[24.4117,61.2568],[24.4188,61.257],[24.4199,61.2549],[24.4179,61.2533],[24.4189,61.2529],[24.4201,61.2533],[24.4225,61.2549],[24.4259,61.2574],[24.43,61.2635],[24.4475,61.2698],[24.4554,61.2677],[24.4581,61.2681],[24.4651,61.2701],[24.4687,61.2723],[24.4757,61.2753],[24.4833,61.278],[24.4837,61.2791],[24.4857,61.279],[24.4925,61.2816],[24.5171,61.2898],[24.5264,61.2923],[24.5467,61.2973],[24.5545,61.299],[24.5605,61.3005],[24.5625,61.3001],[24.562,61.3009],[24.5628,61.3013],[24.5643,61.3007],[24.5647,61.3015],[24.5732,61.3037],[24.5791,61.3005],[24.5815,61.2983],[24.584,61.2976],[24.5851,61.2946],[24.5845,61.2929],[24.5869,61.2926],[24.5895,61.2882],[24.5946,61.2912],[24.6207,61.286],[24.6369,61.2825],[24.6376,61.2833],[24.6413,61.2825],[24.6406,61.2819],[24.6536,61.2793],[24.6661,61.2767],[24.6692,61.2776],[24.6704,61.2788],[24.6871,61.2798],[24.6913,61.2778],[24.7023,61.2726],[24.7083,61.2725],[24.7126,61.2761],[24.717,61.2794],[24.7168,61.283],[24.7181,61.2837],[24.7197,61.2987],[24.7318,61.3174],[24.7467,61.2979],[24.7564,61.286],[24.7706,61.2678],[24.8059,61.2727],[24.8122,61.2725],[24.8143,61.2735],[24.826,61.276],[24.8341,61.2754],[24.8416,61.2746],[24.8437,61.2755],[24.8448,61.2775],[24.8465,61.2785],[24.8914,61.2878],[24.8781,61.2979],[24.914,61.3246],[24.9172,61.3214],[24.9162,61.3164],[24.9156,61.3154],[24.9151,61.3143],[24.9153,61.314],[24.9214,61.3139],[24.921,61.3006],[24.921,61.286],[24.923,61.2831],[24.9263,61.2821],[24.9285,61.281],[24.931,61.2806],[24.9333,61.281],[24.9357,61.2834],[24.9408,61.2854],[24.9404,61.2869],[24.9442,61.2882],[24.9457,61.2896],[24.9474,61.2908],[24.9503,61.2896],[24.9546,61.2867],[24.9555,61.2834],[24.9594,61.281],[24.963,61.2811],[24.9648,61.2814],[24.9662,61.2784],[24.973,61.2762],[24.9766,61.2757],[24.982,61.2758],[24.988,61.2762],[24.9898,61.2777],[24.9999,61.2832],[25.0057,61.2862],[25.0118,61.2903],[25.0142,61.2908],[25.0141,61.2883],[25.0142,61.2853],[25.0126,61.2823],[25.0129,61.2787],[25.0161,61.2747],[25.029,61.2464],[25.0643,61.251],[25.0964,61.2558],[25.131,61.2515],[25.1674,61.2436],[25.1864,61.2402],[25.203,61.2411],[25.2008,61.2286],[25.1999,61.2219],[25.2066,61.2198],[25.2131,61.218],[25.2183,61.2141],[25.2233,61.2123],[25.2303,61.2073],[25.2344,61.2035],[25.2346,61.1994],[25.2405,61.1973],[25.2484,61.1952],[25.2558,61.1948],[25.2534,61.1924],[25.253,61.1895],[25.2604,61.1856],[25.2593,61.1821],[25.2554,61.1786],[25.2501,61.1763],[25.2508,61.175],[25.2535,61.1741],[25.2525,61.1727],[25.2538,61.1718],[25.2569,61.1716],[25.2551,61.1704],[25.2546,61.1693],[25.2555,61.168],[25.2545,61.167],[25.2577,61.1649],[25.2586,61.1628],[25.2619,61.161],[25.2698,61.1583],[25.2694,61.1569],[25.258,61.1595],[25.2561,61.1539],[25.2525,61.1479],[25.2466,61.1471],[25.2404,61.1448],[25.2361,61.1401],[25.246,61.1313],[25.2589,61.1284],[25.2545,61.1254],[25.2461,61.1242],[25.2444,61.1206],[25.2397,61.1146],[25.2262,61.1113],[25.2131,61.1036]]}},{"type":"Feature","properties":{"Id":"4"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[25.2131,61.1036],[25.2127,61.1034],[25.1981,61.0762],[25.1701,61.074],[25.1523,61.063],[25.057,61.0501],[25.0551,61.0484],[25.0532,61.0466],[25.0497,61.0434],[25.0452,61.0393],[25.0396,61.0343],[25.0344,61.0327],[25.0287,61.0309],[25.0454,61.0166],[25.0382,61.0118],[25.0351,61.0097],[25.0261,61.0043],[25.0274,60.9936],[25.0483,60.993],[25.0594,60.9859],[25.0403,60.9676],[25.0259,60.9617],[25.0075,60.9279],[25.0275,60.9278]]}},{"type":"Feature","properties":{"Id":"2"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[24.6924,60.9094],[24.6951,60.911],[24.6867,60.9439],[24.7246,61.0626],[24.7172,61.0743],[24.6907,61.0832],[24.5007,61.1023],[24.3369,61.1227],[24.2689,61.1061],[24.2501,61.0741],[24.203,61.0497],[24.2169,60.9935],[24.253,60.8937],[24.2695,60.8863],[24.3113,60.8894],[24.4562,60.8851],[24.603,60.8949],[24.6924,60.9094]]}},{"type":"Feature","properties":{"Id":"6"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[24.7145,60.7966],[24.7328,60.7765],[24.7495,60.7585],[24.6907,60.7515]]}},{"type":"Feature","properties":{"Id":"9"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[25.3255,60.9088],[25.3469,60.9001],[25.3699,60.8933],[25.3804,60.8899],[25.4033,60.8836],[25.4436,60.8751],[25.4785,60.8668],[25.5078,60.8524],[25.5283,60.8448],[25.5445,60.8388],[25.5661,60.8341],[25.5877,60.8304],[25.608,60.8285],[25.6456,60.8268],[25.6888,60.8261],[25.7354,60.8292],[25.7931,60.835],[25.8346,60.8415],[25.8799,60.8511],[25.9118,60.8611],[25.9573,60.8773],[25.991,60.8888],[26.0197,60.908],[26.0288,60.914],[26.0341,60.9199],[26.0367,60.9277],[26.0327,60.9444],[26.027,60.9553],[26.0132,60.9751],[25.9929,61.001],[25.9766,61.0209],[25.9569,61.039],[25.9131,61.0669],[25.8858,61.0839],[25.8658,61.0951],[25.8429,61.1028],[25.8144,61.1124],[25.7814,61.1206],[25.7388,61.128],[25.703,61.1317],[25.6624,61.1334],[25.6414,61.1332],[25.6035,61.1312],[25.5661,61.1269],[25.5198,61.1185],[25.491,61.1101],[25.4603,61.0993],[25.4326,61.0868],[25.4136,61.0798],[25.3934,61.0736],[25.3671,61.0654],[25.351,61.0593],[25.3309,61.0512],[25.2894,61.0319],[25.279,61.0269],[25.2685,61.0216],[25.2628,61.0182],[25.261,61.0152],[25.257,61.0078],[25.2614,60.9916],[25.2817,60.9605],[25.3031,60.9347],[25.3255,60.9088]]}},{"type":"Feature","properties":{"Id":"5"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[25.0275,60.9278],[25.0303,60.924],[25.0356,60.917],[25.0228,60.9148],[25.0229,60.9148],[25.0229,60.9147],[25.0229,60.9146],[25.0227,60.9146],[25.0226,60.9146],[25.0225,60.9145],[25.0225,60.9144],[25.0226,60.9143],[25.0227,60.9142],[25.0228,60.9142],[25.0228,60.9141],[25.023,60.914],[25.0231,60.914],[25.0232,60.914],[25.0235,60.9139],[25.0236,60.9139],[25.0237,60.9138],[25.0238,60.9137],[25.0239,60.9137],[25.0242,60.9136],[25.0246,60.9135],[25.0247,60.9135],[25.0248,60.9134],[25.025,60.9134],[25.0249,60.9133],[25.0247,60.9133],[25.0247,60.9132],[25.0247,60.9131],[25.0248,60.9129],[25.0249,60.9126],[25.0249,60.9125],[25.025,60.9122],[25.025,60.9119],[25.0248,60.9115],[25.0198,60.9117],[25.0199,60.9124],[25.0137,60.9126],[25.0135,60.9115],[25.0116,60.9109],[25.0059,60.9091],[24.9974,60.9065],[24.9914,60.9111],[24.9805,60.9077],[24.9927,60.8999],[24.9638,60.892],[24.9653,60.8864],[24.9525,60.8879],[24.9384,60.8898],[24.9361,60.891],[24.9347,60.8907],[24.9373,60.8885],[24.94,60.8877],[24.9389,60.886],[24.9386,60.8837],[24.9408,60.8825],[24.9427,60.8823],[24.9447,60.8805],[24.9456,60.8778],[24.9469,60.8721],[24.9525,60.8669],[24.9523,60.8647],[24.9507,60.8607],[24.9489,60.8613],[24.9446,60.8574],[24.9467,60.8575],[24.9475,60.8573],[24.9466,60.8535],[24.9428,60.8503],[24.9421,60.8484],[24.9421,60.8467],[24.9373,60.8471],[24.9347,60.8474],[24.9313,60.8456],[24.9313,60.8446],[24.9286,60.8444],[24.9263,60.8443],[24.9233,60.845],[24.9208,60.8459],[24.9167,60.8465],[24.9139,60.8464],[24.9137,60.8423],[24.9096,60.8406],[24.9073,60.8406],[24.9055,60.8409],[24.906,60.8393],[24.904,60.8392],[24.9019,60.8393],[24.9001,60.8388],[24.8914,60.8385],[24.8896,60.8396],[24.8882,60.8409],[24.8856,60.8422],[24.8838,60.8444],[24.8822,60.8457],[24.8801,60.8463],[24.8777,60.8472],[24.8769,60.8476],[24.8713,60.8485],[24.8664,60.8494],[24.8632,60.8502],[24.8603,60.8521],[24.8579,60.8524],[24.8556,60.8524],[24.8529,60.8532],[24.8521,60.8536],[24.8512,60.8555],[24.8483,60.8572],[24.8461,60.8582],[24.8441,60.8599],[24.8424,60.8607],[24.84,60.8601],[24.8408,60.8612],[24.8437,60.8614],[24.8439,60.8619],[24.8435,60.8628],[24.8436,60.8639],[24.8452,60.8642],[24.8465,60.8661],[24.8175,60.8678],[24.8095,60.8688],[24.8096,60.8552],[24.8086,60.8549],[24.8066,60.8528],[24.8056,60.8506],[24.8014,60.8487],[24.7962,60.8467],[24.7961,60.8444],[24.7975,60.8424],[24.7955,60.8412],[24.7952,60.8388],[24.7972,60.8362],[24.7953,60.8338],[24.793,60.8322],[24.7921,60.8319],[24.7903,60.8327],[24.7877,60.837],[24.7847,60.8391],[24.7328,60.836],[24.725,60.8168],[24.7197,60.8092],[24.7148,60.8042],[24.7127,60.7993],[24.7145,60.7966]]}},{"type":"Feature","properties":{"Id":"8"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[25.608,61.0111],[25.6006,61.0075],[25.5943,61.0035],[25.5884,60.9989],[25.5861,60.9954],[25.5831,60.99],[25.582,60.9848],[25.5823,60.9803],[25.5828,60.9775],[25.5832,60.975],[25.5867,60.9701],[25.5889,60.9676],[25.5908,60.9653],[25.5987,60.9561],[25.6057,60.9511],[25.618,60.9468],[25.6263,60.9451],[25.6426,60.9436],[25.6523,60.9433],[25.6594,60.9433],[25.6664,60.9438],[25.6778,60.9449],[25.6847,60.9464],[25.6909,60.9484],[25.697,60.9508],[25.7013,60.9535],[25.7099,60.9584],[25.7199,60.9646],[25.7271,60.972],[25.7307,60.9805],[25.7323,60.988],[25.7301,60.9937],[25.7257,61.0007],[25.7236,61.0029],[25.7147,61.0109],[25.7025,61.0138],[25.6867,61.0161],[25.668,61.0168],[25.6535,61.0174],[25.6448,61.017],[25.6355,61.0163],[25.6238,61.0145],[25.6159,61.013],[25.608,61.0111]]}},{"type":"Feature","properties":{"Id":"10"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[25.0275,60.9278],[25.0463,60.9277],[25.0938,60.919],[25.0975,60.905],[25.1224,60.8986],[25.1895,60.8905],[25.2249,60.882],[25.2457,60.8664],[25.251,60.8578],[25.2889,60.8328],[25.3574,60.8004],[25.4136,60.7792],[25.4333,60.7954],[25.4745,60.7927],[25.4973,60.7667],[25.6452,60.7706],[25.6666,60.771],[25.7256,60.772],[25.7809,60.7769],[25.8497,60.7865],[25.8739,60.7913],[25.9141,60.8048],[25.9528,60.8163],[25.982,60.8255],[26.099,60.856],[26.1395,60.867],[26.1658,60.9102],[26.177,60.928],[26.176,60.9464],[26.1438,61.0137],[26.1241,61.0755],[26.087,61.0977],[26.0645,61.1138],[25.9923,61.1482],[25.9641,61.1594],[25.9282,61.1709],[25.8678,61.1874],[25.8027,61.2007],[25.7498,61.2067],[25.6916,61.2099],[25.6419,61.2106],[25.589,61.2083],[25.5348,61.2039],[25.4869,61.1959],[25.461,61.1898],[25.4219,61.1778],[25.3644,61.1499],[25.3271,61.1326],[25.2909,61.1107],[25.2626,61.1066],[25.2131,61.1036]]}},{"type":"Feature","properties":{"Id":"1"},"styles": [{"color": "#666","weight": 2,"opacity": 1},{"color": "#333","weight": 12,"opacity": 0.2}],"geometry":{"type":"LineString","coordinates":[[24.5895,60.9742],[24.5937,60.9709],[24.5878,60.9619],[24.5843,60.9597],[24.5688,60.9568],[24.557,60.9545],[24.5463,60.9572],[24.541,60.9465],[24.5304,60.9412],[24.5207,60.9392],[24.4083,60.953],[24.3794,60.9642],[24.3535,60.9799],[24.3399,60.9984],[24.3731,61.0177],[24.3804,61.0284],[24.4132,61.0325],[24.4385,61.0373],[24.472,61.0422],[24.4781,61.0354],[24.5131,61.0413],[24.5736,61.0145],[24.5993,60.9794],[24.5895,60.9742]]}}]}
\ No newline at end of file
diff --git a/static/assets/geojson/oulu_zone_lines_20230223.geojson b/static/assets/geojson/oulu_zone_lines_20230223.geojson
deleted file mode 100644
index 92bdf602aa..0000000000
--- a/static/assets/geojson/oulu_zone_lines_20230223.geojson
+++ /dev/null
@@ -1,437 +0,0 @@
-{
- "type" : "FeatureCollection",
- "name" : "Zone lines",
- "features" : [
- {
- "type" : "Feature",
- "geometry" : {
- "type" : "MultiLineString",
- "coordinates" : [
- [
- [ 25.51554, 65.00542 ],
- [ 25.49561, 65.00566 ],
- [ 25.4818, 65.00914 ],
- [ 25.47246, 65.00281 ],
- [ 25.47111, 65.00184 ],
- [ 25.46984, 64.99943 ],
- [ 25.46982, 64.99852 ],
- [ 25.46532, 64.99826 ],
- [ 25.46636, 64.99203 ],
- [ 25.45722, 64.99173 ],
- [ 25.45625, 65.0008 ],
- [ 25.447, 65.00337 ],
- [ 25.46545, 65.01575 ],
- [ 25.47719, 65.01274 ],
- [ 25.48815, 65.01967 ],
- [ 25.51561, 65.01963 ],
- [ 25.51554, 65.00542 ]
- ]
- ]
- },
- "properties" : {
- "Zone" : "A"
- },
- "styles": [
- {
- "color": "#666",
- "weight": 2,
- "opacity": 1
- },
- {
- "color": "#333",
- "weight": 12,
- "opacity": 0.2
- }
- ]
- },
- {
- "type" : "Feature",
- "geometry" : {
- "type" : "MultiLineString",
- "coordinates" : [
- [
- [ 25.43364, 65.10678 ],
- [ 25.44692, 65.10378 ],
- [ 25.45545, 65.10318 ],
- [ 25.46731, 65.10219 ],
- [ 25.47916, 65.10079 ],
- [ 25.49149, 65.09939 ],
- [ 25.5114, 65.0974 ],
- [ 25.54033, 65.0936 ],
- [ 25.54934, 65.09081 ],
- [ 25.57492, 65.08884 ],
- [ 25.59458, 65.08413 ],
- [ 25.61988, 65.07392 ],
- [ 25.63907, 65.06617 ],
- [ 25.65066, 65.05705 ],
- [ 25.65561, 65.05316 ],
- [ 25.65703, 65.04253 ],
- [ 25.65733, 65.03665 ],
- [ 25.68226, 65.0138 ],
- [ 25.66103, 64.97528 ],
- [ 25.65746, 64.96804 ],
- [ 25.6471, 64.95993 ],
- [ 25.62062, 64.95018 ],
- [ 25.60354, 64.94261 ],
- [ 25.60042, 64.94116 ],
- [ 25.53781, 64.93933 ],
- [ 25.53021, 64.93947 ],
- [ 25.52013, 64.93947 ],
- [ 25.51462, 64.94038 ],
- [ 25.48227, 64.94365 ],
- [ 25.44734, 64.94709 ],
- [ 25.42269, 64.95834 ],
- [ 25.38548, 64.97611 ],
- [ 25.36039, 65.01502 ],
- [ 25.36231, 65.05244 ],
- [ 25.35495, 65.08677 ],
- [ 25.39002, 65.10598 ],
- [ 25.40235, 65.10817 ],
- [ 25.41278, 65.10778 ],
- [ 25.42369, 65.10678 ],
- [ 25.43364, 65.10678 ]
- ]
- ]
- },
- "properties" : {
- "Zone" : "B"
- },
- "styles": [
- {
- "color": "#666",
- "weight": 2,
- "opacity": 1
- },
- {
- "color": "#333",
- "weight": 12,
- "opacity": 0.2
- }
- ]
- },
- {
- "type" : "Feature",
- "geometry" : {
- "type" : "MultiLineString",
- "coordinates" : [
- [
- [ 25.16761, 64.91963 ],
- [ 25.23926, 64.90159 ],
- [ 25.30701, 64.90234 ],
- [ 25.30787, 64.90292 ],
- [ 25.36762, 64.90272 ],
- [ 25.36051, 64.89327 ],
- [ 25.36785, 64.87838 ],
- [ 25.38445, 64.87596 ],
- [ 25.40389, 64.88462 ],
- [ 25.44666, 64.88096 ],
- [ 25.44846, 64.89206 ],
- [ 25.45462, 64.88884 ],
- [ 25.46695, 64.88743 ],
- [ 25.47359, 64.8822 ],
- [ 25.4807, 64.87757 ],
- [ 25.48307, 64.86952 ],
- [ 25.52338, 64.86609 ],
- [ 25.54424, 64.85683 ],
- [ 25.54803, 64.8532 ],
- [ 25.5523, 64.84978 ],
- [ 25.57885, 64.84413 ],
- [ 25.58265, 64.84554 ],
- [ 25.60588, 64.84313 ],
- [ 25.6111, 64.84655 ],
- [ 25.63382, 64.84306 ],
- [ 25.649, 64.84532 ],
- [ 25.72896, 64.90684 ],
- [ 25.75766, 64.88426 ],
- [ 25.8124, 64.89778 ],
- [ 25.83144, 64.89063 ],
- [ 25.86296, 64.90374 ],
- [ 25.84971, 64.93688 ],
- [ 25.87478, 64.95948 ],
- [ 25.88367, 64.97984 ],
- [ 25.89459, 65.01513 ],
- [ 25.87154, 65.07126 ],
- [ 25.84047, 65.09484 ],
- [ 25.82257, 65.10758 ],
- [ 25.81119, 65.12294 ],
- [ 25.80502, 65.1355 ],
- [ 25.79147, 65.14749 ],
- [ 25.7763, 65.15093 ],
- [ 25.71147, 65.15924 ],
- [ 25.63925, 65.17417 ],
- [ 25.62666, 65.17303 ],
- [ 25.58234, 65.16372 ],
- [ 25.48988, 65.16855 ],
- [ 25.40876, 65.18469 ],
- [ 25.40793, 65.19256 ],
- [ 25.40548, 65.19944 ],
- [ 25.39924, 65.20578 ],
- [ 25.38279, 65.21102 ],
- [ 25.36568, 65.2556 ],
- [ 25.34379, 65.25606 ],
- [ 25.33777, 65.23498 ],
- [ 25.30217, 65.22748 ],
- [ 25.25034, 65.21361 ],
- [ 25.13893, 65.18786 ],
- [ 25.0727, 65.16972 ]
- ]
- ]
- },
- "properties" : {
- "Zone" : "C"
- },
- "styles": [
- {
- "color": "#666",
- "weight": 2,
- "opacity": 1
- },
- {
- "color": "#333",
- "weight": 12,
- "opacity": 0.2
- }
- ]
- },
- {
- "type" : "Feature",
- "geometry" : {
- "type" : "MultiLineString",
- "coordinates" : [
- [
- [ 25.16761, 64.91963 ],
- [ 25.09717, 64.9374 ],
- [ 25.08711, 64.94619 ],
- [ 25.07505, 64.95031 ],
- [ 25.06441, 64.95801 ],
- [ 25.06398, 64.98721 ],
- [ 25.08256, 65.01499 ],
- [ 25.13078, 65.05843 ],
- [ 25.08389, 65.10859 ],
- [ 25.06057, 65.13917 ],
- [ 25.0727, 65.16972 ]
- ],
- [
- [ 25.0727, 65.16972 ],
- [ 24.86341, 65.2643 ],
- [ 25.18074, 65.36758 ],
- [ 25.55096, 65.36987 ],
- [ 25.59834, 65.33964 ],
- [ 25.65927, 65.28825 ],
- [ 25.69391, 65.28326 ],
- [ 26.19367, 65.20071 ],
- [ 26.27172, 65.13415 ],
- [ 26.36475, 65.07011 ],
- [ 26.37898, 64.92535 ],
- [ 26.01732, 64.79914 ],
- [ 25.77056, 64.74457 ],
- [ 25.6097, 64.73526 ],
- [ 25.41711, 64.75487 ],
- [ 25.14846, 64.82569 ],
- [ 25.13314, 64.8429 ],
- [ 25.16761, 64.91963 ]
- ],
- [
- [ 26.50007, 64.85976 ],
- [ 26.4853, 64.86789 ],
- [ 26.46895, 64.86739 ],
- [ 26.45897, 64.85179 ],
- [ 26.42985, 64.8584 ],
- [ 26.40791, 64.86501 ],
- [ 26.39554, 64.84399 ],
- [ 26.43304, 64.83144 ],
- [ 26.44501, 64.82601 ],
- [ 26.44381, 64.81022 ],
- [ 26.46057, 64.77497 ],
- [ 26.46795, 64.76425 ],
- [ 26.45798, 64.7503 ],
- [ 26.30668, 64.72283 ],
- [ 26.3484, 64.70419 ],
- [ 26.37496, 64.67014 ],
- [ 26.38634, 64.65066 ],
- [ 26.36358, 64.63116 ],
- [ 26.31426, 64.64578 ],
- [ 26.31426, 64.6149 ],
- [ 26.35978, 64.59701 ],
- [ 26.39392, 64.59538 ],
- [ 26.45219, 64.62296 ],
- [ 26.50326, 64.5908 ],
- [ 26.45461, 64.56933 ],
- [ 26.44703, 64.54978 ],
- [ 26.26495, 64.46652 ],
- [ 26.21943, 64.46161 ],
- [ 25.93115, 64.55141 ],
- [ 25.87046, 64.51879 ],
- [ 25.80218, 64.55141 ],
- [ 25.77942, 64.55141 ],
- [ 25.74907, 64.51716 ],
- [ 25.64286, 64.58073 ],
- [ 25.60493, 64.60352 ],
- [ 25.32872, 64.66875 ],
- [ 25.16492, 64.73173 ],
- [ 24.96388, 64.80127 ],
- [ 24.95299, 64.81611 ],
- [ 24.9925, 64.84534 ],
- [ 24.9904, 64.86806 ],
- [ 24.9973, 64.91029 ],
- [ 24.9525, 64.90695 ],
- [ 24.96198, 64.88795 ],
- [ 24.93029, 64.88205 ],
- [ 24.87698, 64.8854 ],
- [ 24.84332, 64.88423 ],
- [ 24.80594, 64.88915 ],
- [ 24.52639, 64.88682 ],
- [ 24.52909, 65.13691 ],
- [ 24.53366, 65.21009 ],
- [ 24.59363, 65.2664 ],
- [ 24.65562, 65.32135 ],
- [ 25.20285, 65.65626 ],
- [ 26.17012, 65.82225 ],
- [ 26.15481, 65.50275 ],
- [ 26.17504, 65.50289 ],
- [ 26.18028, 65.49901 ],
- [ 26.15462, 65.49066 ],
- [ 26.15335, 65.41907 ],
- [ 26.40131, 65.37366 ],
- [ 26.41269, 65.36162 ],
- [ 26.42426, 65.34782 ],
- [ 26.3913, 65.34948 ],
- [ 26.38636, 65.33167 ],
- [ 26.39953, 65.32517 ],
- [ 26.37878, 65.31701 ],
- [ 26.35684, 65.32018 ],
- [ 26.28183, 65.27917 ],
- [ 26.2559, 65.28334 ],
- [ 26.23556, 65.27399 ],
- [ 26.31934, 65.20046 ],
- [ 26.46376, 65.15105 ],
- [ 26.59901, 65.09752 ],
- [ 26.62773, 65.09634 ],
- [ 26.63132, 65.07348 ],
- [ 26.62095, 65.05549 ],
- [ 26.64048, 65.03843 ],
- [ 26.65925, 65.01423 ],
- [ 26.70593, 65.01322 ],
- [ 26.71271, 65.00698 ],
- [ 26.6804, 64.98928 ],
- [ 26.69117, 64.97882 ],
- [ 26.73785, 64.98978 ],
- [ 26.76936, 64.96194 ],
- [ 26.76617, 64.95231 ],
- [ 26.67083, 64.90684 ],
- [ 26.66324, 64.89236 ],
- [ 26.63252, 64.89245 ],
- [ 26.56031, 64.90667 ],
- [ 26.51762, 64.84976 ],
- [ 26.49488, 64.85179 ],
- [ 26.50007, 64.85976 ]
- ]
- ]
- },
- "properties" : {
- "Zone" : "D"
- },
- "styles": [
- {
- "color": "#666",
- "weight": 2,
- "opacity": 1
- },
- {
- "color": "#333",
- "weight": 12,
- "opacity": 0.2
- }
- ]
- },
- {
- "type" : "Feature",
- "geometry" : {
- "type" : "MultiPoint",
- "coordinates" : [
- [ 25.39518, 65.02666 ],
- [ 25.50007, 64.96569 ],
- [ 25.48548, 65.05152 ],
- [ 25.58994, 65.01164 ]
- ]
- },
- "properties" : {
- "icon":{
- "id":"oulu-icon-zone-a",
- "svg":""
- }
- }
- },
- {
- "type" : "Feature",
- "geometry" : {
- "type" : "MultiPoint",
- "coordinates" : [
- [ 25.55729, 64.89643 ],
- [ 25.49243, 65.14108 ],
- [ 25.20924, 65.02839 ],
- [ 25.81446, 65.03219 ]
- ]
- },
- "properties" : {
- "icon":{
- "id":"oulu-icon-zone-b",
- "svg":""
- }
- }
- },
- {
- "type" : "Feature",
- "geometry" : {
- "type" : "MultiPoint",
- "coordinates" : [
- [ 25.51165, 65.27636 ],
- [ 26.13439, 65.02676 ],
- [ 25.61468, 64.79426 ]
- ]
- },
- "properties" : {
- "icon":{
- "id":"oulu-icon-zone-c",
- "svg":""
- }
- }
- },
- {
- "type" : "Feature",
- "geometry" : {
- "type" : "MultiPoint",
- "coordinates" : [
- [ 25.97905, 64.6705 ],
- [ 26.51844, 64.99121 ],
- [ 26.08786, 65.3356 ],
- [ 25.18226, 65.48508 ],
- [ 24.79492, 65.10786 ]
- ]
- },
- "properties" : {
- "icon":{
- "id":"oulu-icon-zone-d",
- "svg":""
-
- }
- }
- },
- {
- "type" : "Feature",
- "geometry" : {
- "type" : "MultiPoint",
- "coordinates" : [
- [ 25.46599, 65.00735 ]
- ]
- },
- "properties" : {
- "icon":{
- "id":"oulu-icon-zone-l",
- "svg":""
- }
-
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/static/assets/geojson/oulu_zone_lines_20241011.geojson b/static/assets/geojson/oulu_zone_lines_20241011.geojson
new file mode 100644
index 0000000000..d790b57b82
--- /dev/null
+++ b/static/assets/geojson/oulu_zone_lines_20241011.geojson
@@ -0,0 +1,403 @@
+{
+ "type": "FeatureCollection",
+ "name": "Zone lines",
+ "features": [
+ {
+ "type": "Feature",
+ "geometry": {
+ "type": "MultiLineString",
+ "coordinates": [
+ [
+ [
+ 26.50007,
+ 64.85976
+ ],
+ [
+ 26.4853,
+ 64.86789
+ ],
+ [
+ 26.46895,
+ 64.86739
+ ],
+ [
+ 26.45897,
+ 64.85179
+ ],
+ [
+ 26.42985,
+ 64.8584
+ ],
+ [
+ 26.40791,
+ 64.86501
+ ],
+ [
+ 26.39554,
+ 64.84399
+ ],
+ [
+ 26.43304,
+ 64.83144
+ ],
+ [
+ 26.44501,
+ 64.82601
+ ],
+ [
+ 26.44381,
+ 64.81022
+ ],
+ [
+ 26.46057,
+ 64.77497
+ ],
+ [
+ 26.46795,
+ 64.76425
+ ],
+ [
+ 26.45798,
+ 64.7503
+ ],
+ [
+ 26.30668,
+ 64.72283
+ ],
+ [
+ 26.3484,
+ 64.70419
+ ],
+ [
+ 26.37496,
+ 64.67014
+ ],
+ [
+ 26.38634,
+ 64.65066
+ ],
+ [
+ 26.36358,
+ 64.63116
+ ],
+ [
+ 26.31426,
+ 64.64578
+ ],
+ [
+ 26.31426,
+ 64.6149
+ ],
+ [
+ 26.35978,
+ 64.59701
+ ],
+ [
+ 26.39392,
+ 64.59538
+ ],
+ [
+ 26.45219,
+ 64.62296
+ ],
+ [
+ 26.50326,
+ 64.5908
+ ],
+ [
+ 26.45461,
+ 64.56933
+ ],
+ [
+ 26.44703,
+ 64.54978
+ ],
+ [
+ 26.26495,
+ 64.46652
+ ],
+ [
+ 26.21943,
+ 64.46161
+ ],
+ [
+ 25.93115,
+ 64.55141
+ ],
+ [
+ 25.87046,
+ 64.51879
+ ],
+ [
+ 25.80218,
+ 64.55141
+ ],
+ [
+ 25.77942,
+ 64.55141
+ ],
+ [
+ 25.74907,
+ 64.51716
+ ],
+ [
+ 25.64286,
+ 64.58073
+ ],
+ [
+ 25.60493,
+ 64.60352
+ ],
+ [
+ 25.32872,
+ 64.66875
+ ],
+ [
+ 25.16492,
+ 64.73173
+ ],
+ [
+ 24.96388,
+ 64.80127
+ ],
+ [
+ 24.95299,
+ 64.81611
+ ],
+ [
+ 24.9925,
+ 64.84534
+ ],
+ [
+ 24.9904,
+ 64.86806
+ ],
+ [
+ 24.9973,
+ 64.91029
+ ],
+ [
+ 24.9525,
+ 64.90695
+ ],
+ [
+ 24.96198,
+ 64.88795
+ ],
+ [
+ 24.93029,
+ 64.88205
+ ],
+ [
+ 24.87698,
+ 64.8854
+ ],
+ [
+ 24.84332,
+ 64.88423
+ ],
+ [
+ 24.80594,
+ 64.88915
+ ],
+ [
+ 24.52639,
+ 64.88682
+ ],
+ [
+ 24.52909,
+ 65.13691
+ ],
+ [
+ 24.53366,
+ 65.21009
+ ],
+ [
+ 24.59363,
+ 65.2664
+ ],
+ [
+ 24.65562,
+ 65.32135
+ ],
+ [
+ 25.20285,
+ 65.65626
+ ],
+ [
+ 26.17012,
+ 65.82225
+ ],
+ [
+ 26.15481,
+ 65.50275
+ ],
+ [
+ 26.17504,
+ 65.50289
+ ],
+ [
+ 26.18028,
+ 65.49901
+ ],
+ [
+ 26.15462,
+ 65.49066
+ ],
+ [
+ 26.15335,
+ 65.41907
+ ],
+ [
+ 26.40131,
+ 65.37366
+ ],
+ [
+ 26.41269,
+ 65.36162
+ ],
+ [
+ 26.42426,
+ 65.34782
+ ],
+ [
+ 26.3913,
+ 65.34948
+ ],
+ [
+ 26.38636,
+ 65.33167
+ ],
+ [
+ 26.39953,
+ 65.32517
+ ],
+ [
+ 26.37878,
+ 65.31701
+ ],
+ [
+ 26.35684,
+ 65.32018
+ ],
+ [
+ 26.28183,
+ 65.27917
+ ],
+ [
+ 26.2559,
+ 65.28334
+ ],
+ [
+ 26.23556,
+ 65.27399
+ ],
+ [
+ 26.31934,
+ 65.20046
+ ],
+ [
+ 26.46376,
+ 65.15105
+ ],
+ [
+ 26.59901,
+ 65.09752
+ ],
+ [
+ 26.62773,
+ 65.09634
+ ],
+ [
+ 26.63132,
+ 65.07348
+ ],
+ [
+ 26.62095,
+ 65.05549
+ ],
+ [
+ 26.64048,
+ 65.03843
+ ],
+ [
+ 26.65925,
+ 65.01423
+ ],
+ [
+ 26.70593,
+ 65.01322
+ ],
+ [
+ 26.71271,
+ 65.00698
+ ],
+ [
+ 26.6804,
+ 64.98928
+ ],
+ [
+ 26.69117,
+ 64.97882
+ ],
+ [
+ 26.73785,
+ 64.98978
+ ],
+ [
+ 26.76936,
+ 64.96194
+ ],
+ [
+ 26.76617,
+ 64.95231
+ ],
+ [
+ 26.67083,
+ 64.90684
+ ],
+ [
+ 26.66324,
+ 64.89236
+ ],
+ [
+ 26.63252,
+ 64.89245
+ ],
+ [
+ 26.56031,
+ 64.90667
+ ],
+ [
+ 26.51762,
+ 64.84976
+ ],
+ [
+ 26.49488,
+ 64.85179
+ ],
+ [
+ 26.50007,
+ 64.85976
+ ]
+ ]
+ ]
+ },
+ "properties": {
+ "Zone": "Oulu"
+ },
+ "styles": [
+ {
+ "color": "#666",
+ "weight": 2,
+ "opacity": 1
+ },
+ {
+ "color": "#333",
+ "weight": 12,
+ "opacity": 0.2
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/static/assets/svg-sprite.default.svg b/static/assets/svg-sprite.default.svg
index 48df87502b..9ffdc699a9 100644
--- a/static/assets/svg-sprite.default.svg
+++ b/static/assets/svg-sprite.default.svg
@@ -864,8 +864,8 @@
-
-
+
+
-
+
@@ -1841,7 +1841,7 @@
-
+
@@ -2812,14 +2812,43 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/svg-sprite.hsl.svg b/static/assets/svg-sprite.hsl.svg
index 3bc295ea46..6be1983b93 100644
--- a/static/assets/svg-sprite.hsl.svg
+++ b/static/assets/svg-sprite.hsl.svg
@@ -100,6 +100,10 @@
+
+
+
+
@@ -167,7 +171,7 @@
-
+
@@ -835,8 +839,8 @@
-
-
+
+
-
+
@@ -2753,14 +2757,42 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/e2e/RoutePage.test.js b/test/e2e/RoutePage.test.js
index aab53ab73b..57f2051cec 100644
--- a/test/e2e/RoutePage.test.js
+++ b/test/e2e/RoutePage.test.js
@@ -1,7 +1,5 @@
/* eslint-disable compat/compat */
/* eslint-disable no-undef */
-import RoutePageBatchMockData from './mock-data/RoutePageBatchQueryResponse.json';
-import RoutePageBatchTampereMockData from './mock-data/RoutePageBatchTampereResponse.json';
import RoutePageStopListMockData from './mock-data/RoutePageStopListQueryResponse.json';
import RoutePageStopListTampereMockData from './mock-data/RoutePageStopListTampereResponse.json';
import getConfig from './helpers/image-snapshot-config';
@@ -14,31 +12,7 @@ const platform = (process.env.MOBILE === 'true' && 'mobile') || 'desktop';
const isMobile = platform === 'mobile';
const mockRoutes = async page => {
- await page.route('**/index/graphql/batch', async (route, request) => {
- if (request.method() === 'POST') {
- if (request.postData().includes('routeRoutes_RouteTitle_Query')) {
- const mockData =
- config === 'tampere'
- ? RoutePageBatchTampereMockData
- : RoutePageBatchMockData;
- await route.fulfill({
- headers: { 'access-control-allow-origin': '*' },
- status: 200,
- contentType: 'application/json',
- body: JSON.stringify(mockData),
- });
- }
- if (request.postData().includes('FuzzyTripLinkQuery')) {
- await route.fulfill({
- headers: { 'access-control-allow-origin': '*' },
- status: 200,
- contentType: 'application/json',
- body: JSON.stringify([]),
- });
- }
- }
- });
- await page.route('**/index/graphql', async (route, request) => {
+ await page.route('**/gtfs/v1', async (route, request) => {
if (request.method() === 'POST') {
if (
request.postData().includes('RoutePatternSelect_similarRoutesQuery')
diff --git a/test/e2e/StopPage.test.js b/test/e2e/StopPage.test.js
index 840ef5a7ae..59e6fa71ea 100644
--- a/test/e2e/StopPage.test.js
+++ b/test/e2e/StopPage.test.js
@@ -1,7 +1,6 @@
/* eslint-disable compat/compat */
/* eslint-disable no-undef */
import StopPageMockData from './mock-data/StopPageContenQueryResponse.json';
-import StopPageBatchMockData from './mock-data/StopPageBatchQueryResponse.json';
import getConfig from './helpers/image-snapshot-config';
const config = process.env.CONFIG || 'hsl';
@@ -12,21 +11,7 @@ const platform = (process.env.MOBILE === 'true' && 'mobile') || 'desktop';
const isMobile = platform === 'mobile';
const mockRoutes = async page => {
- await page.route('**/index/graphql/batch', async (route, request) => {
- if (request.method() === 'POST') {
- if (
- request.postData().includes('stopRoutes_StopPageHeaderContainer_Query')
- ) {
- await route.fulfill({
- headers: { 'access-control-allow-origin': '*' },
- status: 200,
- contentType: 'application/json',
- body: JSON.stringify(StopPageBatchMockData),
- });
- }
- }
- });
- await page.route('**/index/graphql', async (route, request) => {
+ await page.route('**/gtfs/v1', async (route, request) => {
if (request.method() === 'POST') {
if (request.postData().includes('StopPageContentContainerQuery')) {
await route.fulfill({
diff --git a/test/e2e/mock-data/RoutePageBatchQueryResponse.json b/test/e2e/mock-data/RoutePageBatchQueryResponse.json
deleted file mode 100644
index 13193809fc..0000000000
--- a/test/e2e/mock-data/RoutePageBatchQueryResponse.json
+++ /dev/null
@@ -1,8923 +0,0 @@
-[
- {
- "payload":{
- "data":{
- "route":{
- "gtfsId":"HSL:6181",
- "shortName":"181",
- "color":null,
- "mode":"BUS",
- "type":701,
- "id":"Um91dGU6SFNMOjYxODE="
- }
- }
- },
- "id":"routeRoutes_RouteTitle_Query"
- },
- {
- "payload":{
- "data":{
- "route":{
- "shortName":"181",
- "longName":"Kirkkonummi-Siuntio",
- "id":"Um91dGU6SFNMOjYxODE="
- }
- }
- },
- "id":"routeRoutes_RoutePageMeta_Query"
- },
- {
- "payload":{
- "data":{
- "route":{
- "gtfsId":"HSL:6181",
- "color":null,
- "shortName":"181",
- "longName":"Kirkkonummi-Siuntio",
- "mode":"BUS",
- "type":701,
- "agency":{
- "name":"Helsingin seudun liikenne",
- "url":"http://www.hsl.fi/",
- "fareUrl":"http://www.hsl.fi/liput",
- "id":"QWdlbmN5OkhTTDpIU0w=",
- "phone":"(09) 4766 4444"
- },
- "patterns":[
- {
- "code":"HSL:6181:1:01",
- "directionId":1,
- "headsign":"Kirkkonummi",
- "stops":[
- {
- "name":"Siuntio matkahuolto",
- "id":"U3RvcDpIU0w6NjMwMjAxMg==",
- "gtfsId":"HSL:6302012",
- "code":"So3094",
- "alerts":[
-
- ]
- },
- {
- "name":"Sudenkaari",
- "id":"U3RvcDpIU0w6NjMwMjAxNg==",
- "gtfsId":"HSL:6302016",
- "code":"So3098",
- "alerts":[
-
- ]
- },
- {
- "name":"Billskogintie",
- "id":"U3RvcDpIU0w6NjMwMjAwMQ==",
- "gtfsId":"HSL:6302001",
- "code":"So3083",
- "alerts":[
-
- ]
- },
- {
- "name":"Nordanvik tiehaara",
- "id":"U3RvcDpIU0w6NjMwMjAwOQ==",
- "gtfsId":"HSL:6302009",
- "code":"So3091",
- "alerts":[
-
- ]
- },
- {
- "name":"Degerbyntie",
- "id":"U3RvcDpIU0w6NjMwMjAwNA==",
- "gtfsId":"HSL:6302004",
- "code":"So3086",
- "alerts":[
-
- ]
- },
- {
- "name":"Sunnanvik",
- "id":"U3RvcDpIU0w6NjMwMjAxOQ==",
- "gtfsId":"HSL:6302019",
- "code":"So3101",
- "alerts":[
-
- ]
- },
- {
- "name":"Sunnanvik tiehaara",
- "id":"U3RvcDpIU0w6NjMwNDAwNw==",
- "gtfsId":"HSL:6304007",
- "code":"So3118",
- "alerts":[
-
- ]
- },
- {
- "name":"Kalliotie",
- "id":"U3RvcDpIU0w6NjMwNDAwMg==",
- "gtfsId":"HSL:6304002",
- "code":"So3113",
- "alerts":[
-
- ]
- },
- {
- "name":"Sienitie",
- "id":"U3RvcDpIU0w6NjMwNDAwNA==",
- "gtfsId":"HSL:6304004",
- "code":"So3115",
- "alerts":[
-
- ]
- },
- {
- "name":"Störsvik th",
- "id":"U3RvcDpIU0w6NjMwNDAwNg==",
- "gtfsId":"HSL:6304006",
- "code":"So3117",
- "alerts":[
-
- ]
- },
- {
- "name":"Tallbacka",
- "id":"U3RvcDpIU0w6NjMwNjAwNQ==",
- "gtfsId":"HSL:6306005",
- "code":"So3126",
- "alerts":[
-
- ]
- },
- {
- "name":"Kela",
- "id":"U3RvcDpIU0w6NjMwNjAwMw==",
- "gtfsId":"HSL:6306003",
- "code":"So3124",
- "alerts":[
-
- ]
- },
- {
- "name":"Böle",
- "id":"U3RvcDpIU0w6NjMwNjAwMA==",
- "gtfsId":"HSL:6306000",
- "code":"So3121",
- "alerts":[
-
- ]
- },
- {
- "name":"Bergträskinpolku",
- "id":"U3RvcDpIU0w6NjA1MDIwOQ==",
- "gtfsId":"HSL:6050209",
- "code":"Ki0509",
- "alerts":[
-
- ]
- },
- {
- "name":"Granbackantie",
- "id":"U3RvcDpIU0w6NjA1MDIxMQ==",
- "gtfsId":"HSL:6050211",
- "code":"Ki0511",
- "alerts":[
-
- ]
- },
- {
- "name":"Överby",
- "id":"U3RvcDpIU0w6NjA1MDIxMw==",
- "gtfsId":"HSL:6050213",
- "code":"Ki0513",
- "alerts":[
-
- ]
- },
- {
- "name":"Karlbergintie",
- "id":"U3RvcDpIU0w6NjA0MDIzNQ==",
- "gtfsId":"HSL:6040235",
- "code":"Ki0435",
- "alerts":[
-
- ]
- },
- {
- "name":"Lindalintie",
- "id":"U3RvcDpIU0w6NjA0MDIzMQ==",
- "gtfsId":"HSL:6040231",
- "code":"Ki0431",
- "alerts":[
-
- ]
- },
- {
- "name":"Ravalsinkuja",
- "id":"U3RvcDpIU0w6NjA0MDIzMw==",
- "gtfsId":"HSL:6040233",
- "code":"Ki0433",
- "alerts":[
-
- ]
- },
- {
- "name":"Kuusala",
- "id":"U3RvcDpIU0w6NjA0MDIzNg==",
- "gtfsId":"HSL:6040236",
- "code":"Ki0436",
- "alerts":[
-
- ]
- },
- {
- "name":"Rajapolku",
- "id":"U3RvcDpIU0w6NjA0MDIzOQ==",
- "gtfsId":"HSL:6040239",
- "code":"Ki0439",
- "alerts":[
-
- ]
- },
- {
- "name":"Gesterbynkaari",
- "id":"U3RvcDpIU0w6NjA0MDI3NQ==",
- "gtfsId":"HSL:6040275",
- "code":"Ki0475",
- "alerts":[
-
- ]
- },
- {
- "name":"Gesterbynkaari",
- "id":"U3RvcDpIU0w6NjA0MDI3Nw==",
- "gtfsId":"HSL:6040277",
- "code":"Ki0477",
- "alerts":[
-
- ]
- },
- {
- "name":"Kirkkotallintie",
- "id":"U3RvcDpIU0w6NjA1MDI1MQ==",
- "gtfsId":"HSL:6050251",
- "code":"Ki0551",
- "alerts":[
-
- ]
- },
- {
- "name":"Kirkkonummi mk",
- "id":"U3RvcDpIU0w6NjA0MDI5MQ==",
- "gtfsId":"HSL:6040291",
- "code":"Ki0491",
- "alerts":[
-
- ]
- }
- ],
- "activeDates":[
- {
- "serviceId":"HSL:6181_20211231_20220109_Ti",
- "day":[
- "20220104"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9UaV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ti",
- "day":[
- "20220104"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9UaV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_To",
- "day":[
- "20220113",
- "20220203",
- "20220120",
- "20220210",
- "20220127"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9Ub18yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_To",
- "day":[
- "20220113",
- "20220203",
- "20220120",
- "20220210",
- "20220127"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9Ub18yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Pe",
- "day":[
- "20220105",
- "20220107"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9QZV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Pe",
- "day":[
- "20220105",
- "20220107"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9QZV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ti",
- "day":[
- "20220201",
- "20220118",
- "20220208",
- "20220125",
- "20220111"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9UaV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ti",
- "day":[
- "20220201",
- "20220118",
- "20220208",
- "20220125",
- "20220111"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9UaV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ma",
- "day":[
- "20220131",
- "20220117",
- "20220207",
- "20220124",
- "20220110"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9NYV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ma",
- "day":[
- "20220131",
- "20220117",
- "20220207",
- "20220124",
- "20220110"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9NYV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ke",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9LZV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ke",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9LZV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Pe",
- "day":[
- "20220128",
- "20220114",
- "20220204",
- "20220121",
- "20220211"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9QZV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Pe",
- "day":[
- "20220128",
- "20220114",
- "20220204",
- "20220121",
- "20220211"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9QZV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_UA",
- "day":[
- "20211231"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9VQV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_UA",
- "day":[
- "20211231"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9VQV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ke",
- "day":[
- "20220112",
- "20220202",
- "20220119",
- "20220209",
- "20220126"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9LZV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ke",
- "day":[
- "20220112",
- "20220202",
- "20220119",
- "20220209",
- "20220126"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9LZV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ma",
- "day":[
- "20220103"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ma",
- "day":[
- "20220103"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_To",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9Ub18yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_To",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9Ub18yXzA4MDU="
- }
- ],
- "tripsForDate":[
- {
- "stoptimes":[
- {
- "scheduledDeparture":25800,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":25860,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":25860,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":25920,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":25980,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26040,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26100,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26160,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26400,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26580,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26700,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26820,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26940,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27240,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27300,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27480,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27480,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27600,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27720,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27720,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27840,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27960,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27960,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":28080,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":28200,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8yXzA3MTA="
- },
- {
- "stoptimes":[
- {
- "scheduledDeparture":29100,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29160,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29160,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29220,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29280,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29340,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29400,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29460,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29700,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29880,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30000,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30120,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30240,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30540,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30600,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30780,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30780,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30900,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":31020,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":31020,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":31140,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":31260,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":31260,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":31380,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":31500,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8yXzA4MDU="
- }
- ],
- "id":"UGF0dGVybjpIU0w6NjE4MToxOjAx",
- "trips":[
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":25800,
- "scheduledDeparture":25800,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":25860,
- "scheduledDeparture":25860,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":25860,
- "scheduledDeparture":25860,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":25920,
- "scheduledDeparture":25920,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":25980,
- "scheduledDeparture":25980,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26040,
- "scheduledDeparture":26040,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26100,
- "scheduledDeparture":26100,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26160,
- "scheduledDeparture":26160,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26400,
- "scheduledDeparture":26400,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26580,
- "scheduledDeparture":26580,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26700,
- "scheduledDeparture":26700,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26820,
- "scheduledDeparture":26820,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26940,
- "scheduledDeparture":26940,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27240,
- "scheduledDeparture":27240,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27300,
- "scheduledDeparture":27300,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27480,
- "scheduledDeparture":27480,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27480,
- "scheduledDeparture":27480,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27600,
- "scheduledDeparture":27600,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27720,
- "scheduledDeparture":27720,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27720,
- "scheduledDeparture":27720,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27840,
- "scheduledDeparture":27840,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27960,
- "scheduledDeparture":27960,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27960,
- "scheduledDeparture":27960,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":28080,
- "scheduledDeparture":28080,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":28200,
- "scheduledDeparture":28200,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8yXzA3MTA="
- },
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29100,
- "scheduledDeparture":29100,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29160,
- "scheduledDeparture":29160,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29160,
- "scheduledDeparture":29160,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29220,
- "scheduledDeparture":29220,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29280,
- "scheduledDeparture":29280,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29340,
- "scheduledDeparture":29340,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29400,
- "scheduledDeparture":29400,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29460,
- "scheduledDeparture":29460,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29700,
- "scheduledDeparture":29700,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29880,
- "scheduledDeparture":29880,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30000,
- "scheduledDeparture":30000,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30120,
- "scheduledDeparture":30120,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30240,
- "scheduledDeparture":30240,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30540,
- "scheduledDeparture":30540,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30600,
- "scheduledDeparture":30600,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30780,
- "scheduledDeparture":30780,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30780,
- "scheduledDeparture":30780,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30900,
- "scheduledDeparture":30900,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31020,
- "scheduledDeparture":31020,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31020,
- "scheduledDeparture":31020,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31140,
- "scheduledDeparture":31140,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31260,
- "scheduledDeparture":31260,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31260,
- "scheduledDeparture":31260,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31380,
- "scheduledDeparture":31380,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31500,
- "scheduledDeparture":31500,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8yXzA4MDU="
- }
- ]
- },
- {
- "code":"HSL:6181:0:01",
- "directionId":0,
- "headsign":"Siuntio",
- "stops":[
- {
- "name":"Kirkkonummi mk",
- "id":"U3RvcDpIU0w6NjA0MDI5NQ==",
- "gtfsId":"HSL:6040295",
- "code":"Ki0495",
- "alerts":[
-
- ]
- },
- {
- "name":"Kirkkotallintie",
- "id":"U3RvcDpIU0w6NjA1MDI1MA==",
- "gtfsId":"HSL:6050250",
- "code":"Ki0550",
- "alerts":[
-
- ]
- },
- {
- "name":"Gesterbynkaari",
- "id":"U3RvcDpIU0w6NjA0MDI3NQ==",
- "gtfsId":"HSL:6040275",
- "code":"Ki0475",
- "alerts":[
-
- ]
- },
- {
- "name":"Gesterbynkaari",
- "id":"U3RvcDpIU0w6NjA0MDI3Nw==",
- "gtfsId":"HSL:6040277",
- "code":"Ki0477",
- "alerts":[
-
- ]
- },
- {
- "name":"Rajapolku",
- "id":"U3RvcDpIU0w6NjA0MDIzOA==",
- "gtfsId":"HSL:6040238",
- "code":"Ki0438",
- "alerts":[
-
- ]
- },
- {
- "name":"Kuusala",
- "id":"U3RvcDpIU0w6NjA0MDIzNw==",
- "gtfsId":"HSL:6040237",
- "code":"Ki0437",
- "alerts":[
-
- ]
- },
- {
- "name":"Ravalsinkuja",
- "id":"U3RvcDpIU0w6NjA0MDIzNA==",
- "gtfsId":"HSL:6040234",
- "code":"Ki0434",
- "alerts":[
-
- ]
- },
- {
- "name":"Lindalintie",
- "id":"U3RvcDpIU0w6NjA1MDIxOQ==",
- "gtfsId":"HSL:6050219",
- "code":"Ki0519",
- "alerts":[
-
- ]
- },
- {
- "name":"Karlbergintie",
- "id":"U3RvcDpIU0w6NjA1MDIxNQ==",
- "gtfsId":"HSL:6050215",
- "code":"Ki0515",
- "alerts":[
-
- ]
- },
- {
- "name":"Överby",
- "id":"U3RvcDpIU0w6NjA1MDIxNA==",
- "gtfsId":"HSL:6050214",
- "code":"Ki0514",
- "alerts":[
-
- ]
- },
- {
- "name":"Granbackantie",
- "id":"U3RvcDpIU0w6NjA1MDIxMg==",
- "gtfsId":"HSL:6050212",
- "code":"Ki0512",
- "alerts":[
-
- ]
- },
- {
- "name":"Bergträskinpolku",
- "id":"U3RvcDpIU0w6NjA1MDIxMA==",
- "gtfsId":"HSL:6050210",
- "code":"Ki0510",
- "alerts":[
-
- ]
- },
- {
- "name":"Itäinen kuninkaantie",
- "id":"U3RvcDpIU0w6NjA1MDIxNw==",
- "gtfsId":"HSL:6050217",
- "code":"Ki0517",
- "alerts":[
-
- ]
- },
- {
- "name":"Böle",
- "id":"U3RvcDpIU0w6NjMwNjAwMQ==",
- "gtfsId":"HSL:6306001",
- "code":"So3122",
- "alerts":[
-
- ]
- },
- {
- "name":"Kela",
- "id":"U3RvcDpIU0w6NjMwNjAwMg==",
- "gtfsId":"HSL:6306002",
- "code":"So3123",
- "alerts":[
-
- ]
- },
- {
- "name":"Tallbacka",
- "id":"U3RvcDpIU0w6NjMwNjAwNA==",
- "gtfsId":"HSL:6306004",
- "code":"So3125",
- "alerts":[
-
- ]
- },
- {
- "name":"Pikkalan kartano",
- "id":"U3RvcDpIU0w6NjMwNzAwNg==",
- "gtfsId":"HSL:6307006",
- "code":"So3133",
- "alerts":[
-
- ]
- },
- {
- "name":"Pikkala",
- "id":"U3RvcDpIU0w6NjMwNzAwNQ==",
- "gtfsId":"HSL:6307005",
- "code":"So3132",
- "alerts":[
-
- ]
- },
- {
- "name":"Sienitie",
- "id":"U3RvcDpIU0w6NjMwNDAwNA==",
- "gtfsId":"HSL:6304004",
- "code":"So3115",
- "alerts":[
-
- ]
- },
- {
- "name":"Störsvik th",
- "id":"U3RvcDpIU0w6NjMwNDAwNQ==",
- "gtfsId":"HSL:6304005",
- "code":"So3116",
- "alerts":[
-
- ]
- },
- {
- "name":"Kalliotie",
- "id":"U3RvcDpIU0w6NjMwNDAwMw==",
- "gtfsId":"HSL:6304003",
- "code":"So3114",
- "alerts":[
-
- ]
- },
- {
- "name":"Ruohosuontie",
- "id":"U3RvcDpIU0w6NjMwNDAwOQ==",
- "gtfsId":"HSL:6304009",
- "code":"So3120",
- "alerts":[
-
- ]
- },
- {
- "name":"Sunnanvik tiehaara",
- "id":"U3RvcDpIU0w6NjMwNDAwOA==",
- "gtfsId":"HSL:6304008",
- "code":"So3119",
- "alerts":[
-
- ]
- },
- {
- "name":"Sunnanvik",
- "id":"U3RvcDpIU0w6NjMwMjAxOA==",
- "gtfsId":"HSL:6302018",
- "code":"So3100",
- "alerts":[
-
- ]
- },
- {
- "name":"Degerbyntie",
- "id":"U3RvcDpIU0w6NjMwMjAwNQ==",
- "gtfsId":"HSL:6302005",
- "code":"So3087",
- "alerts":[
-
- ]
- },
- {
- "name":"Nordanvik tiehaara",
- "id":"U3RvcDpIU0w6NjMwMjAwOA==",
- "gtfsId":"HSL:6302008",
- "code":"So3090",
- "alerts":[
-
- ]
- },
- {
- "name":"Billskogintie",
- "id":"U3RvcDpIU0w6NjMwMjAwMA==",
- "gtfsId":"HSL:6302000",
- "code":"So3082",
- "alerts":[
-
- ]
- },
- {
- "name":"Sudenkaari",
- "id":"U3RvcDpIU0w6NjMwMjAxNw==",
- "gtfsId":"HSL:6302017",
- "code":"So3099",
- "alerts":[
-
- ]
- },
- {
- "name":"Siuntio matkahuolto",
- "id":"U3RvcDpIU0w6NjMwMjAxMg==",
- "gtfsId":"HSL:6302012",
- "code":"So3094",
- "alerts":[
-
- ]
- }
- ],
- "activeDates":[
- {
- "serviceId":"HSL:6181_20211231_20220109_UA",
- "day":[
- "20211231"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9VQV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_UA",
- "day":[
- "20211231"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9VQV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ke",
- "day":[
- "20220112",
- "20220202",
- "20220119",
- "20220209",
- "20220126"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9LZV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ke",
- "day":[
- "20220112",
- "20220202",
- "20220119",
- "20220209",
- "20220126"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9LZV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_To",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9Ub18xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_To",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9Ub18xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ma",
- "day":[
- "20220103"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ma",
- "day":[
- "20220103"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ti",
- "day":[
- "20220104"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9UaV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ti",
- "day":[
- "20220104"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9UaV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Pe",
- "day":[
- "20220105",
- "20220107"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9QZV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ma",
- "day":[
- "20220131",
- "20220117",
- "20220207",
- "20220124",
- "20220110"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9NYV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ma",
- "day":[
- "20220131",
- "20220117",
- "20220207",
- "20220124",
- "20220110"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9NYV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Pe",
- "day":[
- "20220105",
- "20220107"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9QZV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_To",
- "day":[
- "20220113",
- "20220203",
- "20220120",
- "20220210",
- "20220127"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9Ub18xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_To",
- "day":[
- "20220113",
- "20220203",
- "20220120",
- "20220210",
- "20220127"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9Ub18xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ti",
- "day":[
- "20220201",
- "20220118",
- "20220208",
- "20220125",
- "20220111"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9UaV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ti",
- "day":[
- "20220201",
- "20220118",
- "20220208",
- "20220125",
- "20220111"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9UaV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ke",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9LZV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ke",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9LZV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Pe",
- "day":[
- "20220128",
- "20220114",
- "20220204",
- "20220121",
- "20220211"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9QZV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Pe",
- "day":[
- "20220128",
- "20220114",
- "20220204",
- "20220121",
- "20220211"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9QZV8xXzE0MDU="
- }
- ],
- "tripsForDate":[
- {
- "stoptimes":[
- {
- "scheduledDeparture":50700,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":50760,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":50820,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":50820,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":50880,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":50940,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":50940,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51000,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51060,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51060,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51120,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51180,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51360,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51480,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51540,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51660,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51780,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51840,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52200,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52440,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52560,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52620,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52680,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52800,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52860,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52860,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52980,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":53040,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":53100,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8xXzE0MDU="
- },
- {
- "stoptimes":[
- {
- "scheduledDeparture":55800,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":55860,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":55920,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":55920,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":55980,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56040,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56040,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56100,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56160,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56160,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56220,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56280,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56460,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56580,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56640,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56760,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56880,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56940,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57300,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57540,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57660,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57720,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57780,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57900,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57960,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57960,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":58080,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":58140,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":58200,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8xXzE1MzA="
- }
- ],
- "id":"UGF0dGVybjpIU0w6NjE4MTowOjAx",
- "trips":[
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50700,
- "scheduledDeparture":50700,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50760,
- "scheduledDeparture":50760,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50820,
- "scheduledDeparture":50820,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50820,
- "scheduledDeparture":50820,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50880,
- "scheduledDeparture":50880,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50940,
- "scheduledDeparture":50940,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50940,
- "scheduledDeparture":50940,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51000,
- "scheduledDeparture":51000,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51060,
- "scheduledDeparture":51060,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51060,
- "scheduledDeparture":51060,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51120,
- "scheduledDeparture":51120,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51180,
- "scheduledDeparture":51180,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51360,
- "scheduledDeparture":51360,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51480,
- "scheduledDeparture":51480,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51540,
- "scheduledDeparture":51540,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51660,
- "scheduledDeparture":51660,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51780,
- "scheduledDeparture":51780,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51840,
- "scheduledDeparture":51840,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52200,
- "scheduledDeparture":52200,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52440,
- "scheduledDeparture":52440,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52560,
- "scheduledDeparture":52560,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52620,
- "scheduledDeparture":52620,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52680,
- "scheduledDeparture":52680,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52800,
- "scheduledDeparture":52800,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52860,
- "scheduledDeparture":52860,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52860,
- "scheduledDeparture":52860,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52980,
- "scheduledDeparture":52980,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53040,
- "scheduledDeparture":53040,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53100,
- "scheduledDeparture":53100,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8xXzE0MDU="
- },
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55800,
- "scheduledDeparture":55800,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55860,
- "scheduledDeparture":55860,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55920,
- "scheduledDeparture":55920,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55920,
- "scheduledDeparture":55920,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55980,
- "scheduledDeparture":55980,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56040,
- "scheduledDeparture":56040,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56040,
- "scheduledDeparture":56040,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56100,
- "scheduledDeparture":56100,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56160,
- "scheduledDeparture":56160,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56160,
- "scheduledDeparture":56160,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56220,
- "scheduledDeparture":56220,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56280,
- "scheduledDeparture":56280,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56460,
- "scheduledDeparture":56460,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56580,
- "scheduledDeparture":56580,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56640,
- "scheduledDeparture":56640,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56760,
- "scheduledDeparture":56760,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56880,
- "scheduledDeparture":56880,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56940,
- "scheduledDeparture":56940,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57300,
- "scheduledDeparture":57300,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57540,
- "scheduledDeparture":57540,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57660,
- "scheduledDeparture":57660,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57720,
- "scheduledDeparture":57720,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57780,
- "scheduledDeparture":57780,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57900,
- "scheduledDeparture":57900,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57960,
- "scheduledDeparture":57960,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57960,
- "scheduledDeparture":57960,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":58080,
- "scheduledDeparture":58080,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":58140,
- "scheduledDeparture":58140,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":58200,
- "scheduledDeparture":58200,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8xXzE1MzA="
- }
- ]
- }
- ],
- "alerts":[
-
- ],
- "id":"Um91dGU6SFNMOjYxODE="
- }
- }
- },
- "id":"routeRoutes_RoutePage_Query"
- },
- {
- "payload":{
- "data":{
- "pattern":{
- "code":"HSL:6181:0:01",
- "directionId":0,
- "headsign":"Siuntio",
- "geometry":[
- {
- "lat":60.119666,
- "lon":24.441534
- },
- {
- "lat":60.119735,
- "lon":24.440639
- },
- {
- "lat":60.119986,
- "lon":24.440473
- },
- {
- "lat":60.12001,
- "lon":24.440729
- },
- {
- "lat":60.120045,
- "lon":24.440982
- },
- {
- "lat":60.120089,
- "lon":24.44127
- },
- {
- "lat":60.120213,
- "lon":24.441865
- },
- {
- "lat":60.12023,
- "lon":24.441991
- },
- {
- "lat":60.120257,
- "lon":24.441974
- },
- {
- "lat":60.120311,
- "lon":24.442011
- },
- {
- "lat":60.120374,
- "lon":24.441993
- },
- {
- "lat":60.120401,
- "lon":24.442012
- },
- {
- "lat":60.120464,
- "lon":24.441977
- },
- {
- "lat":60.120743,
- "lon":24.441783
- },
- {
- "lat":60.120887,
- "lon":24.441659
- },
- {
- "lat":60.121031,
- "lon":24.441535
- },
- {
- "lat":60.121148,
- "lon":24.441446
- },
- {
- "lat":60.121328,
- "lon":24.441215
- },
- {
- "lat":60.121445,
- "lon":24.441019
- },
- {
- "lat":60.121563,
- "lon":24.440822
- },
- {
- "lat":60.121644,
- "lon":24.440716
- },
- {
- "lat":60.121662,
- "lon":24.440716
- },
- {
- "lat":60.121662,
- "lon":24.440752
- },
- {
- "lat":60.121688,
- "lon":24.440788
- },
- {
- "lat":60.121733,
- "lon":24.440807
- },
- {
- "lat":60.121778,
- "lon":24.440771
- },
- {
- "lat":60.121822,
- "lon":24.44097
- },
- {
- "lat":60.12184,
- "lon":24.44106
- },
- {
- "lat":60.121866,
- "lon":24.44124
- },
- {
- "lat":60.121884,
- "lon":24.441366
- },
- {
- "lat":60.121901,
- "lon":24.44151
- },
- {
- "lat":60.121919,
- "lon":24.441601
- },
- {
- "lat":60.121928,
- "lon":24.441673
- },
- {
- "lat":60.121892,
- "lon":24.441672
- },
- {
- "lat":60.121892,
- "lon":24.441708
- },
- {
- "lat":60.121874,
- "lon":24.44169
- },
- {
- "lat":60.121847,
- "lon":24.441708
- },
- {
- "lat":60.121784,
- "lon":24.441815
- },
- {
- "lat":60.121747,
- "lon":24.44194
- },
- {
- "lat":60.121747,
- "lon":24.44203
- },
- {
- "lat":60.121738,
- "lon":24.442066
- },
- {
- "lat":60.121747,
- "lon":24.442156
- },
- {
- "lat":60.1218,
- "lon":24.442264
- },
- {
- "lat":60.121872,
- "lon":24.442337
- },
- {
- "lat":60.121926,
- "lon":24.442338
- },
- {
- "lat":60.121997,
- "lon":24.442285
- },
- {
- "lat":60.122043,
- "lon":24.442214
- },
- {
- "lat":60.122052,
- "lon":24.44198
- },
- {
- "lat":60.122385,
- "lon":24.441913
- },
- {
- "lat":60.123346,
- "lon":24.441638
- },
- {
- "lat":60.123759,
- "lon":24.441481
- },
- {
- "lat":60.123867,
- "lon":24.441465
- },
- {
- "lat":60.124145,
- "lon":24.441451
- },
- {
- "lat":60.124837,
- "lon":24.441244
- },
- {
- "lat":60.125591,
- "lon":24.441164
- },
- {
- "lat":60.125744,
- "lon":24.441166
- },
- {
- "lat":60.126031,
- "lon":24.441242
- },
- {
- "lat":60.126371,
- "lon":24.441391
- },
- {
- "lat":60.12647,
- "lon":24.441482
- },
- {
- "lat":60.126693,
- "lon":24.441755
- },
- {
- "lat":60.126961,
- "lon":24.442118
- },
- {
- "lat":60.12739,
- "lon":24.44288
- },
- {
- "lat":60.128397,
- "lon":24.4448
- },
- {
- "lat":60.128924,
- "lon":24.445707
- },
- {
- "lat":60.129192,
- "lon":24.44607
- },
- {
- "lat":60.129317,
- "lon":24.446252
- },
- {
- "lat":60.1298,
- "lon":24.446762
- },
- {
- "lat":60.129925,
- "lon":24.446854
- },
- {
- "lat":60.129809,
- "lon":24.446744
- },
- {
- "lat":60.129666,
- "lon":24.446617
- },
- {
- "lat":60.129362,
- "lon":24.446271
- },
- {
- "lat":60.12911,
- "lon":24.445899
- },
- {
- "lat":60.128924,
- "lon":24.445689
- },
- {
- "lat":60.128451,
- "lon":24.444891
- },
- {
- "lat":60.127479,
- "lon":24.443025
- },
- {
- "lat":60.127229,
- "lon":24.44259
- },
- {
- "lat":60.126961,
- "lon":24.442118
- },
- {
- "lat":60.126702,
- "lon":24.441755
- },
- {
- "lat":60.12647,
- "lon":24.441482
- },
- {
- "lat":60.126371,
- "lon":24.441391
- },
- {
- "lat":60.126646,
- "lon":24.439937
- },
- {
- "lat":60.126729,
- "lon":24.439219
- },
- {
- "lat":60.126757,
- "lon":24.438752
- },
- {
- "lat":60.126733,
- "lon":24.438068
- },
- {
- "lat":60.126663,
- "lon":24.437472
- },
- {
- "lat":60.12661,
- "lon":24.43722
- },
- {
- "lat":60.125937,
- "lon":24.434494
- },
- {
- "lat":60.125786,
- "lon":24.433845
- },
- {
- "lat":60.125671,
- "lon":24.433393
- },
- {
- "lat":60.125547,
- "lon":24.43287
- },
- {
- "lat":60.125433,
- "lon":24.432167
- },
- {
- "lat":60.125399,
- "lon":24.431483
- },
- {
- "lat":60.125382,
- "lon":24.431123
- },
- {
- "lat":60.125423,
- "lon":24.42963
- },
- {
- "lat":60.125407,
- "lon":24.429001
- },
- {
- "lat":60.125381,
- "lon":24.428659
- },
- {
- "lat":60.125346,
- "lon":24.428334
- },
- {
- "lat":60.125328,
- "lon":24.428208
- },
- {
- "lat":60.12524,
- "lon":24.427793
- },
- {
- "lat":60.125142,
- "lon":24.42745
- },
- {
- "lat":60.124973,
- "lon":24.426998
- },
- {
- "lat":60.124866,
- "lon":24.426745
- },
- {
- "lat":60.124429,
- "lon":24.426002
- },
- {
- "lat":60.12409,
- "lon":24.425332
- },
- {
- "lat":60.123894,
- "lon":24.424826
- },
- {
- "lat":60.123725,
- "lon":24.42423
- },
- {
- "lat":60.12361,
- "lon":24.423743
- },
- {
- "lat":60.123513,
- "lon":24.423238
- },
- {
- "lat":60.123479,
- "lon":24.42286
- },
- {
- "lat":60.123408,
- "lon":24.422391
- },
- {
- "lat":60.123356,
- "lon":24.422013
- },
- {
- "lat":60.12332,
- "lon":24.421778
- },
- {
- "lat":60.123224,
- "lon":24.421184
- },
- {
- "lat":60.12318,
- "lon":24.420859
- },
- {
- "lat":60.123059,
- "lon":24.419239
- },
- {
- "lat":60.123034,
- "lon":24.418771
- },
- {
- "lat":60.122867,
- "lon":24.417635
- },
- {
- "lat":60.122752,
- "lon":24.417094
- },
- {
- "lat":60.122682,
- "lon":24.416644
- },
- {
- "lat":60.122647,
- "lon":24.41623
- },
- {
- "lat":60.122677,
- "lon":24.415115
- },
- {
- "lat":60.122661,
- "lon":24.414557
- },
- {
- "lat":60.122566,
- "lon":24.413351
- },
- {
- "lat":60.122568,
- "lon":24.412775
- },
- {
- "lat":60.122587,
- "lon":24.412524
- },
- {
- "lat":60.122669,
- "lon":24.412021
- },
- {
- "lat":60.123068,
- "lon":24.410713
- },
- {
- "lat":60.123267,
- "lon":24.410158
- },
- {
- "lat":60.123304,
- "lon":24.410014
- },
- {
- "lat":60.123394,
- "lon":24.409818
- },
- {
- "lat":60.123602,
- "lon":24.409407
- },
- {
- "lat":60.123828,
- "lon":24.408959
- },
- {
- "lat":60.123909,
- "lon":24.408726
- },
- {
- "lat":60.124,
- "lon":24.408421
- },
- {
- "lat":60.124091,
- "lon":24.408063
- },
- {
- "lat":60.124191,
- "lon":24.407578
- },
- {
- "lat":60.124228,
- "lon":24.407309
- },
- {
- "lat":60.124246,
- "lon":24.407057
- },
- {
- "lat":60.124229,
- "lon":24.406805
- },
- {
- "lat":60.124159,
- "lon":24.406319
- },
- {
- "lat":60.124018,
- "lon":24.405561
- },
- {
- "lat":60.123938,
- "lon":24.405147
- },
- {
- "lat":60.123903,
- "lon":24.404894
- },
- {
- "lat":60.123895,
- "lon":24.404732
- },
- {
- "lat":60.123895,
- "lon":24.404571
- },
- {
- "lat":60.123896,
- "lon":24.404391
- },
- {
- "lat":60.123878,
- "lon":24.404211
- },
- {
- "lat":60.123888,
- "lon":24.403923
- },
- {
- "lat":60.123908,
- "lon":24.403168
- },
- {
- "lat":60.123901,
- "lon":24.402646
- },
- {
- "lat":60.123867,
- "lon":24.40216
- },
- {
- "lat":60.123726,
- "lon":24.401277
- },
- {
- "lat":60.1237,
- "lon":24.400845
- },
- {
- "lat":60.123719,
- "lon":24.400539
- },
- {
- "lat":60.123901,
- "lon":24.399768
- },
- {
- "lat":60.123947,
- "lon":24.399427
- },
- {
- "lat":60.123966,
- "lon":24.399013
- },
- {
- "lat":60.123932,
- "lon":24.398203
- },
- {
- "lat":60.123872,
- "lon":24.397591
- },
- {
- "lat":60.123774,
- "lon":24.397032
- },
- {
- "lat":60.123721,
- "lon":24.396834
- },
- {
- "lat":60.123597,
- "lon":24.396526
- },
- {
- "lat":60.12349,
- "lon":24.396291
- },
- {
- "lat":60.123168,
- "lon":24.395496
- },
- {
- "lat":60.123106,
- "lon":24.395153
- },
- {
- "lat":60.122975,
- "lon":24.393857
- },
- {
- "lat":60.12287,
- "lon":24.393082
- },
- {
- "lat":60.122686,
- "lon":24.391659
- },
- {
- "lat":60.122678,
- "lon":24.391191
- },
- {
- "lat":60.122734,
- "lon":24.3904
- },
- {
- "lat":60.122727,
- "lon":24.389969
- },
- {
- "lat":60.122666,
- "lon":24.389284
- },
- {
- "lat":60.122604,
- "lon":24.388834
- },
- {
- "lat":60.122454,
- "lon":24.388167
- },
- {
- "lat":60.122241,
- "lon":24.387391
- },
- {
- "lat":60.122099,
- "lon":24.386616
- },
- {
- "lat":60.122064,
- "lon":24.386255
- },
- {
- "lat":60.121995,
- "lon":24.385337
- },
- {
- "lat":60.121944,
- "lon":24.384599
- },
- {
- "lat":60.121891,
- "lon":24.384041
- },
- {
- "lat":60.121529,
- "lon":24.379144
- },
- {
- "lat":60.121416,
- "lon":24.377811
- },
- {
- "lat":60.121293,
- "lon":24.376964
- },
- {
- "lat":60.121231,
- "lon":24.37664
- },
- {
- "lat":60.121142,
- "lon":24.376225
- },
- {
- "lat":60.121036,
- "lon":24.375756
- },
- {
- "lat":60.120849,
- "lon":24.375161
- },
- {
- "lat":60.120742,
- "lon":24.374854
- },
- {
- "lat":60.120279,
- "lon":24.373733
- },
- {
- "lat":60.120172,
- "lon":24.373408
- },
- {
- "lat":60.120145,
- "lon":24.373246
- },
- {
- "lat":60.120049,
- "lon":24.372292
- },
- {
- "lat":60.120014,
- "lon":24.372094
- },
- {
- "lat":60.119934,
- "lon":24.371877
- },
- {
- "lat":60.1198,
- "lon":24.371677
- },
- {
- "lat":60.119289,
- "lon":24.371276
- },
- {
- "lat":60.119084,
- "lon":24.370968
- },
- {
- "lat":60.118986,
- "lon":24.370715
- },
- {
- "lat":60.11895,
- "lon":24.370535
- },
- {
- "lat":60.118863,
- "lon":24.36985
- },
- {
- "lat":60.11882,
- "lon":24.369077
- },
- {
- "lat":60.118839,
- "lon":24.368735
- },
- {
- "lat":60.119085,
- "lon":24.367443
- },
- {
- "lat":60.119086,
- "lon":24.367101
- },
- {
- "lat":60.118997,
- "lon":24.366705
- },
- {
- "lat":60.118926,
- "lon":24.366542
- },
- {
- "lat":60.118594,
- "lon":24.365927
- },
- {
- "lat":60.118381,
- "lon":24.365349
- },
- {
- "lat":60.118238,
- "lon":24.364808
- },
- {
- "lat":60.118132,
- "lon":24.364231
- },
- {
- "lat":60.11801,
- "lon":24.363222
- },
- {
- "lat":60.117976,
- "lon":24.362341
- },
- {
- "lat":60.117855,
- "lon":24.360685
- },
- {
- "lat":60.11769,
- "lon":24.358669
- },
- {
- "lat":60.117646,
- "lon":24.358255
- },
- {
- "lat":60.117584,
- "lon":24.358056
- },
- {
- "lat":60.117451,
- "lon":24.357605
- },
- {
- "lat":60.116977,
- "lon":24.356791
- },
- {
- "lat":60.11678,
- "lon":24.356555
- },
- {
- "lat":60.116458,
- "lon":24.356389
- },
- {
- "lat":60.116315,
- "lon":24.356172
- },
- {
- "lat":60.116198,
- "lon":24.355973
- },
- {
- "lat":60.116091,
- "lon":24.355738
- },
- {
- "lat":60.116003,
- "lon":24.355395
- },
- {
- "lat":60.115994,
- "lon":24.355215
- },
- {
- "lat":60.116357,
- "lon":24.353727
- },
- {
- "lat":60.116439,
- "lon":24.353404
- },
- {
- "lat":60.11636,
- "lon":24.35281
- },
- {
- "lat":60.116163,
- "lon":24.35243
- },
- {
- "lat":60.115993,
- "lon":24.35214
- },
- {
- "lat":60.115725,
- "lon":24.351832
- },
- {
- "lat":60.114956,
- "lon":24.350834
- },
- {
- "lat":60.114696,
- "lon":24.350472
- },
- {
- "lat":60.114581,
- "lon":24.349949
- },
- {
- "lat":60.114378,
- "lon":24.348742
- },
- {
- "lat":60.114334,
- "lon":24.34831
- },
- {
- "lat":60.114391,
- "lon":24.347322
- },
- {
- "lat":60.114474,
- "lon":24.346495
- },
- {
- "lat":60.114493,
- "lon":24.346064
- },
- {
- "lat":60.114386,
- "lon":24.345631
- },
- {
- "lat":60.114217,
- "lon":24.345162
- },
- {
- "lat":60.114047,
- "lon":24.344765
- },
- {
- "lat":60.113815,
- "lon":24.344313
- },
- {
- "lat":60.113592,
- "lon":24.343933
- },
- {
- "lat":60.113467,
- "lon":24.343805
- },
- {
- "lat":60.113225,
- "lon":24.343641
- },
- {
- "lat":60.112929,
- "lon":24.34344
- },
- {
- "lat":60.11275,
- "lon":24.343205
- },
- {
- "lat":60.11259,
- "lon":24.342807
- },
- {
- "lat":60.112501,
- "lon":24.342501
- },
- {
- "lat":60.112466,
- "lon":24.342177
- },
- {
- "lat":60.112457,
- "lon":24.341871
- },
- {
- "lat":60.112503,
- "lon":24.34144
- },
- {
- "lat":60.112558,
- "lon":24.340973
- },
- {
- "lat":60.112686,
- "lon":24.34011
- },
- {
- "lat":60.112787,
- "lon":24.339194
- },
- {
- "lat":60.112888,
- "lon":24.338476
- },
- {
- "lat":60.112916,
- "lon":24.337973
- },
- {
- "lat":60.112934,
- "lon":24.337649
- },
- {
- "lat":60.112917,
- "lon":24.337307
- },
- {
- "lat":60.112882,
- "lon":24.336749
- },
- {
- "lat":60.112848,
- "lon":24.336354
- },
- {
- "lat":60.112777,
- "lon":24.335903
- },
- {
- "lat":60.112653,
- "lon":24.335327
- },
- {
- "lat":60.1126,
- "lon":24.334841
- },
- {
- "lat":60.11252,
- "lon":24.334462
- },
- {
- "lat":60.112467,
- "lon":24.334228
- },
- {
- "lat":60.112387,
- "lon":24.333993
- },
- {
- "lat":60.112307,
- "lon":24.333669
- },
- {
- "lat":60.11229,
- "lon":24.333471
- },
- {
- "lat":60.112281,
- "lon":24.333273
- },
- {
- "lat":60.112273,
- "lon":24.333039
- },
- {
- "lat":60.112282,
- "lon":24.332805
- },
- {
- "lat":60.11231,
- "lon":24.332536
- },
- {
- "lat":60.112364,
- "lon":24.332321
- },
- {
- "lat":60.112455,
- "lon":24.332052
- },
- {
- "lat":60.112599,
- "lon":24.331802
- },
- {
- "lat":60.11268,
- "lon":24.331587
- },
- {
- "lat":60.112753,
- "lon":24.3313
- },
- {
- "lat":60.112807,
- "lon":24.331103
- },
- {
- "lat":60.112727,
- "lon":24.33076
- },
- {
- "lat":60.112647,
- "lon":24.330454
- },
- {
- "lat":60.112603,
- "lon":24.330165
- },
- {
- "lat":60.112568,
- "lon":24.329931
- },
- {
- "lat":60.112578,
- "lon":24.329608
- },
- {
- "lat":60.112614,
- "lon":24.329356
- },
- {
- "lat":60.112686,
- "lon":24.329123
- },
- {
- "lat":60.112759,
- "lon":24.328944
- },
- {
- "lat":60.113092,
- "lon":24.32839
- },
- {
- "lat":60.113363,
- "lon":24.327674
- },
- {
- "lat":60.113688,
- "lon":24.326922
- },
- {
- "lat":60.114041,
- "lon":24.325846
- },
- {
- "lat":60.114366,
- "lon":24.324878
- },
- {
- "lat":60.11443,
- "lon":24.324627
- },
- {
- "lat":60.114466,
- "lon":24.324448
- },
- {
- "lat":60.114503,
- "lon":24.32425
- },
- {
- "lat":60.114548,
- "lon":24.323872
- },
- {
- "lat":60.114567,
- "lon":24.323513
- },
- {
- "lat":60.114577,
- "lon":24.323315
- },
- {
- "lat":60.114579,
- "lon":24.322542
- },
- {
- "lat":60.114591,
- "lon":24.321067
- },
- {
- "lat":60.114612,
- "lon":24.319791
- },
- {
- "lat":60.114623,
- "lon":24.319144
- },
- {
- "lat":60.114651,
- "lon":24.318532
- },
- {
- "lat":60.114707,
- "lon":24.31776
- },
- {
- "lat":60.114763,
- "lon":24.316915
- },
- {
- "lat":60.114782,
- "lon":24.31652
- },
- {
- "lat":60.114783,
- "lon":24.316106
- },
- {
- "lat":60.114731,
- "lon":24.31544
- },
- {
- "lat":60.114705,
- "lon":24.314936
- },
- {
- "lat":60.114706,
- "lon":24.314559
- },
- {
- "lat":60.114733,
- "lon":24.314289
- },
- {
- "lat":60.114752,
- "lon":24.314056
- },
- {
- "lat":60.114842,
- "lon":24.313661
- },
- {
- "lat":60.115015,
- "lon":24.312961
- },
- {
- "lat":60.115007,
- "lon":24.312422
- },
- {
- "lat":60.114981,
- "lon":24.312134
- },
- {
- "lat":60.114973,
- "lon":24.311612
- },
- {
- "lat":60.115001,
- "lon":24.311001
- },
- {
- "lat":60.114995,
- "lon":24.309976
- },
- {
- "lat":60.115014,
- "lon":24.309599
- },
- {
- "lat":60.11506,
- "lon":24.30897
- },
- {
- "lat":60.115134,
- "lon":24.308197
- },
- {
- "lat":60.115189,
- "lon":24.30764
- },
- {
- "lat":60.115244,
- "lon":24.307101
- },
- {
- "lat":60.115272,
- "lon":24.306616
- },
- {
- "lat":60.115282,
- "lon":24.306328
- },
- {
- "lat":60.115231,
- "lon":24.305033
- },
- {
- "lat":60.115205,
- "lon":24.304529
- },
- {
- "lat":60.11517,
- "lon":24.304114
- },
- {
- "lat":60.115135,
- "lon":24.303862
- },
- {
- "lat":60.115108,
- "lon":24.303628
- },
- {
- "lat":60.11501,
- "lon":24.303339
- },
- {
- "lat":60.114868,
- "lon":24.302978
- },
- {
- "lat":60.114725,
- "lon":24.302474
- },
- {
- "lat":60.114565,
- "lon":24.302041
- },
- {
- "lat":60.114253,
- "lon":24.301031
- },
- {
- "lat":60.11419,
- "lon":24.301066
- },
- {
- "lat":60.113893,
- "lon":24.300812
- },
- {
- "lat":60.113732,
- "lon":24.300648
- },
- {
- "lat":60.113661,
- "lon":24.300558
- },
- {
- "lat":60.113401,
- "lon":24.300035
- },
- {
- "lat":60.11333,
- "lon":24.299872
- },
- {
- "lat":60.113258,
- "lon":24.299764
- },
- {
- "lat":60.113124,
- "lon":24.299547
- },
- {
- "lat":60.112999,
- "lon":24.29942
- },
- {
- "lat":60.112936,
- "lon":24.299365
- },
- {
- "lat":60.112784,
- "lon":24.299238
- },
- {
- "lat":60.11264,
- "lon":24.299201
- },
- {
- "lat":60.112425,
- "lon":24.299235
- },
- {
- "lat":60.112272,
- "lon":24.299305
- },
- {
- "lat":60.112012,
- "lon":24.299429
- },
- {
- "lat":60.111787,
- "lon":24.299445
- },
- {
- "lat":60.111599,
- "lon":24.299389
- },
- {
- "lat":60.111366,
- "lon":24.299279
- },
- {
- "lat":60.111169,
- "lon":24.299115
- },
- {
- "lat":60.11099,
- "lon":24.298862
- },
- {
- "lat":60.110838,
- "lon":24.298627
- },
- {
- "lat":60.110713,
- "lon":24.29832
- },
- {
- "lat":60.110579,
- "lon":24.298031
- },
- {
- "lat":60.110499,
- "lon":24.297833
- },
- {
- "lat":60.110382,
- "lon":24.29758
- },
- {
- "lat":60.110275,
- "lon":24.297381
- },
- {
- "lat":60.110105,
- "lon":24.297146
- },
- {
- "lat":60.10981,
- "lon":24.296909
- },
- {
- "lat":60.109648,
- "lon":24.29671
- },
- {
- "lat":60.109505,
- "lon":24.296511
- },
- {
- "lat":60.109398,
- "lon":24.29624
- },
- {
- "lat":60.109309,
- "lon":24.295934
- },
- {
- "lat":60.109238,
- "lon":24.295592
- },
- {
- "lat":60.109016,
- "lon":24.294547
- },
- {
- "lat":60.108927,
- "lon":24.294168
- },
- {
- "lat":60.108865,
- "lon":24.293844
- },
- {
- "lat":60.108803,
- "lon":24.293592
- },
- {
- "lat":60.108732,
- "lon":24.293358
- },
- {
- "lat":60.108598,
- "lon":24.292871
- },
- {
- "lat":60.108491,
- "lon":24.292546
- },
- {
- "lat":60.108268,
- "lon":24.292041
- },
- {
- "lat":60.108152,
- "lon":24.291752
- },
- {
- "lat":60.107866,
- "lon":24.291228
- },
- {
- "lat":60.107651,
- "lon":24.290849
- },
- {
- "lat":60.10741,
- "lon":24.290487
- },
- {
- "lat":60.107311,
- "lon":24.290378
- },
- {
- "lat":60.107195,
- "lon":24.290269
- },
- {
- "lat":60.10706,
- "lon":24.290196
- },
- {
- "lat":60.106953,
- "lon":24.290141
- },
- {
- "lat":60.106818,
- "lon":24.290122
- },
- {
- "lat":60.106692,
- "lon":24.290157
- },
- {
- "lat":60.106567,
- "lon":24.29021
- },
- {
- "lat":60.106432,
- "lon":24.290263
- },
- {
- "lat":60.106324,
- "lon":24.290423
- },
- {
- "lat":60.106225,
- "lon":24.29053
- },
- {
- "lat":60.106063,
- "lon":24.290745
- },
- {
- "lat":60.105829,
- "lon":24.29112
- },
- {
- "lat":60.105351,
- "lon":24.291853
- },
- {
- "lat":60.105108,
- "lon":24.29221
- },
- {
- "lat":60.104892,
- "lon":24.292496
- },
- {
- "lat":60.104703,
- "lon":24.292692
- },
- {
- "lat":60.104505,
- "lon":24.292906
- },
- {
- "lat":60.104271,
- "lon":24.293156
- },
- {
- "lat":60.103929,
- "lon":24.293746
- },
- {
- "lat":60.103541,
- "lon":24.294425
- },
- {
- "lat":60.103316,
- "lon":24.294819
- },
- {
- "lat":60.103046,
- "lon":24.29541
- },
- {
- "lat":60.102911,
- "lon":24.295606
- },
- {
- "lat":60.102685,
- "lon":24.296055
- },
- {
- "lat":60.102586,
- "lon":24.296323
- },
- {
- "lat":60.102414,
- "lon":24.296933
- },
- {
- "lat":60.102233,
- "lon":24.297381
- },
- {
- "lat":60.102125,
- "lon":24.297613
- },
- {
- "lat":60.101972,
- "lon":24.297792
- },
- {
- "lat":60.101747,
- "lon":24.297951
- },
- {
- "lat":60.101298,
- "lon":24.298289
- },
- {
- "lat":60.100857,
- "lon":24.298626
- },
- {
- "lat":60.100633,
- "lon":24.298714
- },
- {
- "lat":60.100336,
- "lon":24.298891
- },
- {
- "lat":60.100228,
- "lon":24.298998
- },
- {
- "lat":60.100111,
- "lon":24.299087
- },
- {
- "lat":60.099958,
- "lon":24.299283
- },
- {
- "lat":60.099877,
- "lon":24.299462
- },
- {
- "lat":60.099859,
- "lon":24.299624
- },
- {
- "lat":60.099823,
- "lon":24.299659
- },
- {
- "lat":60.09985,
- "lon":24.299768
- },
- {
- "lat":60.099903,
- "lon":24.300128
- },
- {
- "lat":60.099938,
- "lon":24.300308
- },
- {
- "lat":60.099955,
- "lon":24.300649
- },
- {
- "lat":60.099955,
- "lon":24.300883
- },
- {
- "lat":60.099945,
- "lon":24.301099
- },
- {
- "lat":60.0999,
- "lon":24.301332
- },
- {
- "lat":60.099809,
- "lon":24.301583
- },
- {
- "lat":60.099746,
- "lon":24.301726
- },
- {
- "lat":60.099647,
- "lon":24.301887
- },
- {
- "lat":60.099503,
- "lon":24.302029
- },
- {
- "lat":60.099306,
- "lon":24.302153
- },
- {
- "lat":60.099225,
- "lon":24.302134
- },
- {
- "lat":60.099235,
- "lon":24.301739
- },
- {
- "lat":60.099253,
- "lon":24.301362
- },
- {
- "lat":60.099254,
- "lon":24.300948
- },
- {
- "lat":60.099255,
- "lon":24.300607
- },
- {
- "lat":60.099188,
- "lon":24.298593
- },
- {
- "lat":60.099136,
- "lon":24.297658
- },
- {
- "lat":60.099049,
- "lon":24.296776
- },
- {
- "lat":60.098943,
- "lon":24.295805
- },
- {
- "lat":60.098766,
- "lon":24.294689
- },
- {
- "lat":60.098465,
- "lon":24.293087
- },
- {
- "lat":60.098207,
- "lon":24.29206
- },
- {
- "lat":60.097966,
- "lon":24.291087
- },
- {
- "lat":60.097548,
- "lon":24.289412
- },
- {
- "lat":60.097388,
- "lon":24.288727
- },
- {
- "lat":60.096479,
- "lon":24.289798
- },
- {
- "lat":60.095724,
- "lon":24.290546
- },
- {
- "lat":60.095346,
- "lon":24.290884
- },
- {
- "lat":60.094888,
- "lon":24.291221
- },
- {
- "lat":60.094267,
- "lon":24.291809
- },
- {
- "lat":60.093556,
- "lon":24.292737
- },
- {
- "lat":60.093196,
- "lon":24.292985
- },
- {
- "lat":60.092998,
- "lon":24.293217
- },
- {
- "lat":60.092854,
- "lon":24.293521
- },
- {
- "lat":60.092457,
- "lon":24.294615
- },
- {
- "lat":60.09215,
- "lon":24.295223
- },
- {
- "lat":60.092033,
- "lon":24.295492
- },
- {
- "lat":60.091871,
- "lon":24.295706
- },
- {
- "lat":60.091655,
- "lon":24.295848
- },
- {
- "lat":60.091323,
- "lon":24.296042
- },
- {
- "lat":60.091089,
- "lon":24.296238
- },
- {
- "lat":60.090819,
- "lon":24.296541
- },
- {
- "lat":60.090612,
- "lon":24.296773
- },
- {
- "lat":60.090387,
- "lon":24.296932
- },
- {
- "lat":60.090073,
- "lon":24.297127
- },
- {
- "lat":60.089749,
- "lon":24.297448
- },
- {
- "lat":60.089371,
- "lon":24.297732
- },
- {
- "lat":60.089065,
- "lon":24.297981
- },
- {
- "lat":60.088832,
- "lon":24.298122
- },
- {
- "lat":60.088661,
- "lon":24.298282
- },
- {
- "lat":60.088445,
- "lon":24.298496
- },
- {
- "lat":60.088256,
- "lon":24.298872
- },
- {
- "lat":60.08794,
- "lon":24.299336
- },
- {
- "lat":60.087724,
- "lon":24.299693
- },
- {
- "lat":60.087472,
- "lon":24.300104
- },
- {
- "lat":60.087247,
- "lon":24.300426
- },
- {
- "lat":60.087004,
- "lon":24.300657
- },
- {
- "lat":60.086761,
- "lon":24.300781
- },
- {
- "lat":60.08659,
- "lon":24.300942
- },
- {
- "lat":60.086213,
- "lon":24.301333
- },
- {
- "lat":60.08588,
- "lon":24.301636
- },
- {
- "lat":60.085691,
- "lon":24.301706
- },
- {
- "lat":60.085458,
- "lon":24.30165
- },
- {
- "lat":60.084443,
- "lon":24.301353
- },
- {
- "lat":60.0843,
- "lon":24.301262
- },
- {
- "lat":60.084139,
- "lon":24.301099
- },
- {
- "lat":60.083933,
- "lon":24.300845
- },
- {
- "lat":60.083736,
- "lon":24.300628
- },
- {
- "lat":60.08336,
- "lon":24.300427
- },
- {
- "lat":60.083172,
- "lon":24.300227
- },
- {
- "lat":60.083001,
- "lon":24.300028
- },
- {
- "lat":60.082868,
- "lon":24.299614
- },
- {
- "lat":60.082627,
- "lon":24.298947
- },
- {
- "lat":60.082547,
- "lon":24.298551
- },
- {
- "lat":60.082449,
- "lon":24.298263
- },
- {
- "lat":60.08236,
- "lon":24.298028
- },
- {
- "lat":60.082235,
- "lon":24.29774
- },
- {
- "lat":60.08211,
- "lon":24.297505
- },
- {
- "lat":60.08203,
- "lon":24.297235
- },
- {
- "lat":60.081932,
- "lon":24.296713
- },
- {
- "lat":60.081826,
- "lon":24.295993
- },
- {
- "lat":60.081782,
- "lon":24.295616
- },
- {
- "lat":60.081622,
- "lon":24.294878
- },
- {
- "lat":60.081534,
- "lon":24.294176
- },
- {
- "lat":60.08221,
- "lon":24.292781
- },
- {
- "lat":60.08114,
- "lon":24.289628
- },
- {
- "lat":60.080555,
- "lon":24.290467
- },
- {
- "lat":60.080805,
- "lon":24.291008
- },
- {
- "lat":60.080894,
- "lon":24.29126
- },
- {
- "lat":60.08101,
- "lon":24.29171
- },
- {
- "lat":60.081107,
- "lon":24.292196
- },
- {
- "lat":60.081383,
- "lon":24.293456
- },
- {
- "lat":60.081525,
- "lon":24.294158
- },
- {
- "lat":60.081578,
- "lon":24.294464
- },
- {
- "lat":60.081613,
- "lon":24.294734
- },
- {
- "lat":60.081693,
- "lon":24.29522
- },
- {
- "lat":60.081773,
- "lon":24.295651
- },
- {
- "lat":60.081835,
- "lon":24.296029
- },
- {
- "lat":60.08187,
- "lon":24.296389
- },
- {
- "lat":60.081932,
- "lon":24.296731
- },
- {
- "lat":60.081976,
- "lon":24.296965
- },
- {
- "lat":60.082003,
- "lon":24.297163
- },
- {
- "lat":60.082074,
- "lon":24.297379
- },
- {
- "lat":60.082163,
- "lon":24.297613
- },
- {
- "lat":60.082333,
- "lon":24.297992
- },
- {
- "lat":60.082547,
- "lon":24.298551
- },
- {
- "lat":60.082636,
- "lon":24.298893
- },
- {
- "lat":60.082689,
- "lon":24.299091
- },
- {
- "lat":60.082805,
- "lon":24.299469
- },
- {
- "lat":60.083028,
- "lon":24.300028
- },
- {
- "lat":60.083162,
- "lon":24.300263
- },
- {
- "lat":60.083369,
- "lon":24.300409
- },
- {
- "lat":60.083646,
- "lon":24.300591
- },
- {
- "lat":60.083754,
- "lon":24.300646
- },
- {
- "lat":60.083924,
- "lon":24.300827
- },
- {
- "lat":60.084192,
- "lon":24.301189
- },
- {
- "lat":60.084327,
- "lon":24.301298
- },
- {
- "lat":60.084443,
- "lon":24.301371
- },
- {
- "lat":60.085458,
- "lon":24.301668
- },
- {
- "lat":60.085664,
- "lon":24.30167
- },
- {
- "lat":60.08588,
- "lon":24.3016
- },
- {
- "lat":60.086114,
- "lon":24.301422
- },
- {
- "lat":60.08659,
- "lon":24.300942
- },
- {
- "lat":60.086716,
- "lon":24.300817
- },
- {
- "lat":60.086887,
- "lon":24.300729
- },
- {
- "lat":60.087265,
- "lon":24.30039
- },
- {
- "lat":60.087544,
- "lon":24.299997
- },
- {
- "lat":60.088229,
- "lon":24.298889
- },
- {
- "lat":60.088463,
- "lon":24.298514
- },
- {
- "lat":60.088805,
- "lon":24.298104
- },
- {
- "lat":60.089335,
- "lon":24.297803
- },
- {
- "lat":60.089749,
- "lon":24.297448
- },
- {
- "lat":60.089956,
- "lon":24.297252
- },
- {
- "lat":60.090234,
- "lon":24.297021
- },
- {
- "lat":60.090441,
- "lon":24.296915
- },
- {
- "lat":60.090711,
- "lon":24.296666
- },
- {
- "lat":60.091098,
- "lon":24.296238
- },
- {
- "lat":60.091341,
- "lon":24.296025
- },
- {
- "lat":60.091646,
- "lon":24.295866
- },
- {
- "lat":60.091907,
- "lon":24.295634
- },
- {
- "lat":60.092087,
- "lon":24.295348
- },
- {
- "lat":60.092457,
- "lon":24.294561
- },
- {
- "lat":60.092619,
- "lon":24.294167
- },
- {
- "lat":60.092791,
- "lon":24.293648
- },
- {
- "lat":60.092917,
- "lon":24.293432
- },
- {
- "lat":60.093034,
- "lon":24.293182
- },
- {
- "lat":60.093205,
- "lon":24.293003
- },
- {
- "lat":60.093394,
- "lon":24.292861
- },
- {
- "lat":60.093538,
- "lon":24.292719
- },
- {
- "lat":60.093754,
- "lon":24.292451
- },
- {
- "lat":60.094258,
- "lon":24.291809
- },
- {
- "lat":60.094735,
- "lon":24.291346
- },
- {
- "lat":60.095328,
- "lon":24.290866
- },
- {
- "lat":60.096227,
- "lon":24.290047
- },
- {
- "lat":60.096839,
- "lon":24.28937
- },
- {
- "lat":60.097388,
- "lon":24.288727
- },
- {
- "lat":60.097317,
- "lon":24.288439
- },
- {
- "lat":60.09729,
- "lon":24.288277
- },
- {
- "lat":60.097219,
- "lon":24.287899
- },
- {
- "lat":60.097078,
- "lon":24.287125
- },
- {
- "lat":60.096917,
- "lon":24.286081
- },
- {
- "lat":60.096767,
- "lon":24.285055
- },
- {
- "lat":60.096671,
- "lon":24.284012
- },
- {
- "lat":60.09661,
- "lon":24.282808
- },
- {
- "lat":60.096432,
- "lon":24.27824
- },
- {
- "lat":60.096399,
- "lon":24.27256
- },
- {
- "lat":60.096387,
- "lon":24.269523
- },
- {
- "lat":60.096394,
- "lon":24.266
- },
- {
- "lat":60.096313,
- "lon":24.261758
- },
- {
- "lat":60.096185,
- "lon":24.258323
- },
- {
- "lat":60.096116,
- "lon":24.257262
- },
- {
- "lat":60.096072,
- "lon":24.256417
- },
- {
- "lat":60.095994,
- "lon":24.255123
- },
- {
- "lat":60.095827,
- "lon":24.253306
- },
- {
- "lat":60.095694,
- "lon":24.251939
- },
- {
- "lat":60.095874,
- "lon":24.251869
- },
- {
- "lat":60.09643,
- "lon":24.251783
- },
- {
- "lat":60.09652,
- "lon":24.251766
- },
- {
- "lat":60.096852,
- "lon":24.251715
- },
- {
- "lat":60.097365,
- "lon":24.251611
- },
- {
- "lat":60.098038,
- "lon":24.251508
- },
- {
- "lat":60.098829,
- "lon":24.251281
- },
- {
- "lat":60.099359,
- "lon":24.251141
- },
- {
- "lat":60.099817,
- "lon":24.250857
- },
- {
- "lat":60.100284,
- "lon":24.250591
- },
- {
- "lat":60.100787,
- "lon":24.250253
- },
- {
- "lat":60.101318,
- "lon":24.249826
- },
- {
- "lat":60.102172,
- "lon":24.249094
- },
- {
- "lat":60.103026,
- "lon":24.248454
- },
- {
- "lat":60.103502,
- "lon":24.248134
- },
- {
- "lat":60.103646,
- "lon":24.248027
- },
- {
- "lat":60.104777,
- "lon":24.247532
- },
- {
- "lat":60.105667,
- "lon":24.247143
- },
- {
- "lat":60.106152,
- "lon":24.246878
- },
- {
- "lat":60.106305,
- "lon":24.246807
- },
- {
- "lat":60.106799,
- "lon":24.246397
- },
- {
- "lat":60.106988,
- "lon":24.246255
- },
- {
- "lat":60.107446,
- "lon":24.245845
- },
- {
- "lat":60.10777,
- "lon":24.245523
- },
- {
- "lat":60.108076,
- "lon":24.245184
- },
- {
- "lat":60.108283,
- "lon":24.244897
- },
- {
- "lat":60.10894,
- "lon":24.244039
- },
- {
- "lat":60.109452,
- "lon":24.243306
- },
- {
- "lat":60.109605,
- "lon":24.243109
- },
- {
- "lat":60.109947,
- "lon":24.24268
- },
- {
- "lat":60.110325,
- "lon":24.242305
- },
- {
- "lat":60.110676,
- "lon":24.242002
- },
- {
- "lat":60.111233,
- "lon":24.241593
- },
- {
- "lat":60.111601,
- "lon":24.241434
- },
- {
- "lat":60.112104,
- "lon":24.24124
- },
- {
- "lat":60.112337,
- "lon":24.241169
- },
- {
- "lat":60.11267,
- "lon":24.241118
- },
- {
- "lat":60.11337,
- "lon":24.241051
- },
- {
- "lat":60.114698,
- "lon":24.241079
- },
- {
- "lat":60.115694,
- "lon":24.241103
- },
- {
- "lat":60.116592,
- "lon":24.24111
- },
- {
- "lat":60.117256,
- "lon":24.241061
- },
- {
- "lat":60.117382,
- "lon":24.241062
- },
- {
- "lat":60.117552,
- "lon":24.241063
- },
- {
- "lat":60.118082,
- "lon":24.240905
- },
- {
- "lat":60.118387,
- "lon":24.2408
- },
- {
- "lat":60.118765,
- "lon":24.240658
- },
- {
- "lat":60.119376,
- "lon":24.240339
- },
- {
- "lat":60.119888,
- "lon":24.239983
- },
- {
- "lat":60.120472,
- "lon":24.23952
- },
- {
- "lat":60.120876,
- "lon":24.239217
- },
- {
- "lat":60.121092,
- "lon":24.239039
- },
- {
- "lat":60.121254,
- "lon":24.238932
- },
- {
- "lat":60.121991,
- "lon":24.238344
- },
- {
- "lat":60.122701,
- "lon":24.237666
- },
- {
- "lat":60.123277,
- "lon":24.237129
- },
- {
- "lat":60.123447,
- "lon":24.236951
- },
- {
- "lat":60.123942,
- "lon":24.236523
- },
- {
- "lat":60.124688,
- "lon":24.236042
- },
- {
- "lat":60.125478,
- "lon":24.23558
- },
- {
- "lat":60.126341,
- "lon":24.235119
- },
- {
- "lat":60.126727,
- "lon":24.23487
- },
- {
- "lat":60.127114,
- "lon":24.234423
- },
- {
- "lat":60.127716,
- "lon":24.233744
- },
- {
- "lat":60.12831,
- "lon":24.232992
- },
- {
- "lat":60.128544,
- "lon":24.232778
- },
- {
- "lat":60.128859,
- "lon":24.232457
- },
- {
- "lat":60.129038,
- "lon":24.23235
- },
- {
- "lat":60.129335,
- "lon":24.232244
- },
- {
- "lat":60.129685,
- "lon":24.232138
- },
- {
- "lat":60.130205,
- "lon":24.232213
- },
- {
- "lat":60.130492,
- "lon":24.232305
- },
- {
- "lat":60.130636,
- "lon":24.23236
- },
- {
- "lat":60.131057,
- "lon":24.232507
- },
- {
- "lat":60.131398,
- "lon":24.232528
- },
- {
- "lat":60.131587,
- "lon":24.232475
- },
- {
- "lat":60.131812,
- "lon":24.232333
- },
- {
- "lat":60.132,
- "lon":24.232154
- },
- {
- "lat":60.132351,
- "lon":24.231725
- },
- {
- "lat":60.132576,
- "lon":24.231367
- },
- {
- "lat":60.132729,
- "lon":24.231134
- },
- {
- "lat":60.132909,
- "lon":24.230883
- },
- {
- "lat":60.133008,
- "lon":24.230704
- },
- {
- "lat":60.133215,
- "lon":24.230472
- },
- {
- "lat":60.133449,
- "lon":24.230311
- },
- {
- "lat":60.133853,
- "lon":24.229954
- },
- {
- "lat":60.134329,
- "lon":24.229616
- },
- {
- "lat":60.134725,
- "lon":24.229295
- },
- {
- "lat":60.135084,
- "lon":24.229027
- },
- {
- "lat":60.13521,
- "lon":24.228884
- },
- {
- "lat":60.135273,
- "lon":24.228849
- },
- {
- "lat":60.135588,
- "lon":24.228509
- },
- {
- "lat":60.13593,
- "lon":24.228134
- },
- {
- "lat":60.136064,
- "lon":24.228027
- },
- {
- "lat":60.136298,
- "lon":24.22783
- },
- {
- "lat":60.136577,
- "lon":24.227651
- },
- {
- "lat":60.136927,
- "lon":24.227546
- },
- {
- "lat":60.13716,
- "lon":24.227511
- },
- {
- "lat":60.137232,
- "lon":24.22753
- },
- {
- "lat":60.137313,
- "lon":24.227531
- },
- {
- "lat":60.137376,
- "lon":24.227549
- },
- {
- "lat":60.137483,
- "lon":24.227532
- },
- {
- "lat":60.137555,
- "lon":24.227532
- },
- {
- "lat":60.137591,
- "lon":24.227514
- },
- {
- "lat":60.137842,
- "lon":24.22748
- },
- {
- "lat":60.138166,
- "lon":24.227339
- },
- {
- "lat":60.138283,
- "lon":24.227303
- },
- {
- "lat":60.13848,
- "lon":24.227179
- },
- {
- "lat":60.138741,
- "lon":24.227019
- },
- {
- "lat":60.138956,
- "lon":24.226894
- },
- {
- "lat":60.139106,
- "lon":24.22677
- },
- {
- "lat":60.139083,
- "lon":24.226625
- },
- {
- "lat":60.138913,
- "lon":24.225868
- },
- {
- "lat":60.138833,
- "lon":24.225472
- },
- {
- "lat":60.138762,
- "lon":24.225111
- },
- {
- "lat":60.1387,
- "lon":24.224841
- },
- {
- "lat":60.138583,
- "lon":24.22502
- }
- ],
- "stops":[
- {
- "lat":60.119658,
- "lon":24.441538,
- "name":"Kirkkonummi mk",
- "gtfsId":"HSL:6040295",
- "code":"Ki0495",
- "desc":"Matkakeskus",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjA0MDI5NQ==",
- "platformCode":"15"
- },
- {
- "lat":60.124165,
- "lon":24.441558,
- "name":"Kirkkotallintie",
- "gtfsId":"HSL:6050250",
- "code":"Ki0550",
- "desc":"Kirkkonummentie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjA1MDI1MA==",
- "platformCode":null
- },
- {
- "lat":60.129061,
- "lon":24.446102,
- "name":"Gesterbynkaari",
- "gtfsId":"HSL:6040275",
- "code":"Ki0475",
- "desc":"Gesterbyntie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjA0MDI3NQ==",
- "platformCode":null
- },
- {
- "lat":60.129131,
- "lon":24.445824,
- "name":"Gesterbynkaari",
- "gtfsId":"HSL:6040277",
- "code":"Ki0477",
- "desc":"Gesterbyntie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjA0MDI3Nw==",
- "platformCode":null
- },
- {
- "lat":60.125828,
- "lon":24.433405,
- "name":"Rajapolku",
- "gtfsId":"HSL:6040238",
- "code":"Ki0438",
- "desc":"Överbyntie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjA0MDIzOA==",
- "platformCode":null
- },
- {
- "lat":60.125218,
- "lon":24.42728,
- "name":"Kuusala",
- "gtfsId":"HSL:6040237",
- "code":"Ki0437",
- "desc":"Överbyntie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjA0MDIzNw==",
- "platformCode":null
- },
- {
- "lat":60.123458,
- "lon":24.422153,
- "name":"Ravalsinkuja",
- "gtfsId":"HSL:6040234",
- "code":"Ki0434",
- "desc":"Överbyntie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjA0MDIzNA==",
- "platformCode":null
- },
- {
- "lat":60.12335,
- "lon":24.410108,
- "name":"Lindalintie",
- "gtfsId":"HSL:6050219",
- "code":"Ki0519",
- "desc":"Överbyntie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjA1MDIxOQ==",
- "platformCode":null
- },
- {
- "lat":60.123956,
- "lon":24.40427,
- "name":"Karlbergintie",
- "gtfsId":"HSL:6050215",
- "code":"Ki0515",
- "desc":"Överbyntie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjA1MDIxNQ==",
- "platformCode":null
- },
- {
- "lat":60.123608,
- "lon":24.39643,
- "name":"Överby",
- "gtfsId":"HSL:6050214",
- "code":"Ki0514",
- "desc":"Överbyntie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjA1MDIxNA==",
- "platformCode":null
- },
- {
- "lat":60.12206,
- "lon":24.385388,
- "name":"Granbackantie",
- "gtfsId":"HSL:6050212",
- "code":"Ki0512",
- "desc":"Överbyntie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjA1MDIxMg==",
- "platformCode":null
- },
- {
- "lat":60.121138,
- "lon":24.376124,
- "name":"Bergträskinpolku",
- "gtfsId":"HSL:6050210",
- "code":"Ki0510",
- "desc":"Överbyntie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjA1MDIxMA==",
- "platformCode":null
- },
- {
- "lat":60.117976,
- "lon":24.362341,
- "name":"Itäinen kuninkaantie",
- "gtfsId":"HSL:6050217",
- "code":"Ki0517",
- "desc":"Itäinen kuninkaantie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjA1MDIxNw==",
- "platformCode":null
- },
- {
- "lat":60.114423,
- "lon":24.324623,
- "name":"Böle",
- "gtfsId":"HSL:6306001",
- "code":"So3122",
- "desc":"Itäinen Kuninkaantie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwNjAwMQ==",
- "platformCode":null
- },
- {
- "lat":60.11389,
- "lon":24.300788,
- "name":"Kela",
- "gtfsId":"HSL:6306002",
- "code":"So3123",
- "desc":"Itäinen Kuninkaantie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwNjAwMg==",
- "platformCode":null
- },
- {
- "lat":60.106052,
- "lon":24.290729,
- "name":"Tallbacka",
- "gtfsId":"HSL:6306004",
- "code":"So3125",
- "desc":"Itäinen Kuninkaantie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwNjAwNA==",
- "platformCode":null
- },
- {
- "lat":60.09981,
- "lon":24.299634,
- "name":"Pikkalan kartano",
- "gtfsId":"HSL:6307006",
- "code":"So3133",
- "desc":"Pikkalan kartano",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwNzAwNg==",
- "platformCode":null
- },
- {
- "lat":60.099251,
- "lon":24.3006,
- "name":"Pikkala",
- "gtfsId":"HSL:6307005",
- "code":"So3132",
- "desc":"Pikkalan kartano",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwNzAwNQ==",
- "platformCode":null
- },
- {
- "lat":60.080806,
- "lon":24.291003,
- "name":"Sienitie",
- "gtfsId":"HSL:6304004",
- "code":"So3115",
- "desc":"Störsvikintie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwNDAwNA==",
- "platformCode":null
- },
- {
- "lat":60.097218,
- "lon":24.287899,
- "name":"Störsvik th",
- "gtfsId":"HSL:6304005",
- "code":"So3116",
- "desc":"Rannikkotie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwNDAwNQ==",
- "platformCode":null
- },
- {
- "lat":60.096184,
- "lon":24.258319,
- "name":"Kalliotie",
- "gtfsId":"HSL:6304003",
- "code":"So3114",
- "desc":"Rannikkotie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwNDAwMw==",
- "platformCode":null
- },
- {
- "lat":60.096517,
- "lon":24.251887,
- "name":"Ruohosuontie",
- "gtfsId":"HSL:6304009",
- "code":"So3120",
- "desc":"Siuntiontie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwNDAwOQ==",
- "platformCode":null
- },
- {
- "lat":60.103516,
- "lon":24.248267,
- "name":"Sunnanvik tiehaara",
- "gtfsId":"HSL:6304008",
- "code":"So3119",
- "desc":"Siuntiontie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwNDAwOA==",
- "platformCode":null
- },
- {
- "lat":60.112345,
- "lon":24.241337,
- "name":"Sunnanvik",
- "gtfsId":"HSL:6302018",
- "code":"So3100",
- "desc":"Siuntiontie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwMjAxOA==",
- "platformCode":null
- },
- {
- "lat":60.117387,
- "lon":24.241306,
- "name":"Degerbyntie",
- "gtfsId":"HSL:6302005",
- "code":"So3087",
- "desc":"Siuntiontie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwMjAwNQ==",
- "platformCode":null
- },
- {
- "lat":60.121106,
- "lon":24.239152,
- "name":"Nordanvik tiehaara",
- "gtfsId":"HSL:6302008",
- "code":"So3090",
- "desc":"Framängintie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwMjAwOA==",
- "platformCode":null
- },
- {
- "lat":60.130476,
- "lon":24.232493,
- "name":"Billskogintie",
- "gtfsId":"HSL:6302000",
- "code":"So3082",
- "desc":"Siuntiontie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwMjAwMA==",
- "platformCode":null
- },
- {
- "lat":60.135228,
- "lon":24.228995,
- "name":"Sudenkaari",
- "gtfsId":"HSL:6302017",
- "code":"So3099",
- "desc":"Siuntiontie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwMjAxNw==",
- "platformCode":null
- },
- {
- "lat":60.138558,
- "lon":24.22497,
- "name":"Siuntio matkahuolto",
- "gtfsId":"HSL:6302012",
- "code":"So3094",
- "desc":"Flemingintie",
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDpIU0w6NjMwMjAxMg==",
- "platformCode":null
- }
- ],
- "activeDates":[
- {
- "day":[
- "20211231"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9VQV8xXzE0MDU="
- },
- {
- "day":[
- "20211231"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9VQV8xXzE1MzA="
- },
- {
- "day":[
- "20220112",
- "20220202",
- "20220119",
- "20220209",
- "20220126"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9LZV8xXzE0MDU="
- },
- {
- "day":[
- "20220112",
- "20220202",
- "20220119",
- "20220209",
- "20220126"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9LZV8xXzE1MzA="
- },
- {
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9Ub18xXzE0MDU="
- },
- {
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9Ub18xXzE1MzA="
- },
- {
- "day":[
- "20220103"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8xXzE0MDU="
- },
- {
- "day":[
- "20220103"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8xXzE1MzA="
- },
- {
- "day":[
- "20220104"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9UaV8xXzE1MzA="
- },
- {
- "day":[
- "20220104"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9UaV8xXzE0MDU="
- },
- {
- "day":[
- "20220105",
- "20220107"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9QZV8xXzE1MzA="
- },
- {
- "day":[
- "20220131",
- "20220117",
- "20220207",
- "20220124",
- "20220110"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9NYV8xXzE0MDU="
- },
- {
- "day":[
- "20220131",
- "20220117",
- "20220207",
- "20220124",
- "20220110"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9NYV8xXzE1MzA="
- },
- {
- "day":[
- "20220105",
- "20220107"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9QZV8xXzE0MDU="
- },
- {
- "day":[
- "20220113",
- "20220203",
- "20220120",
- "20220210",
- "20220127"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9Ub18xXzE0MDU="
- },
- {
- "day":[
- "20220113",
- "20220203",
- "20220120",
- "20220210",
- "20220127"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9Ub18xXzE1MzA="
- },
- {
- "day":[
- "20220201",
- "20220118",
- "20220208",
- "20220125",
- "20220111"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9UaV8xXzE1MzA="
- },
- {
- "day":[
- "20220201",
- "20220118",
- "20220208",
- "20220125",
- "20220111"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9UaV8xXzE0MDU="
- },
- {
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9LZV8xXzE1MzA="
- },
- {
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9LZV8xXzE0MDU="
- },
- {
- "day":[
- "20220128",
- "20220114",
- "20220204",
- "20220121",
- "20220211"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9QZV8xXzE1MzA="
- },
- {
- "day":[
- "20220128",
- "20220114",
- "20220204",
- "20220121",
- "20220211"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9QZV8xXzE0MDU="
- }
- ],
- "route":{
- "mode":"BUS",
- "color":null,
- "id":"Um91dGU6SFNMOjYxODE="
- },
- "id":"UGF0dGVybjpIU0w6NjE4MTowOjAx"
- }
- }
- },
- "id":"routeRoutes_RoutePageMap_Query"
- },
- {
- "payload":{
- "data":{
- "pattern":{
- "code":"HSL:6181:0:01",
- "directionId":0,
- "route":{
- "mode":"BUS",
- "color":null,
- "shortName":"181",
- "id":"Um91dGU6SFNMOjYxODE="
- },
- "stops":[
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":true,
- "realtimeState":"UPDATED",
- "realtimeArrival":50700,
- "realtimeDeparture":50700,
- "serviceDay":1640646000,
- "scheduledDeparture":50700,
- "pickupType":"UPDATED",
- "stop":{
- "platformCode":"15",
- "id":"U3RvcDpIU0w6NjA0MDI5NQ=="
- }
- },
- {
- "realtime":true,
- "realtimeState":"UPDATED",
- "realtimeArrival":55800,
- "realtimeDeparture":55800,
- "serviceDay":1640646000,
- "scheduledDeparture":55800,
- "pickupType":"UPDATED",
- "stop":{
- "platformCode":"15",
- "id":"U3RvcDpIU0w6NjA0MDI5NQ=="
- }
- }
- ],
- "gtfsId":"HSL:6040295",
- "lat":60.119658,
- "lon":24.441538,
- "name":"Kirkkonummi mk",
- "desc":"Matkakeskus",
- "code":"Ki0495",
- "platformCode":"15",
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjA0MDI5NQ=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50760,
- "realtimeDeparture":50760,
- "serviceDay":1640646000,
- "scheduledDeparture":50760,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA1MDI1MA=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":55860,
- "realtimeDeparture":55860,
- "serviceDay":1640646000,
- "scheduledDeparture":55860,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA1MDI1MA=="
- }
- }
- ],
- "gtfsId":"HSL:6050250",
- "lat":60.124165,
- "lon":24.441558,
- "name":"Kirkkotallintie",
- "desc":"Kirkkonummentie",
- "code":"Ki0550",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjA1MDI1MA=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50820,
- "realtimeDeparture":50820,
- "serviceDay":1640646000,
- "scheduledDeparture":50820,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA0MDI3NQ=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":55920,
- "realtimeDeparture":55920,
- "serviceDay":1640646000,
- "scheduledDeparture":55920,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA0MDI3NQ=="
- }
- }
- ],
- "gtfsId":"HSL:6040275",
- "lat":60.129061,
- "lon":24.446102,
- "name":"Gesterbynkaari",
- "desc":"Gesterbyntie",
- "code":"Ki0475",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjA0MDI3NQ=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50820,
- "realtimeDeparture":50820,
- "serviceDay":1640646000,
- "scheduledDeparture":50820,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA0MDI3Nw=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":55920,
- "realtimeDeparture":55920,
- "serviceDay":1640646000,
- "scheduledDeparture":55920,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA0MDI3Nw=="
- }
- }
- ],
- "gtfsId":"HSL:6040277",
- "lat":60.129131,
- "lon":24.445824,
- "name":"Gesterbynkaari",
- "desc":"Gesterbyntie",
- "code":"Ki0477",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjA0MDI3Nw=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50880,
- "realtimeDeparture":50880,
- "serviceDay":1640646000,
- "scheduledDeparture":50880,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA0MDIzOA=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":55980,
- "realtimeDeparture":55980,
- "serviceDay":1640646000,
- "scheduledDeparture":55980,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA0MDIzOA=="
- }
- }
- ],
- "gtfsId":"HSL:6040238",
- "lat":60.125828,
- "lon":24.433405,
- "name":"Rajapolku",
- "desc":"Överbyntie",
- "code":"Ki0438",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjA0MDIzOA=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50940,
- "realtimeDeparture":50940,
- "serviceDay":1640646000,
- "scheduledDeparture":50940,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA0MDIzNw=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":56040,
- "realtimeDeparture":56040,
- "serviceDay":1640646000,
- "scheduledDeparture":56040,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA0MDIzNw=="
- }
- }
- ],
- "gtfsId":"HSL:6040237",
- "lat":60.125218,
- "lon":24.42728,
- "name":"Kuusala",
- "desc":"Överbyntie",
- "code":"Ki0437",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjA0MDIzNw=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50940,
- "realtimeDeparture":50940,
- "serviceDay":1640646000,
- "scheduledDeparture":50940,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA0MDIzNA=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":56040,
- "realtimeDeparture":56040,
- "serviceDay":1640646000,
- "scheduledDeparture":56040,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA0MDIzNA=="
- }
- }
- ],
- "gtfsId":"HSL:6040234",
- "lat":60.123458,
- "lon":24.422153,
- "name":"Ravalsinkuja",
- "desc":"Överbyntie",
- "code":"Ki0434",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjA0MDIzNA=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51000,
- "realtimeDeparture":51000,
- "serviceDay":1640646000,
- "scheduledDeparture":51000,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA1MDIxOQ=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":56100,
- "realtimeDeparture":56100,
- "serviceDay":1640646000,
- "scheduledDeparture":56100,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA1MDIxOQ=="
- }
- }
- ],
- "gtfsId":"HSL:6050219",
- "lat":60.12335,
- "lon":24.410108,
- "name":"Lindalintie",
- "desc":"Överbyntie",
- "code":"Ki0519",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjA1MDIxOQ=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51060,
- "realtimeDeparture":51060,
- "serviceDay":1640646000,
- "scheduledDeparture":51060,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA1MDIxNQ=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":56160,
- "realtimeDeparture":56160,
- "serviceDay":1640646000,
- "scheduledDeparture":56160,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA1MDIxNQ=="
- }
- }
- ],
- "gtfsId":"HSL:6050215",
- "lat":60.123956,
- "lon":24.40427,
- "name":"Karlbergintie",
- "desc":"Överbyntie",
- "code":"Ki0515",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjA1MDIxNQ=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51060,
- "realtimeDeparture":51060,
- "serviceDay":1640646000,
- "scheduledDeparture":51060,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA1MDIxNA=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":56160,
- "realtimeDeparture":56160,
- "serviceDay":1640646000,
- "scheduledDeparture":56160,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA1MDIxNA=="
- }
- }
- ],
- "gtfsId":"HSL:6050214",
- "lat":60.123608,
- "lon":24.39643,
- "name":"Överby",
- "desc":"Överbyntie",
- "code":"Ki0514",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjA1MDIxNA=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51120,
- "realtimeDeparture":51120,
- "serviceDay":1640646000,
- "scheduledDeparture":51120,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA1MDIxMg=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":56220,
- "realtimeDeparture":56220,
- "serviceDay":1640646000,
- "scheduledDeparture":56220,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA1MDIxMg=="
- }
- }
- ],
- "gtfsId":"HSL:6050212",
- "lat":60.12206,
- "lon":24.385388,
- "name":"Granbackantie",
- "desc":"Överbyntie",
- "code":"Ki0512",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjA1MDIxMg=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51180,
- "realtimeDeparture":51180,
- "serviceDay":1640646000,
- "scheduledDeparture":51180,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA1MDIxMA=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":56280,
- "realtimeDeparture":56280,
- "serviceDay":1640646000,
- "scheduledDeparture":56280,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA1MDIxMA=="
- }
- }
- ],
- "gtfsId":"HSL:6050210",
- "lat":60.121138,
- "lon":24.376124,
- "name":"Bergträskinpolku",
- "desc":"Överbyntie",
- "code":"Ki0510",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjA1MDIxMA=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51360,
- "realtimeDeparture":51360,
- "serviceDay":1640646000,
- "scheduledDeparture":51360,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA1MDIxNw=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":56460,
- "realtimeDeparture":56460,
- "serviceDay":1640646000,
- "scheduledDeparture":56460,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjA1MDIxNw=="
- }
- }
- ],
- "gtfsId":"HSL:6050217",
- "lat":60.117976,
- "lon":24.362341,
- "name":"Itäinen kuninkaantie",
- "desc":"Itäinen kuninkaantie",
- "code":"Ki0517",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjA1MDIxNw=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51480,
- "realtimeDeparture":51480,
- "serviceDay":1640646000,
- "scheduledDeparture":51480,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNjAwMQ=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":56580,
- "realtimeDeparture":56580,
- "serviceDay":1640646000,
- "scheduledDeparture":56580,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNjAwMQ=="
- }
- }
- ],
- "gtfsId":"HSL:6306001",
- "lat":60.114423,
- "lon":24.324623,
- "name":"Böle",
- "desc":"Itäinen Kuninkaantie",
- "code":"So3122",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwNjAwMQ=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51540,
- "realtimeDeparture":51540,
- "serviceDay":1640646000,
- "scheduledDeparture":51540,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNjAwMg=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":56640,
- "realtimeDeparture":56640,
- "serviceDay":1640646000,
- "scheduledDeparture":56640,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNjAwMg=="
- }
- }
- ],
- "gtfsId":"HSL:6306002",
- "lat":60.11389,
- "lon":24.300788,
- "name":"Kela",
- "desc":"Itäinen Kuninkaantie",
- "code":"So3123",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwNjAwMg=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51660,
- "realtimeDeparture":51660,
- "serviceDay":1640646000,
- "scheduledDeparture":51660,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNjAwNA=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":56760,
- "realtimeDeparture":56760,
- "serviceDay":1640646000,
- "scheduledDeparture":56760,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNjAwNA=="
- }
- }
- ],
- "gtfsId":"HSL:6306004",
- "lat":60.106052,
- "lon":24.290729,
- "name":"Tallbacka",
- "desc":"Itäinen Kuninkaantie",
- "code":"So3125",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwNjAwNA=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51780,
- "realtimeDeparture":51780,
- "serviceDay":1640646000,
- "scheduledDeparture":51780,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNzAwNg=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":56880,
- "realtimeDeparture":56880,
- "serviceDay":1640646000,
- "scheduledDeparture":56880,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNzAwNg=="
- }
- }
- ],
- "gtfsId":"HSL:6307006",
- "lat":60.09981,
- "lon":24.299634,
- "name":"Pikkalan kartano",
- "desc":"Pikkalan kartano",
- "code":"So3133",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwNzAwNg=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51840,
- "realtimeDeparture":51840,
- "serviceDay":1640646000,
- "scheduledDeparture":51840,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNzAwNQ=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":56940,
- "realtimeDeparture":56940,
- "serviceDay":1640646000,
- "scheduledDeparture":56940,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNzAwNQ=="
- }
- }
- ],
- "gtfsId":"HSL:6307005",
- "lat":60.099251,
- "lon":24.3006,
- "name":"Pikkala",
- "desc":"Pikkalan kartano",
- "code":"So3132",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwNzAwNQ=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52200,
- "realtimeDeparture":52200,
- "serviceDay":1640646000,
- "scheduledDeparture":52200,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNDAwNA=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":57300,
- "realtimeDeparture":57300,
- "serviceDay":1640646000,
- "scheduledDeparture":57300,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNDAwNA=="
- }
- }
- ],
- "gtfsId":"HSL:6304004",
- "lat":60.080806,
- "lon":24.291003,
- "name":"Sienitie",
- "desc":"Störsvikintie",
- "code":"So3115",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwNDAwNA=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52440,
- "realtimeDeparture":52440,
- "serviceDay":1640646000,
- "scheduledDeparture":52440,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNDAwNQ=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":57540,
- "realtimeDeparture":57540,
- "serviceDay":1640646000,
- "scheduledDeparture":57540,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNDAwNQ=="
- }
- }
- ],
- "gtfsId":"HSL:6304005",
- "lat":60.097218,
- "lon":24.287899,
- "name":"Störsvik th",
- "desc":"Rannikkotie",
- "code":"So3116",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwNDAwNQ=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52560,
- "realtimeDeparture":52560,
- "serviceDay":1640646000,
- "scheduledDeparture":52560,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNDAwMw=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":57660,
- "realtimeDeparture":57660,
- "serviceDay":1640646000,
- "scheduledDeparture":57660,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNDAwMw=="
- }
- }
- ],
- "gtfsId":"HSL:6304003",
- "lat":60.096184,
- "lon":24.258319,
- "name":"Kalliotie",
- "desc":"Rannikkotie",
- "code":"So3114",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwNDAwMw=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52620,
- "realtimeDeparture":52620,
- "serviceDay":1640646000,
- "scheduledDeparture":52620,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNDAwOQ=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":57720,
- "realtimeDeparture":57720,
- "serviceDay":1640646000,
- "scheduledDeparture":57720,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNDAwOQ=="
- }
- }
- ],
- "gtfsId":"HSL:6304009",
- "lat":60.096517,
- "lon":24.251887,
- "name":"Ruohosuontie",
- "desc":"Siuntiontie",
- "code":"So3120",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwNDAwOQ=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52680,
- "realtimeDeparture":52680,
- "serviceDay":1640646000,
- "scheduledDeparture":52680,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNDAwOA=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":57780,
- "realtimeDeparture":57780,
- "serviceDay":1640646000,
- "scheduledDeparture":57780,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwNDAwOA=="
- }
- }
- ],
- "gtfsId":"HSL:6304008",
- "lat":60.103516,
- "lon":24.248267,
- "name":"Sunnanvik tiehaara",
- "desc":"Siuntiontie",
- "code":"So3119",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwNDAwOA=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52800,
- "realtimeDeparture":52800,
- "serviceDay":1640646000,
- "scheduledDeparture":52800,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwMjAxOA=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":57900,
- "realtimeDeparture":57900,
- "serviceDay":1640646000,
- "scheduledDeparture":57900,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwMjAxOA=="
- }
- }
- ],
- "gtfsId":"HSL:6302018",
- "lat":60.112345,
- "lon":24.241337,
- "name":"Sunnanvik",
- "desc":"Siuntiontie",
- "code":"So3100",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwMjAxOA=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52860,
- "realtimeDeparture":52860,
- "serviceDay":1640646000,
- "scheduledDeparture":52860,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwMjAwNQ=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":57960,
- "realtimeDeparture":57960,
- "serviceDay":1640646000,
- "scheduledDeparture":57960,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwMjAwNQ=="
- }
- }
- ],
- "gtfsId":"HSL:6302005",
- "lat":60.117387,
- "lon":24.241306,
- "name":"Degerbyntie",
- "desc":"Siuntiontie",
- "code":"So3087",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwMjAwNQ=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52860,
- "realtimeDeparture":52860,
- "serviceDay":1640646000,
- "scheduledDeparture":52860,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwMjAwOA=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":57960,
- "realtimeDeparture":57960,
- "serviceDay":1640646000,
- "scheduledDeparture":57960,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwMjAwOA=="
- }
- }
- ],
- "gtfsId":"HSL:6302008",
- "lat":60.121106,
- "lon":24.239152,
- "name":"Nordanvik tiehaara",
- "desc":"Framängintie",
- "code":"So3090",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwMjAwOA=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52980,
- "realtimeDeparture":52980,
- "serviceDay":1640646000,
- "scheduledDeparture":52980,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwMjAwMA=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":58080,
- "realtimeDeparture":58080,
- "serviceDay":1640646000,
- "scheduledDeparture":58080,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwMjAwMA=="
- }
- }
- ],
- "gtfsId":"HSL:6302000",
- "lat":60.130476,
- "lon":24.232493,
- "name":"Billskogintie",
- "desc":"Siuntiontie",
- "code":"So3082",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwMjAwMA=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53040,
- "realtimeDeparture":53040,
- "serviceDay":1640646000,
- "scheduledDeparture":53040,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwMjAxNw=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":58140,
- "realtimeDeparture":58140,
- "serviceDay":1640646000,
- "scheduledDeparture":58140,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwMjAxNw=="
- }
- }
- ],
- "gtfsId":"HSL:6302017",
- "lat":60.135228,
- "lon":24.228995,
- "name":"Sudenkaari",
- "desc":"Siuntiontie",
- "code":"So3099",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwMjAxNw=="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53100,
- "realtimeDeparture":53100,
- "serviceDay":1640646000,
- "scheduledDeparture":53100,
- "pickupType":"NONE",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwMjAxMg=="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":58200,
- "realtimeDeparture":58200,
- "serviceDay":1640646000,
- "scheduledDeparture":58200,
- "pickupType":"NONE",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDpIU0w6NjMwMjAxMg=="
- }
- }
- ],
- "gtfsId":"HSL:6302012",
- "lat":60.138558,
- "lon":24.22497,
- "name":"Siuntio matkahuolto",
- "desc":"Flemingintie",
- "code":"So3094",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDpIU0w6NjMwMjAxMg=="
- }
- ],
- "id":"UGF0dGVybjpIU0w6NjE4MTowOjAx"
- },
- "route":{
- "gtfsId":"HSL:6181",
- "color":null,
- "shortName":"181",
- "longName":"Kirkkonummi-Siuntio",
- "mode":"BUS",
- "type":701,
- "agency":{
- "name":"Helsingin seudun liikenne",
- "url":"http://www.hsl.fi/",
- "fareUrl":"http://www.hsl.fi/liput",
- "id":"QWdlbmN5OkhTTDpIU0w=",
- "phone":"(09) 4766 4444"
- },
- "patterns":[
- {
- "code":"HSL:6181:1:01",
- "directionId":1,
- "headsign":"Kirkkonummi",
- "stops":[
- {
- "name":"Siuntio matkahuolto",
- "id":"U3RvcDpIU0w6NjMwMjAxMg==",
- "gtfsId":"HSL:6302012",
- "code":"So3094",
- "alerts":[
-
- ]
- },
- {
- "name":"Sudenkaari",
- "id":"U3RvcDpIU0w6NjMwMjAxNg==",
- "gtfsId":"HSL:6302016",
- "code":"So3098",
- "alerts":[
-
- ]
- },
- {
- "name":"Billskogintie",
- "id":"U3RvcDpIU0w6NjMwMjAwMQ==",
- "gtfsId":"HSL:6302001",
- "code":"So3083",
- "alerts":[
-
- ]
- },
- {
- "name":"Nordanvik tiehaara",
- "id":"U3RvcDpIU0w6NjMwMjAwOQ==",
- "gtfsId":"HSL:6302009",
- "code":"So3091",
- "alerts":[
-
- ]
- },
- {
- "name":"Degerbyntie",
- "id":"U3RvcDpIU0w6NjMwMjAwNA==",
- "gtfsId":"HSL:6302004",
- "code":"So3086",
- "alerts":[
-
- ]
- },
- {
- "name":"Sunnanvik",
- "id":"U3RvcDpIU0w6NjMwMjAxOQ==",
- "gtfsId":"HSL:6302019",
- "code":"So3101",
- "alerts":[
-
- ]
- },
- {
- "name":"Sunnanvik tiehaara",
- "id":"U3RvcDpIU0w6NjMwNDAwNw==",
- "gtfsId":"HSL:6304007",
- "code":"So3118",
- "alerts":[
-
- ]
- },
- {
- "name":"Kalliotie",
- "id":"U3RvcDpIU0w6NjMwNDAwMg==",
- "gtfsId":"HSL:6304002",
- "code":"So3113",
- "alerts":[
-
- ]
- },
- {
- "name":"Sienitie",
- "id":"U3RvcDpIU0w6NjMwNDAwNA==",
- "gtfsId":"HSL:6304004",
- "code":"So3115",
- "alerts":[
-
- ]
- },
- {
- "name":"Störsvik th",
- "id":"U3RvcDpIU0w6NjMwNDAwNg==",
- "gtfsId":"HSL:6304006",
- "code":"So3117",
- "alerts":[
-
- ]
- },
- {
- "name":"Tallbacka",
- "id":"U3RvcDpIU0w6NjMwNjAwNQ==",
- "gtfsId":"HSL:6306005",
- "code":"So3126",
- "alerts":[
-
- ]
- },
- {
- "name":"Kela",
- "id":"U3RvcDpIU0w6NjMwNjAwMw==",
- "gtfsId":"HSL:6306003",
- "code":"So3124",
- "alerts":[
-
- ]
- },
- {
- "name":"Böle",
- "id":"U3RvcDpIU0w6NjMwNjAwMA==",
- "gtfsId":"HSL:6306000",
- "code":"So3121",
- "alerts":[
-
- ]
- },
- {
- "name":"Bergträskinpolku",
- "id":"U3RvcDpIU0w6NjA1MDIwOQ==",
- "gtfsId":"HSL:6050209",
- "code":"Ki0509",
- "alerts":[
-
- ]
- },
- {
- "name":"Granbackantie",
- "id":"U3RvcDpIU0w6NjA1MDIxMQ==",
- "gtfsId":"HSL:6050211",
- "code":"Ki0511",
- "alerts":[
-
- ]
- },
- {
- "name":"Överby",
- "id":"U3RvcDpIU0w6NjA1MDIxMw==",
- "gtfsId":"HSL:6050213",
- "code":"Ki0513",
- "alerts":[
-
- ]
- },
- {
- "name":"Karlbergintie",
- "id":"U3RvcDpIU0w6NjA0MDIzNQ==",
- "gtfsId":"HSL:6040235",
- "code":"Ki0435",
- "alerts":[
-
- ]
- },
- {
- "name":"Lindalintie",
- "id":"U3RvcDpIU0w6NjA0MDIzMQ==",
- "gtfsId":"HSL:6040231",
- "code":"Ki0431",
- "alerts":[
-
- ]
- },
- {
- "name":"Ravalsinkuja",
- "id":"U3RvcDpIU0w6NjA0MDIzMw==",
- "gtfsId":"HSL:6040233",
- "code":"Ki0433",
- "alerts":[
-
- ]
- },
- {
- "name":"Kuusala",
- "id":"U3RvcDpIU0w6NjA0MDIzNg==",
- "gtfsId":"HSL:6040236",
- "code":"Ki0436",
- "alerts":[
-
- ]
- },
- {
- "name":"Rajapolku",
- "id":"U3RvcDpIU0w6NjA0MDIzOQ==",
- "gtfsId":"HSL:6040239",
- "code":"Ki0439",
- "alerts":[
-
- ]
- },
- {
- "name":"Gesterbynkaari",
- "id":"U3RvcDpIU0w6NjA0MDI3NQ==",
- "gtfsId":"HSL:6040275",
- "code":"Ki0475",
- "alerts":[
-
- ]
- },
- {
- "name":"Gesterbynkaari",
- "id":"U3RvcDpIU0w6NjA0MDI3Nw==",
- "gtfsId":"HSL:6040277",
- "code":"Ki0477",
- "alerts":[
-
- ]
- },
- {
- "name":"Kirkkotallintie",
- "id":"U3RvcDpIU0w6NjA1MDI1MQ==",
- "gtfsId":"HSL:6050251",
- "code":"Ki0551",
- "alerts":[
-
- ]
- },
- {
- "name":"Kirkkonummi mk",
- "id":"U3RvcDpIU0w6NjA0MDI5MQ==",
- "gtfsId":"HSL:6040291",
- "code":"Ki0491",
- "alerts":[
-
- ]
- }
- ],
- "activeDates":[
- {
- "serviceId":"HSL:6181_20211231_20220109_Ti",
- "day":[
- "20220104"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9UaV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ti",
- "day":[
- "20220104"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9UaV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_To",
- "day":[
- "20220113",
- "20220203",
- "20220120",
- "20220210",
- "20220127"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9Ub18yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_To",
- "day":[
- "20220113",
- "20220203",
- "20220120",
- "20220210",
- "20220127"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9Ub18yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Pe",
- "day":[
- "20220105",
- "20220107"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9QZV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Pe",
- "day":[
- "20220105",
- "20220107"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9QZV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ti",
- "day":[
- "20220201",
- "20220118",
- "20220208",
- "20220125",
- "20220111"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9UaV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ti",
- "day":[
- "20220201",
- "20220118",
- "20220208",
- "20220125",
- "20220111"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9UaV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ma",
- "day":[
- "20220131",
- "20220117",
- "20220207",
- "20220124",
- "20220110"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9NYV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ma",
- "day":[
- "20220131",
- "20220117",
- "20220207",
- "20220124",
- "20220110"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9NYV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ke",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9LZV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ke",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9LZV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Pe",
- "day":[
- "20220128",
- "20220114",
- "20220204",
- "20220121",
- "20220211"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9QZV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Pe",
- "day":[
- "20220128",
- "20220114",
- "20220204",
- "20220121",
- "20220211"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9QZV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_UA",
- "day":[
- "20211231"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9VQV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_UA",
- "day":[
- "20211231"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9VQV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ke",
- "day":[
- "20220112",
- "20220202",
- "20220119",
- "20220209",
- "20220126"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9LZV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ke",
- "day":[
- "20220112",
- "20220202",
- "20220119",
- "20220209",
- "20220126"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9LZV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ma",
- "day":[
- "20220103"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ma",
- "day":[
- "20220103"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8yXzA4MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_To",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9Ub18yXzA3MTA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_To",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9Ub18yXzA4MDU="
- }
- ],
- "tripsForDate":[
- {
- "stoptimes":[
- {
- "scheduledDeparture":25800,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":25860,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":25860,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":25920,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":25980,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26040,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26100,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26160,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26400,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26580,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26700,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26820,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":26940,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27240,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27300,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27480,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27480,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27600,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27720,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27720,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27840,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27960,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":27960,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":28080,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":28200,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8yXzA3MTA="
- },
- {
- "stoptimes":[
- {
- "scheduledDeparture":29100,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29160,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29160,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29220,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29280,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29340,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29400,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29460,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29700,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":29880,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30000,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30120,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30240,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30540,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30600,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30780,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30780,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":30900,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":31020,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":31020,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":31140,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":31260,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":31260,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":31380,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":31500,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8yXzA4MDU="
- }
- ],
- "id":"UGF0dGVybjpIU0w6NjE4MToxOjAx",
- "trips":[
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":25800,
- "scheduledDeparture":25800,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":25860,
- "scheduledDeparture":25860,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":25860,
- "scheduledDeparture":25860,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":25920,
- "scheduledDeparture":25920,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":25980,
- "scheduledDeparture":25980,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26040,
- "scheduledDeparture":26040,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26100,
- "scheduledDeparture":26100,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26160,
- "scheduledDeparture":26160,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26400,
- "scheduledDeparture":26400,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26580,
- "scheduledDeparture":26580,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26700,
- "scheduledDeparture":26700,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26820,
- "scheduledDeparture":26820,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":26940,
- "scheduledDeparture":26940,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27240,
- "scheduledDeparture":27240,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27300,
- "scheduledDeparture":27300,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27480,
- "scheduledDeparture":27480,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27480,
- "scheduledDeparture":27480,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27600,
- "scheduledDeparture":27600,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27720,
- "scheduledDeparture":27720,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27720,
- "scheduledDeparture":27720,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27840,
- "scheduledDeparture":27840,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27960,
- "scheduledDeparture":27960,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":27960,
- "scheduledDeparture":27960,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":28080,
- "scheduledDeparture":28080,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":28200,
- "scheduledDeparture":28200,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8yXzA3MTA="
- },
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29100,
- "scheduledDeparture":29100,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29160,
- "scheduledDeparture":29160,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29160,
- "scheduledDeparture":29160,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29220,
- "scheduledDeparture":29220,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29280,
- "scheduledDeparture":29280,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29340,
- "scheduledDeparture":29340,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29400,
- "scheduledDeparture":29400,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29460,
- "scheduledDeparture":29460,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29700,
- "scheduledDeparture":29700,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":29880,
- "scheduledDeparture":29880,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30000,
- "scheduledDeparture":30000,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30120,
- "scheduledDeparture":30120,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30240,
- "scheduledDeparture":30240,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30540,
- "scheduledDeparture":30540,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30600,
- "scheduledDeparture":30600,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30780,
- "scheduledDeparture":30780,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30780,
- "scheduledDeparture":30780,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":30900,
- "scheduledDeparture":30900,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31020,
- "scheduledDeparture":31020,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31020,
- "scheduledDeparture":31020,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31140,
- "scheduledDeparture":31140,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31260,
- "scheduledDeparture":31260,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31260,
- "scheduledDeparture":31260,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31380,
- "scheduledDeparture":31380,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31500,
- "scheduledDeparture":31500,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8yXzA4MDU="
- }
- ]
- },
- {
- "code":"HSL:6181:0:01",
- "directionId":0,
- "headsign":"Siuntio",
- "stops":[
- {
- "name":"Kirkkonummi mk",
- "id":"U3RvcDpIU0w6NjA0MDI5NQ==",
- "gtfsId":"HSL:6040295",
- "code":"Ki0495",
- "alerts":[
-
- ]
- },
- {
- "name":"Kirkkotallintie",
- "id":"U3RvcDpIU0w6NjA1MDI1MA==",
- "gtfsId":"HSL:6050250",
- "code":"Ki0550",
- "alerts":[
-
- ]
- },
- {
- "name":"Gesterbynkaari",
- "id":"U3RvcDpIU0w6NjA0MDI3NQ==",
- "gtfsId":"HSL:6040275",
- "code":"Ki0475",
- "alerts":[
-
- ]
- },
- {
- "name":"Gesterbynkaari",
- "id":"U3RvcDpIU0w6NjA0MDI3Nw==",
- "gtfsId":"HSL:6040277",
- "code":"Ki0477",
- "alerts":[
-
- ]
- },
- {
- "name":"Rajapolku",
- "id":"U3RvcDpIU0w6NjA0MDIzOA==",
- "gtfsId":"HSL:6040238",
- "code":"Ki0438",
- "alerts":[
-
- ]
- },
- {
- "name":"Kuusala",
- "id":"U3RvcDpIU0w6NjA0MDIzNw==",
- "gtfsId":"HSL:6040237",
- "code":"Ki0437",
- "alerts":[
-
- ]
- },
- {
- "name":"Ravalsinkuja",
- "id":"U3RvcDpIU0w6NjA0MDIzNA==",
- "gtfsId":"HSL:6040234",
- "code":"Ki0434",
- "alerts":[
-
- ]
- },
- {
- "name":"Lindalintie",
- "id":"U3RvcDpIU0w6NjA1MDIxOQ==",
- "gtfsId":"HSL:6050219",
- "code":"Ki0519",
- "alerts":[
-
- ]
- },
- {
- "name":"Karlbergintie",
- "id":"U3RvcDpIU0w6NjA1MDIxNQ==",
- "gtfsId":"HSL:6050215",
- "code":"Ki0515",
- "alerts":[
-
- ]
- },
- {
- "name":"Överby",
- "id":"U3RvcDpIU0w6NjA1MDIxNA==",
- "gtfsId":"HSL:6050214",
- "code":"Ki0514",
- "alerts":[
-
- ]
- },
- {
- "name":"Granbackantie",
- "id":"U3RvcDpIU0w6NjA1MDIxMg==",
- "gtfsId":"HSL:6050212",
- "code":"Ki0512",
- "alerts":[
-
- ]
- },
- {
- "name":"Bergträskinpolku",
- "id":"U3RvcDpIU0w6NjA1MDIxMA==",
- "gtfsId":"HSL:6050210",
- "code":"Ki0510",
- "alerts":[
-
- ]
- },
- {
- "name":"Itäinen kuninkaantie",
- "id":"U3RvcDpIU0w6NjA1MDIxNw==",
- "gtfsId":"HSL:6050217",
- "code":"Ki0517",
- "alerts":[
-
- ]
- },
- {
- "name":"Böle",
- "id":"U3RvcDpIU0w6NjMwNjAwMQ==",
- "gtfsId":"HSL:6306001",
- "code":"So3122",
- "alerts":[
-
- ]
- },
- {
- "name":"Kela",
- "id":"U3RvcDpIU0w6NjMwNjAwMg==",
- "gtfsId":"HSL:6306002",
- "code":"So3123",
- "alerts":[
-
- ]
- },
- {
- "name":"Tallbacka",
- "id":"U3RvcDpIU0w6NjMwNjAwNA==",
- "gtfsId":"HSL:6306004",
- "code":"So3125",
- "alerts":[
-
- ]
- },
- {
- "name":"Pikkalan kartano",
- "id":"U3RvcDpIU0w6NjMwNzAwNg==",
- "gtfsId":"HSL:6307006",
- "code":"So3133",
- "alerts":[
-
- ]
- },
- {
- "name":"Pikkala",
- "id":"U3RvcDpIU0w6NjMwNzAwNQ==",
- "gtfsId":"HSL:6307005",
- "code":"So3132",
- "alerts":[
-
- ]
- },
- {
- "name":"Sienitie",
- "id":"U3RvcDpIU0w6NjMwNDAwNA==",
- "gtfsId":"HSL:6304004",
- "code":"So3115",
- "alerts":[
-
- ]
- },
- {
- "name":"Störsvik th",
- "id":"U3RvcDpIU0w6NjMwNDAwNQ==",
- "gtfsId":"HSL:6304005",
- "code":"So3116",
- "alerts":[
-
- ]
- },
- {
- "name":"Kalliotie",
- "id":"U3RvcDpIU0w6NjMwNDAwMw==",
- "gtfsId":"HSL:6304003",
- "code":"So3114",
- "alerts":[
-
- ]
- },
- {
- "name":"Ruohosuontie",
- "id":"U3RvcDpIU0w6NjMwNDAwOQ==",
- "gtfsId":"HSL:6304009",
- "code":"So3120",
- "alerts":[
-
- ]
- },
- {
- "name":"Sunnanvik tiehaara",
- "id":"U3RvcDpIU0w6NjMwNDAwOA==",
- "gtfsId":"HSL:6304008",
- "code":"So3119",
- "alerts":[
-
- ]
- },
- {
- "name":"Sunnanvik",
- "id":"U3RvcDpIU0w6NjMwMjAxOA==",
- "gtfsId":"HSL:6302018",
- "code":"So3100",
- "alerts":[
-
- ]
- },
- {
- "name":"Degerbyntie",
- "id":"U3RvcDpIU0w6NjMwMjAwNQ==",
- "gtfsId":"HSL:6302005",
- "code":"So3087",
- "alerts":[
-
- ]
- },
- {
- "name":"Nordanvik tiehaara",
- "id":"U3RvcDpIU0w6NjMwMjAwOA==",
- "gtfsId":"HSL:6302008",
- "code":"So3090",
- "alerts":[
-
- ]
- },
- {
- "name":"Billskogintie",
- "id":"U3RvcDpIU0w6NjMwMjAwMA==",
- "gtfsId":"HSL:6302000",
- "code":"So3082",
- "alerts":[
-
- ]
- },
- {
- "name":"Sudenkaari",
- "id":"U3RvcDpIU0w6NjMwMjAxNw==",
- "gtfsId":"HSL:6302017",
- "code":"So3099",
- "alerts":[
-
- ]
- },
- {
- "name":"Siuntio matkahuolto",
- "id":"U3RvcDpIU0w6NjMwMjAxMg==",
- "gtfsId":"HSL:6302012",
- "code":"So3094",
- "alerts":[
-
- ]
- }
- ],
- "activeDates":[
- {
- "serviceId":"HSL:6181_20211231_20220109_UA",
- "day":[
- "20211231"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9VQV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_UA",
- "day":[
- "20211231"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9VQV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ke",
- "day":[
- "20220112",
- "20220202",
- "20220119",
- "20220209",
- "20220126"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9LZV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ke",
- "day":[
- "20220112",
- "20220202",
- "20220119",
- "20220209",
- "20220126"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9LZV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_To",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9Ub18xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_To",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9Ub18xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ma",
- "day":[
- "20220103"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ma",
- "day":[
- "20220103"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ti",
- "day":[
- "20220104"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9UaV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ti",
- "day":[
- "20220104"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9UaV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Pe",
- "day":[
- "20220105",
- "20220107"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9QZV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ma",
- "day":[
- "20220131",
- "20220117",
- "20220207",
- "20220124",
- "20220110"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9NYV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ma",
- "day":[
- "20220131",
- "20220117",
- "20220207",
- "20220124",
- "20220110"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9NYV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Pe",
- "day":[
- "20220105",
- "20220107"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9QZV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_To",
- "day":[
- "20220113",
- "20220203",
- "20220120",
- "20220210",
- "20220127"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9Ub18xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_To",
- "day":[
- "20220113",
- "20220203",
- "20220120",
- "20220210",
- "20220127"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9Ub18xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ti",
- "day":[
- "20220201",
- "20220118",
- "20220208",
- "20220125",
- "20220111"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9UaV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Ti",
- "day":[
- "20220201",
- "20220118",
- "20220208",
- "20220125",
- "20220111"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9UaV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ke",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9LZV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20211231_20220109_Ke",
- "day":[
-
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9LZV8xXzE0MDU="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Pe",
- "day":[
- "20220128",
- "20220114",
- "20220204",
- "20220121",
- "20220211"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9QZV8xXzE1MzA="
- },
- {
- "serviceId":"HSL:6181_20220110_20220213_Pe",
- "day":[
- "20220128",
- "20220114",
- "20220204",
- "20220121",
- "20220211"
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIyMDExMF9QZV8xXzE0MDU="
- }
- ],
- "tripsForDate":[
- {
- "stoptimes":[
- {
- "scheduledDeparture":50700,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":50760,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":50820,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":50820,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":50880,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":50940,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":50940,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51000,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51060,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51060,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51120,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51180,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51360,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51480,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51540,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51660,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51780,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":51840,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52200,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52440,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52560,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52620,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52680,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52800,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52860,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52860,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":52980,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":53040,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":53100,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8xXzE0MDU="
- },
- {
- "stoptimes":[
- {
- "scheduledDeparture":55800,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":55860,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":55920,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":55920,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":55980,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56040,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56040,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56100,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56160,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56160,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56220,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56280,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56460,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56580,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56640,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56760,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56880,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":56940,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57300,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57540,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57660,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57720,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57780,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57900,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57960,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":57960,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":58080,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":58140,
- "serviceDay":1640728800
- },
- {
- "scheduledDeparture":58200,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8xXzE1MzA="
- }
- ],
- "id":"UGF0dGVybjpIU0w6NjE4MTowOjAx",
- "trips":[
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50700,
- "scheduledDeparture":50700,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50760,
- "scheduledDeparture":50760,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50820,
- "scheduledDeparture":50820,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50820,
- "scheduledDeparture":50820,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50880,
- "scheduledDeparture":50880,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50940,
- "scheduledDeparture":50940,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50940,
- "scheduledDeparture":50940,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51000,
- "scheduledDeparture":51000,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51060,
- "scheduledDeparture":51060,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51060,
- "scheduledDeparture":51060,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51120,
- "scheduledDeparture":51120,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51180,
- "scheduledDeparture":51180,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51360,
- "scheduledDeparture":51360,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51480,
- "scheduledDeparture":51480,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51540,
- "scheduledDeparture":51540,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51660,
- "scheduledDeparture":51660,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51780,
- "scheduledDeparture":51780,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51840,
- "scheduledDeparture":51840,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52200,
- "scheduledDeparture":52200,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52440,
- "scheduledDeparture":52440,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52560,
- "scheduledDeparture":52560,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52620,
- "scheduledDeparture":52620,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52680,
- "scheduledDeparture":52680,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52800,
- "scheduledDeparture":52800,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52860,
- "scheduledDeparture":52860,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52860,
- "scheduledDeparture":52860,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52980,
- "scheduledDeparture":52980,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53040,
- "scheduledDeparture":53040,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53100,
- "scheduledDeparture":53100,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8xXzE0MDU="
- },
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55800,
- "scheduledDeparture":55800,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55860,
- "scheduledDeparture":55860,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55920,
- "scheduledDeparture":55920,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55920,
- "scheduledDeparture":55920,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55980,
- "scheduledDeparture":55980,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56040,
- "scheduledDeparture":56040,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56040,
- "scheduledDeparture":56040,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56100,
- "scheduledDeparture":56100,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56160,
- "scheduledDeparture":56160,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56160,
- "scheduledDeparture":56160,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56220,
- "scheduledDeparture":56220,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56280,
- "scheduledDeparture":56280,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56460,
- "scheduledDeparture":56460,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56580,
- "scheduledDeparture":56580,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56640,
- "scheduledDeparture":56640,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56760,
- "scheduledDeparture":56760,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56880,
- "scheduledDeparture":56880,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56940,
- "scheduledDeparture":56940,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57300,
- "scheduledDeparture":57300,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57540,
- "scheduledDeparture":57540,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57660,
- "scheduledDeparture":57660,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57720,
- "scheduledDeparture":57720,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57780,
- "scheduledDeparture":57780,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57900,
- "scheduledDeparture":57900,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57960,
- "scheduledDeparture":57960,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57960,
- "scheduledDeparture":57960,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":58080,
- "scheduledDeparture":58080,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":58140,
- "scheduledDeparture":58140,
- "serviceDay":1640728800
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":58200,
- "scheduledDeparture":58200,
- "serviceDay":1640728800
- }
- ],
- "id":"VHJpcDpIU0w6NjE4MV8yMDIxMTIzMV9NYV8xXzE1MzA="
- }
- ]
- }
- ],
- "alerts":[
-
- ],
- "id":"Um91dGU6SFNMOjYxODE="
- }
- }
- },
- "id":"routeRoutes_PatternStopsContainer_Query"
- }
- ]
\ No newline at end of file
diff --git a/test/e2e/mock-data/RoutePageBatchTampereResponse.json b/test/e2e/mock-data/RoutePageBatchTampereResponse.json
deleted file mode 100644
index 5638e91143..0000000000
--- a/test/e2e/mock-data/RoutePageBatchTampereResponse.json
+++ /dev/null
@@ -1,10560 +0,0 @@
-[
- {
- "payload":{
- "data":{
- "route":{
- "gtfsId":"tampere:66A6957",
- "shortName":"66A",
- "color":null,
- "mode":"BUS",
- "type":3,
- "id":"Um91dGU6dGFtcGVyZTo2NkE2OTU3"
- }
- }
- },
- "id":"routeRoutes_RouteTitle_Query"
- },
- {
- "payload":{
- "data":{
- "route":{
- "shortName":"66A",
- "longName":"Valkeakoski - Pispantalli - Metsäkansa - Rantoo",
- "id":"Um91dGU6dGFtcGVyZTo2NkE2OTU3"
- }
- }
- },
- "id":"routeRoutes_RoutePageMeta_Query"
- },
- {
- "payload":{
- "data":{
- "route":{
- "gtfsId":"tampere:66A6957",
- "color":null,
- "shortName":"66A",
- "longName":"Valkeakoski - Pispantalli - Metsäkansa - Rantoo",
- "mode":"BUS",
- "type":3,
- "agency":{
- "name":"Nysse/Vekka Group Oy",
- "url":"http://joukkoliikenne.tampere.fi/",
- "fareUrl":null,
- "id":"QWdlbmN5OnRhbXBlcmU6Njk1Nw==",
- "phone":"+358356564700"
- },
- "patterns":[
- {
- "code":"tampere:66A6957:0:01",
- "directionId":0,
- "headsign":"Metsäkansa",
- "stops":[
- {
- "name":"Valkeakosken linja-autoasema",
- "id":"U3RvcDp0YW1wZXJlOjEwMDAw",
- "gtfsId":"tampere:10000",
- "code":"10000",
- "alerts":[
-
- ]
- },
- {
- "name":"Valkeakosken kauppatori",
- "id":"U3RvcDp0YW1wZXJlOjg5NzU=",
- "gtfsId":"tampere:8975",
- "code":"8975",
- "alerts":[
-
- ]
- },
- {
- "name":"Valkeakosken aluesairaala",
- "id":"U3RvcDp0YW1wZXJlOjg5NzM=",
- "gtfsId":"tampere:8973",
- "code":"8973",
- "alerts":[
-
- ]
- },
- {
- "name":"Alppikatu",
- "id":"U3RvcDp0YW1wZXJlOjg5NzE=",
- "gtfsId":"tampere:8971",
- "code":"8971",
- "alerts":[
-
- ]
- },
- {
- "name":"Roopenkatu",
- "id":"U3RvcDp0YW1wZXJlOjg5Njk=",
- "gtfsId":"tampere:8969",
- "code":"8969",
- "alerts":[
-
- ]
- },
- {
- "name":"Tallikatu",
- "id":"U3RvcDp0YW1wZXJlOjg5Njc=",
- "gtfsId":"tampere:8967",
- "code":"8967",
- "alerts":[
-
- ]
- },
- {
- "name":"Kirjaskatu",
- "id":"U3RvcDp0YW1wZXJlOjg5NjU=",
- "gtfsId":"tampere:8965",
- "code":"8965",
- "alerts":[
-
- ]
- },
- {
- "name":"Antinkulma",
- "id":"U3RvcDp0YW1wZXJlOjg5NjM=",
- "gtfsId":"tampere:8963",
- "code":"8963",
- "alerts":[
-
- ]
- },
- {
- "name":"Kenraalintori P",
- "id":"U3RvcDp0YW1wZXJlOjg5NjE=",
- "gtfsId":"tampere:8961",
- "code":"8961",
- "alerts":[
-
- ]
- },
- {
- "name":"Roukonmäki",
- "id":"U3RvcDp0YW1wZXJlOjkwODM=",
- "gtfsId":"tampere:9083",
- "code":"9083",
- "alerts":[
-
- ]
- },
- {
- "name":"Roukontie 20",
- "id":"U3RvcDp0YW1wZXJlOjkwODE=",
- "gtfsId":"tampere:9081",
- "code":"9081",
- "alerts":[
-
- ]
- },
- {
- "name":"Roukon koulu",
- "id":"U3RvcDp0YW1wZXJlOjkwNzk=",
- "gtfsId":"tampere:9079",
- "code":"9079",
- "alerts":[
-
- ]
- },
- {
- "name":"Vääränkoivuntie",
- "id":"U3RvcDp0YW1wZXJlOjg3MTY=",
- "gtfsId":"tampere:8716",
- "code":"8716",
- "alerts":[
-
- ]
- },
- {
- "name":"Kaakonojantie 56",
- "id":"U3RvcDp0YW1wZXJlOjg3MTg=",
- "gtfsId":"tampere:8718",
- "code":"8718",
- "alerts":[
-
- ]
- },
- {
- "name":"Kaakonojantie 35",
- "id":"U3RvcDp0YW1wZXJlOjg3MzY=",
- "gtfsId":"tampere:8736",
- "code":"8736",
- "alerts":[
-
- ]
- },
- {
- "name":"VAAO",
- "id":"U3RvcDp0YW1wZXJlOjg5ODI=",
- "gtfsId":"tampere:8982",
- "code":"8982",
- "alerts":[
-
- ]
- },
- {
- "name":"Koulukampus",
- "id":"U3RvcDp0YW1wZXJlOjk4MTU=",
- "gtfsId":"tampere:9815",
- "code":"9815",
- "alerts":[
-
- ]
- },
- {
- "name":"Juusonranta L",
- "id":"U3RvcDp0YW1wZXJlOjk4MTc=",
- "gtfsId":"tampere:9817",
- "code":"9817",
- "alerts":[
-
- ]
- },
- {
- "name":"Pispantalli L",
- "id":"U3RvcDp0YW1wZXJlOjk4MTk=",
- "gtfsId":"tampere:9819",
- "code":"9819",
- "alerts":[
-
- ]
- },
- {
- "name":"Savilahti L",
- "id":"U3RvcDp0YW1wZXJlOjk4NjE=",
- "gtfsId":"tampere:9861",
- "code":"9861",
- "alerts":[
-
- ]
- },
- {
- "name":"Eläinsairaala L",
- "id":"U3RvcDp0YW1wZXJlOjk4NjM=",
- "gtfsId":"tampere:9863",
- "code":"9863",
- "alerts":[
-
- ]
- },
- {
- "name":"Yli-Nissi L",
- "id":"U3RvcDp0YW1wZXJlOjk4NjU=",
- "gtfsId":"tampere:9865",
- "code":"9865",
- "alerts":[
-
- ]
- },
- {
- "name":"Kärpäntie L",
- "id":"U3RvcDp0YW1wZXJlOjk4Njc=",
- "gtfsId":"tampere:9867",
- "code":"9867",
- "alerts":[
-
- ]
- },
- {
- "name":"Kärjenniemen koulu",
- "id":"U3RvcDp0YW1wZXJlOjk4Njk=",
- "gtfsId":"tampere:9869",
- "code":"9869",
- "alerts":[
-
- ]
- },
- {
- "name":"Pastintie L",
- "id":"U3RvcDp0YW1wZXJlOjk4NzE=",
- "gtfsId":"tampere:9871",
- "code":"9871",
- "alerts":[
-
- ]
- },
- {
- "name":"Rantoon th P",
- "id":"U3RvcDp0YW1wZXJlOjk4NzM=",
- "gtfsId":"tampere:9873",
- "code":"9873",
- "alerts":[
-
- ]
- },
- {
- "name":"Metsäkansantie 373",
- "id":"U3RvcDp0YW1wZXJlOjk0MDk=",
- "gtfsId":"tampere:9409",
- "code":"9409",
- "alerts":[
-
- ]
- },
- {
- "name":"Metsäkansantie 177",
- "id":"U3RvcDp0YW1wZXJlOjk0MTE=",
- "gtfsId":"tampere:9411",
- "code":"9411",
- "alerts":[
-
- ]
- },
- {
- "name":"Horkantie 2",
- "id":"U3RvcDp0YW1wZXJlOjk0MTM=",
- "gtfsId":"tampere:9413",
- "code":"9413",
- "alerts":[
-
- ]
- },
- {
- "name":"Metsäkansa",
- "id":"U3RvcDp0YW1wZXJlOjk0MTU=",
- "gtfsId":"tampere:9415",
- "code":"9415",
- "alerts":[
-
- ]
- },
- {
- "name":"Iola",
- "id":"U3RvcDp0YW1wZXJlOjk0MTc=",
- "gtfsId":"tampere:9417",
- "code":"9417",
- "alerts":[
-
- ]
- },
- {
- "name":"Rantoo",
- "id":"U3RvcDp0YW1wZXJlOjk0MTk=",
- "gtfsId":"tampere:9419",
- "code":"9419",
- "alerts":[
-
- ]
- },
- {
- "name":"Mustilahti",
- "id":"U3RvcDp0YW1wZXJlOjk0MjE=",
- "gtfsId":"tampere:9421",
- "code":"9421",
- "alerts":[
-
- ]
- },
- {
- "name":"Vääränmäentie 27",
- "id":"U3RvcDp0YW1wZXJlOjk0MjM=",
- "gtfsId":"tampere:9423",
- "code":"9423",
- "alerts":[
-
- ]
- },
- {
- "name":"Kärjenniemen koulu",
- "id":"U3RvcDp0YW1wZXJlOjk4Njg=",
- "gtfsId":"tampere:9868",
- "code":"9868",
- "alerts":[
-
- ]
- },
- {
- "name":"Kärpäntie I",
- "id":"U3RvcDp0YW1wZXJlOjk4NjY=",
- "gtfsId":"tampere:9866",
- "code":"9866",
- "alerts":[
-
- ]
- },
- {
- "name":"Yli-Nissi",
- "id":"U3RvcDp0YW1wZXJlOjk4NjQ=",
- "gtfsId":"tampere:9864",
- "code":"9864",
- "alerts":[
-
- ]
- },
- {
- "name":"Eläinsairaala I",
- "id":"U3RvcDp0YW1wZXJlOjk4NjI=",
- "gtfsId":"tampere:9862",
- "code":"9862",
- "alerts":[
-
- ]
- },
- {
- "name":"Savilahti I",
- "id":"U3RvcDp0YW1wZXJlOjk4NjA=",
- "gtfsId":"tampere:9860",
- "code":"9860",
- "alerts":[
-
- ]
- },
- {
- "name":"Pispantalli I",
- "id":"U3RvcDp0YW1wZXJlOjk4MjA=",
- "gtfsId":"tampere:9820",
- "code":"9820",
- "alerts":[
-
- ]
- },
- {
- "name":"Juusonranta I",
- "id":"U3RvcDp0YW1wZXJlOjk4MTg=",
- "gtfsId":"tampere:9818",
- "code":"9818",
- "alerts":[
-
- ]
- },
- {
- "name":"Tietotie I",
- "id":"U3RvcDp0YW1wZXJlOjk4MTY=",
- "gtfsId":"tampere:9816",
- "code":"9816",
- "alerts":[
-
- ]
- },
- {
- "name":"Koulukampus",
- "id":"U3RvcDp0YW1wZXJlOjg5ODM=",
- "gtfsId":"tampere:8983",
- "code":"8983",
- "alerts":[
-
- ]
- },
- {
- "name":"Mäntyläntie",
- "id":"U3RvcDp0YW1wZXJlOjg3Mzk=",
- "gtfsId":"tampere:8739",
- "code":"8739",
- "alerts":[
-
- ]
- },
- {
- "name":"Kaakonojantie 34",
- "id":"U3RvcDp0YW1wZXJlOjg3Mzc=",
- "gtfsId":"tampere:8737",
- "code":"8737",
- "alerts":[
-
- ]
- },
- {
- "name":"Kaakonojantie 56",
- "id":"U3RvcDp0YW1wZXJlOjg3MTk=",
- "gtfsId":"tampere:8719",
- "code":"8719",
- "alerts":[
-
- ]
- },
- {
- "name":"Vääränkoivuntie",
- "id":"U3RvcDp0YW1wZXJlOjg3MTM=",
- "gtfsId":"tampere:8713",
- "code":"8713",
- "alerts":[
-
- ]
- },
- {
- "name":"Roukon koulu",
- "id":"U3RvcDp0YW1wZXJlOjkwNzg=",
- "gtfsId":"tampere:9078",
- "code":"9078",
- "alerts":[
-
- ]
- },
- {
- "name":"Roukontie 25",
- "id":"U3RvcDp0YW1wZXJlOjkwODA=",
- "gtfsId":"tampere:9080",
- "code":"9080",
- "alerts":[
-
- ]
- },
- {
- "name":"Roukonmäki",
- "id":"U3RvcDp0YW1wZXJlOjkwODI=",
- "gtfsId":"tampere:9082",
- "code":"9082",
- "alerts":[
-
- ]
- },
- {
- "name":"Kenraalintori E",
- "id":"U3RvcDp0YW1wZXJlOjg5NjI=",
- "gtfsId":"tampere:8962",
- "code":"8962",
- "alerts":[
-
- ]
- },
- {
- "name":"Antinkulma",
- "id":"U3RvcDp0YW1wZXJlOjg5NjQ=",
- "gtfsId":"tampere:8964",
- "code":"8964",
- "alerts":[
-
- ]
- },
- {
- "name":"Kirjaskatu",
- "id":"U3RvcDp0YW1wZXJlOjg5NjY=",
- "gtfsId":"tampere:8966",
- "code":"8966",
- "alerts":[
-
- ]
- },
- {
- "name":"Tallikatu",
- "id":"U3RvcDp0YW1wZXJlOjg5Njg=",
- "gtfsId":"tampere:8968",
- "code":"8968",
- "alerts":[
-
- ]
- },
- {
- "name":"Roopenkatu",
- "id":"U3RvcDp0YW1wZXJlOjg5NzA=",
- "gtfsId":"tampere:8970",
- "code":"8970",
- "alerts":[
-
- ]
- },
- {
- "name":"Aluesairaala",
- "id":"U3RvcDp0YW1wZXJlOjg5NzQ=",
- "gtfsId":"tampere:8974",
- "code":"8974",
- "alerts":[
-
- ]
- },
- {
- "name":"Valkeakoski Kauppatori",
- "id":"U3RvcDp0YW1wZXJlOjg5Nzg=",
- "gtfsId":"tampere:8978",
- "code":"8978",
- "alerts":[
-
- ]
- },
- {
- "name":"Valkeakosken linja-autoasema",
- "id":"U3RvcDp0YW1wZXJlOjg5OTc=",
- "gtfsId":"tampere:8997",
- "code":"8997",
- "alerts":[
-
- ]
- }
- ],
- "activeDates":[
- {
- "serviceId":"tampere:TAL_MATO_K66_2022",
- "day":[
- "20220301",
- "20220302",
- "20220228"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU5MjI="
- },
- {
- "serviceId":"tampere:TAL_PE_K66_2022",
- "day":[
- "20220304",
- "20220107"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU5MjM="
- },
- {
- "serviceId":"tampere:TAL_KPMATO_K66_2022",
- "day":[
- "20220330",
- "20220331",
- "20220131",
- "20220201",
- "20220202",
- "20220203",
- "20220207",
- "20220208",
- "20220209",
- "20220210",
- "20220214",
- "20220215",
- "20220216",
- "20220217",
- "20220221",
- "20220222",
- "20220223",
- "20220224",
- "20220303",
- "20220307",
- "20220308",
- "20220309",
- "20220310",
- "20220110",
- "20220111",
- "20220112",
- "20220314",
- "20220113",
- "20220315",
- "20220316",
- "20220317",
- "20220117",
- "20220118",
- "20220119",
- "20220321",
- "20220120",
- "20220322",
- "20220323",
- "20220324",
- "20220124",
- "20220125",
- "20220126",
- "20220328",
- "20220127",
- "20220329"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU4ODk="
- },
- {
- "serviceId":"tampere:TAL_KPPE_K66_2022",
- "day":[
- "20220128",
- "20220114",
- "20220318",
- "20220218",
- "20220204",
- "20220121",
- "20220325",
- "20220225",
- "20220311",
- "20220211"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU4OTA="
- },
- {
- "serviceId":"tampere:TAL_KPPE_K66_2022",
- "day":[
- "20220128",
- "20220114",
- "20220318",
- "20220218",
- "20220204",
- "20220121",
- "20220325",
- "20220225",
- "20220311",
- "20220211"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU4OTA="
- },
- {
- "serviceId":"tampere:TAL_KPMATO_K66_2022",
- "day":[
- "20220330",
- "20220331",
- "20220131",
- "20220201",
- "20220202",
- "20220203",
- "20220207",
- "20220208",
- "20220209",
- "20220210",
- "20220214",
- "20220215",
- "20220216",
- "20220217",
- "20220221",
- "20220222",
- "20220223",
- "20220224",
- "20220303",
- "20220307",
- "20220308",
- "20220309",
- "20220310",
- "20220110",
- "20220111",
- "20220112",
- "20220314",
- "20220113",
- "20220315",
- "20220316",
- "20220317",
- "20220117",
- "20220118",
- "20220119",
- "20220321",
- "20220120",
- "20220322",
- "20220323",
- "20220324",
- "20220124",
- "20220125",
- "20220126",
- "20220328",
- "20220127",
- "20220329"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU4ODk="
- },
- {
- "serviceId":"tampere:TAL_MATO_K66_2022",
- "day":[
- "20220301",
- "20220302",
- "20220228"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU5MjI="
- },
- {
- "serviceId":"tampere:TAL_PE_K66_2022",
- "day":[
- "20220304",
- "20220107"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU5MjM="
- },
- {
- "serviceId":"tampere:TAL_MATO_K66_2022",
- "day":[
- "20220301",
- "20220302",
- "20220228"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU5MjI="
- },
- {
- "serviceId":"tampere:TAL_PE_K66_2022",
- "day":[
- "20220304",
- "20220107"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU5MjM="
- },
- {
- "serviceId":"tampere:TAL_KPMATO_K66_2022",
- "day":[
- "20220330",
- "20220331",
- "20220131",
- "20220201",
- "20220202",
- "20220203",
- "20220207",
- "20220208",
- "20220209",
- "20220210",
- "20220214",
- "20220215",
- "20220216",
- "20220217",
- "20220221",
- "20220222",
- "20220223",
- "20220224",
- "20220303",
- "20220307",
- "20220308",
- "20220309",
- "20220310",
- "20220110",
- "20220111",
- "20220112",
- "20220314",
- "20220113",
- "20220315",
- "20220316",
- "20220317",
- "20220117",
- "20220118",
- "20220119",
- "20220321",
- "20220120",
- "20220322",
- "20220323",
- "20220324",
- "20220124",
- "20220125",
- "20220126",
- "20220328",
- "20220127",
- "20220329"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU4ODk="
- },
- {
- "serviceId":"tampere:TAL_KPPE_K66_2022",
- "day":[
- "20220128",
- "20220114",
- "20220318",
- "20220218",
- "20220204",
- "20220121",
- "20220325",
- "20220225",
- "20220311",
- "20220211"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU4OTA="
- },
- {
- "serviceId":"tampere:TAL_MATO_K66_2022",
- "day":[
- "20220301",
- "20220302",
- "20220228"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU5MjI="
- },
- {
- "serviceId":"tampere:TAL_PE_K66_2022",
- "day":[
- "20220304",
- "20220107"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU5MjM="
- },
- {
- "serviceId":"tampere:TAL_KPMATO_K66_2022",
- "day":[
- "20220330",
- "20220331",
- "20220131",
- "20220201",
- "20220202",
- "20220203",
- "20220207",
- "20220208",
- "20220209",
- "20220210",
- "20220214",
- "20220215",
- "20220216",
- "20220217",
- "20220221",
- "20220222",
- "20220223",
- "20220224",
- "20220303",
- "20220307",
- "20220308",
- "20220309",
- "20220310",
- "20220110",
- "20220111",
- "20220112",
- "20220314",
- "20220113",
- "20220315",
- "20220316",
- "20220317",
- "20220117",
- "20220118",
- "20220119",
- "20220321",
- "20220120",
- "20220322",
- "20220323",
- "20220324",
- "20220124",
- "20220125",
- "20220126",
- "20220328",
- "20220127",
- "20220329"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU4ODk="
- },
- {
- "serviceId":"tampere:TAL_KPPE_K66_2022",
- "day":[
- "20220128",
- "20220114",
- "20220318",
- "20220218",
- "20220204",
- "20220121",
- "20220325",
- "20220225",
- "20220311",
- "20220211"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU4OTA="
- }
- ],
- "tripsForDate":[
- {
- "stoptimes":[
- {
- "scheduledDeparture":54600,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54660,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54810,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54840,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54870,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54900,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54930,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54960,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54990,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55020,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55035,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55050,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55080,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55110,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55140,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55215,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55245,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55275,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55305,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55335,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55365,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55395,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55425,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55455,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55515,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55545,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55605,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55785,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55800,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55845,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56025,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56100,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56445,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56685,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56745,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56775,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56805,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56835,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56865,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56895,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56955,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56985,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57015,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57075,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57105,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57135,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57165,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57195,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57225,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57285,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57345,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57375,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57435,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57495,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57555,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57645,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57720,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57840,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU4ODk="
- },
- {
- "stoptimes":[
- {
- "scheduledDeparture":47400,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47460,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47610,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47640,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47670,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47700,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47730,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47760,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47790,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47820,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47835,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47850,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47880,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47910,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47940,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48015,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48045,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48075,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48105,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48135,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48165,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48195,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48225,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48255,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48315,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48345,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48405,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48585,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48630,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48645,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48825,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48900,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49245,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49485,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49545,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49575,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49605,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49635,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49665,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49695,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49755,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49785,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49815,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49875,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49905,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49935,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49965,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49995,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50025,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50085,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50145,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50175,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50235,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50295,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50355,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50445,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50520,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50640,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU4ODk="
- },
- {
- "stoptimes":[
- {
- "scheduledDeparture":51000,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51060,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51210,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51240,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51270,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51300,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51330,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51360,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51390,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51420,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51435,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51450,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51480,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51510,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51540,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51615,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51645,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51675,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51705,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51735,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51765,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51795,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51825,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51855,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51915,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51945,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":52005,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":52185,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":52200,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":52245,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":52425,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":52500,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":52845,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53085,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53145,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53175,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53205,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53235,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53265,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53295,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53355,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53385,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53415,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53475,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53505,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53535,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53565,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53595,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53625,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53685,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53745,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53775,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53835,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53895,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53955,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54045,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54120,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54240,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU4ODk="
- },
- {
- "stoptimes":[
- {
- "scheduledDeparture":31500,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31560,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31710,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31740,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31770,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31800,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31830,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31860,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31890,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31920,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31935,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31950,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31980,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32010,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32040,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32115,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32145,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32175,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32205,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32235,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32265,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32295,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32325,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32355,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32415,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32445,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32505,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32685,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32745,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33000,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33120,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33300,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33345,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33585,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33645,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33675,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33705,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33735,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33765,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33795,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33855,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33885,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33915,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33975,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34005,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34035,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34065,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34095,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34125,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34185,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34245,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34275,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34335,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34395,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34455,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34545,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34620,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34740,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU4ODk="
- }
- ],
- "id":"UGF0dGVybjp0YW1wZXJlOjY2QTY5NTc6MDowMQ==",
- "trips":[
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54600,
- "scheduledDeparture":54600,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54660,
- "scheduledDeparture":54660,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54810,
- "scheduledDeparture":54810,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54840,
- "scheduledDeparture":54840,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54870,
- "scheduledDeparture":54870,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54900,
- "scheduledDeparture":54900,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54930,
- "scheduledDeparture":54930,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54960,
- "scheduledDeparture":54960,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54990,
- "scheduledDeparture":54990,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55020,
- "scheduledDeparture":55020,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55035,
- "scheduledDeparture":55035,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55050,
- "scheduledDeparture":55050,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55080,
- "scheduledDeparture":55080,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55110,
- "scheduledDeparture":55110,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55140,
- "scheduledDeparture":55140,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55215,
- "scheduledDeparture":55215,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55245,
- "scheduledDeparture":55245,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55275,
- "scheduledDeparture":55275,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55305,
- "scheduledDeparture":55305,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55335,
- "scheduledDeparture":55335,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55365,
- "scheduledDeparture":55365,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55395,
- "scheduledDeparture":55395,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55425,
- "scheduledDeparture":55425,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55455,
- "scheduledDeparture":55455,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55515,
- "scheduledDeparture":55515,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55545,
- "scheduledDeparture":55545,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55605,
- "scheduledDeparture":55605,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55785,
- "scheduledDeparture":55785,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55800,
- "scheduledDeparture":55800,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55845,
- "scheduledDeparture":55845,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56025,
- "scheduledDeparture":56025,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56100,
- "scheduledDeparture":56100,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56445,
- "scheduledDeparture":56445,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56685,
- "scheduledDeparture":56685,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56745,
- "scheduledDeparture":56745,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56775,
- "scheduledDeparture":56775,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56805,
- "scheduledDeparture":56805,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56835,
- "scheduledDeparture":56835,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56865,
- "scheduledDeparture":56865,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56895,
- "scheduledDeparture":56895,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56955,
- "scheduledDeparture":56955,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56985,
- "scheduledDeparture":56985,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57015,
- "scheduledDeparture":57015,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57075,
- "scheduledDeparture":57075,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57105,
- "scheduledDeparture":57105,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57135,
- "scheduledDeparture":57135,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57165,
- "scheduledDeparture":57165,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57195,
- "scheduledDeparture":57195,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57225,
- "scheduledDeparture":57225,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57285,
- "scheduledDeparture":57285,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57345,
- "scheduledDeparture":57345,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57375,
- "scheduledDeparture":57375,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57435,
- "scheduledDeparture":57435,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57495,
- "scheduledDeparture":57495,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57555,
- "scheduledDeparture":57555,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57645,
- "scheduledDeparture":57645,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57720,
- "scheduledDeparture":57720,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57840,
- "scheduledDeparture":57840,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU4ODk="
- },
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47400,
- "scheduledDeparture":47400,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47460,
- "scheduledDeparture":47460,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47610,
- "scheduledDeparture":47610,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47640,
- "scheduledDeparture":47640,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47670,
- "scheduledDeparture":47670,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47700,
- "scheduledDeparture":47700,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47730,
- "scheduledDeparture":47730,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47760,
- "scheduledDeparture":47760,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47790,
- "scheduledDeparture":47790,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47820,
- "scheduledDeparture":47820,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47835,
- "scheduledDeparture":47835,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47850,
- "scheduledDeparture":47850,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47880,
- "scheduledDeparture":47880,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47910,
- "scheduledDeparture":47910,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47940,
- "scheduledDeparture":47940,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48015,
- "scheduledDeparture":48015,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48045,
- "scheduledDeparture":48045,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48075,
- "scheduledDeparture":48075,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48105,
- "scheduledDeparture":48105,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48135,
- "scheduledDeparture":48135,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48165,
- "scheduledDeparture":48165,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48195,
- "scheduledDeparture":48195,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48225,
- "scheduledDeparture":48225,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48255,
- "scheduledDeparture":48255,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48315,
- "scheduledDeparture":48315,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48345,
- "scheduledDeparture":48345,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48405,
- "scheduledDeparture":48405,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48585,
- "scheduledDeparture":48585,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48630,
- "scheduledDeparture":48630,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48645,
- "scheduledDeparture":48645,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48825,
- "scheduledDeparture":48825,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48900,
- "scheduledDeparture":48900,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49245,
- "scheduledDeparture":49245,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49485,
- "scheduledDeparture":49485,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49545,
- "scheduledDeparture":49545,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49575,
- "scheduledDeparture":49575,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49605,
- "scheduledDeparture":49605,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49635,
- "scheduledDeparture":49635,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49665,
- "scheduledDeparture":49665,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49695,
- "scheduledDeparture":49695,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49755,
- "scheduledDeparture":49755,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49785,
- "scheduledDeparture":49785,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49815,
- "scheduledDeparture":49815,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49875,
- "scheduledDeparture":49875,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49905,
- "scheduledDeparture":49905,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49935,
- "scheduledDeparture":49935,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49965,
- "scheduledDeparture":49965,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49995,
- "scheduledDeparture":49995,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50025,
- "scheduledDeparture":50025,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50085,
- "scheduledDeparture":50085,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50145,
- "scheduledDeparture":50145,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50175,
- "scheduledDeparture":50175,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50235,
- "scheduledDeparture":50235,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50295,
- "scheduledDeparture":50295,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50355,
- "scheduledDeparture":50355,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50445,
- "scheduledDeparture":50445,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50520,
- "scheduledDeparture":50520,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50640,
- "scheduledDeparture":50640,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU4ODk="
- },
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51000,
- "scheduledDeparture":51000,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51060,
- "scheduledDeparture":51060,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51210,
- "scheduledDeparture":51210,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51240,
- "scheduledDeparture":51240,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51270,
- "scheduledDeparture":51270,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51300,
- "scheduledDeparture":51300,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51330,
- "scheduledDeparture":51330,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51360,
- "scheduledDeparture":51360,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51390,
- "scheduledDeparture":51390,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51420,
- "scheduledDeparture":51420,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51435,
- "scheduledDeparture":51435,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51450,
- "scheduledDeparture":51450,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51480,
- "scheduledDeparture":51480,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51510,
- "scheduledDeparture":51510,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51540,
- "scheduledDeparture":51540,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51615,
- "scheduledDeparture":51615,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51645,
- "scheduledDeparture":51645,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51675,
- "scheduledDeparture":51675,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51705,
- "scheduledDeparture":51705,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51735,
- "scheduledDeparture":51735,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51765,
- "scheduledDeparture":51765,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51795,
- "scheduledDeparture":51795,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51825,
- "scheduledDeparture":51825,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51855,
- "scheduledDeparture":51855,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51915,
- "scheduledDeparture":51915,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51945,
- "scheduledDeparture":51945,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52005,
- "scheduledDeparture":52005,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52185,
- "scheduledDeparture":52185,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52200,
- "scheduledDeparture":52200,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52245,
- "scheduledDeparture":52245,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52425,
- "scheduledDeparture":52425,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52500,
- "scheduledDeparture":52500,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52845,
- "scheduledDeparture":52845,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53085,
- "scheduledDeparture":53085,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53145,
- "scheduledDeparture":53145,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53175,
- "scheduledDeparture":53175,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53205,
- "scheduledDeparture":53205,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53235,
- "scheduledDeparture":53235,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53265,
- "scheduledDeparture":53265,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53295,
- "scheduledDeparture":53295,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53355,
- "scheduledDeparture":53355,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53385,
- "scheduledDeparture":53385,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53415,
- "scheduledDeparture":53415,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53475,
- "scheduledDeparture":53475,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53505,
- "scheduledDeparture":53505,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53535,
- "scheduledDeparture":53535,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53565,
- "scheduledDeparture":53565,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53595,
- "scheduledDeparture":53595,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53625,
- "scheduledDeparture":53625,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53685,
- "scheduledDeparture":53685,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53745,
- "scheduledDeparture":53745,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53775,
- "scheduledDeparture":53775,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53835,
- "scheduledDeparture":53835,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53895,
- "scheduledDeparture":53895,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53955,
- "scheduledDeparture":53955,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54045,
- "scheduledDeparture":54045,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54120,
- "scheduledDeparture":54120,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54240,
- "scheduledDeparture":54240,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU4ODk="
- },
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31500,
- "scheduledDeparture":31500,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31560,
- "scheduledDeparture":31560,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31710,
- "scheduledDeparture":31710,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31740,
- "scheduledDeparture":31740,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31770,
- "scheduledDeparture":31770,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31800,
- "scheduledDeparture":31800,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31830,
- "scheduledDeparture":31830,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31860,
- "scheduledDeparture":31860,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31890,
- "scheduledDeparture":31890,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31920,
- "scheduledDeparture":31920,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31935,
- "scheduledDeparture":31935,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31950,
- "scheduledDeparture":31950,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31980,
- "scheduledDeparture":31980,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32010,
- "scheduledDeparture":32010,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32040,
- "scheduledDeparture":32040,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32115,
- "scheduledDeparture":32115,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32145,
- "scheduledDeparture":32145,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32175,
- "scheduledDeparture":32175,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32205,
- "scheduledDeparture":32205,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32235,
- "scheduledDeparture":32235,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32265,
- "scheduledDeparture":32265,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32295,
- "scheduledDeparture":32295,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32325,
- "scheduledDeparture":32325,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32355,
- "scheduledDeparture":32355,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32415,
- "scheduledDeparture":32415,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32445,
- "scheduledDeparture":32445,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32505,
- "scheduledDeparture":32505,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32685,
- "scheduledDeparture":32685,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32745,
- "scheduledDeparture":32745,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33000,
- "scheduledDeparture":33000,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33120,
- "scheduledDeparture":33120,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33300,
- "scheduledDeparture":33300,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33345,
- "scheduledDeparture":33345,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33585,
- "scheduledDeparture":33585,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33645,
- "scheduledDeparture":33645,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33675,
- "scheduledDeparture":33675,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33705,
- "scheduledDeparture":33705,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33735,
- "scheduledDeparture":33735,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33765,
- "scheduledDeparture":33765,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33795,
- "scheduledDeparture":33795,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33855,
- "scheduledDeparture":33855,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33885,
- "scheduledDeparture":33885,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33915,
- "scheduledDeparture":33915,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33975,
- "scheduledDeparture":33975,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34005,
- "scheduledDeparture":34005,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34035,
- "scheduledDeparture":34035,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34065,
- "scheduledDeparture":34065,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34095,
- "scheduledDeparture":34095,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34125,
- "scheduledDeparture":34125,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34185,
- "scheduledDeparture":34185,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34245,
- "scheduledDeparture":34245,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34275,
- "scheduledDeparture":34275,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34335,
- "scheduledDeparture":34335,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34395,
- "scheduledDeparture":34395,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34455,
- "scheduledDeparture":34455,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34545,
- "scheduledDeparture":34545,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34620,
- "scheduledDeparture":34620,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34740,
- "scheduledDeparture":34740,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU4ODk="
- }
- ]
- }
- ],
- "alerts":[
-
- ],
- "id":"Um91dGU6dGFtcGVyZTo2NkE2OTU3"
- }
- }
- },
- "id":"routeRoutes_RoutePage_Query"
- },
- {
- "payload":{
- "data":{
- "pattern":{
- "code":"tampere:66A6957:0:01",
- "directionId":0,
- "headsign":"Metsäkansa",
- "geometry":[
- {
- "lat":61.26373,
- "lon":24.03426
- },
- {
- "lat":61.26763,
- "lon":24.031
- },
- {
- "lat":61.27072,
- "lon":24.02918
- },
- {
- "lat":61.27171,
- "lon":24.02851
- },
- {
- "lat":61.27143,
- "lon":24.02329
- },
- {
- "lat":61.27156,
- "lon":24.0217
- },
- {
- "lat":61.27378,
- "lon":24.0199
- },
- {
- "lat":61.27636,
- "lon":24.01792
- },
- {
- "lat":61.27774,
- "lon":24.01691
- },
- {
- "lat":61.27999,
- "lon":24.01582
- },
- {
- "lat":61.28182,
- "lon":24.01451
- },
- {
- "lat":61.28368,
- "lon":24.01318
- },
- {
- "lat":61.28491,
- "lon":24.01032
- },
- {
- "lat":61.28498,
- "lon":24.00609
- },
- {
- "lat":61.28397,
- "lon":24.00098
- },
- {
- "lat":61.28113,
- "lon":23.99429
- },
- {
- "lat":61.27998,
- "lon":23.99101
- },
- {
- "lat":61.27794,
- "lon":23.98531
- },
- {
- "lat":61.27441,
- "lon":23.97542
- },
- {
- "lat":61.27152,
- "lon":23.96893
- },
- {
- "lat":61.26652,
- "lon":23.95605
- },
- {
- "lat":61.26407,
- "lon":23.9487
- },
- {
- "lat":61.26185,
- "lon":23.94067
- },
- {
- "lat":61.26024,
- "lon":23.93499
- },
- {
- "lat":61.25897,
- "lon":23.92637
- },
- {
- "lat":61.25592,
- "lon":23.92361
- },
- {
- "lat":61.26045,
- "lon":23.89711
- },
- {
- "lat":61.24611,
- "lon":23.88634
- },
- {
- "lat":61.24385,
- "lon":23.88246
- },
- {
- "lat":61.23271,
- "lon":23.87919
- },
- {
- "lat":61.22967,
- "lon":23.87766
- },
- {
- "lat":61.2214,
- "lon":23.9561
- },
- {
- "lat":61.23625,
- "lon":23.94609
- },
- {
- "lat":61.25741,
- "lon":23.92852
- },
- {
- "lat":61.26068,
- "lon":23.93663
- },
- {
- "lat":61.26214,
- "lon":23.94238
- },
- {
- "lat":61.26372,
- "lon":23.94812
- },
- {
- "lat":61.26581,
- "lon":23.95467
- },
- {
- "lat":61.27026,
- "lon":23.96711
- },
- {
- "lat":61.27479,
- "lon":23.97689
- },
- {
- "lat":61.27853,
- "lon":23.98762
- },
- {
- "lat":61.27987,
- "lon":23.99118
- },
- {
- "lat":61.28064,
- "lon":23.99374
- },
- {
- "lat":61.28322,
- "lon":23.9999
- },
- {
- "lat":61.28395,
- "lon":24.0016
- },
- {
- "lat":61.28489,
- "lon":24.00623
- },
- {
- "lat":61.28486,
- "lon":24.00976
- },
- {
- "lat":61.28348,
- "lon":24.01321
- },
- {
- "lat":61.28194,
- "lon":24.01429
- },
- {
- "lat":61.2799,
- "lon":24.01572
- },
- {
- "lat":61.27776,
- "lon":24.01639
- },
- {
- "lat":61.27577,
- "lon":24.01783
- },
- {
- "lat":61.27358,
- "lon":24.01979
- },
- {
- "lat":61.27192,
- "lon":24.02094
- },
- {
- "lat":61.27136,
- "lon":24.02349
- },
- {
- "lat":61.27018,
- "lon":24.02933
- },
- {
- "lat":61.2667,
- "lon":24.03132
- },
- {
- "lat":61.26416,
- "lon":24.03355
- }
- ],
- "stops":[
- {
- "lat":61.26373,
- "lon":24.03426,
- "name":"Valkeakosken linja-autoasema",
- "gtfsId":"tampere:10000",
- "code":"10000",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjEwMDAw",
- "platformCode":null
- },
- {
- "lat":61.26763,
- "lon":24.031,
- "name":"Valkeakosken kauppatori",
- "gtfsId":"tampere:8975",
- "code":"8975",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5NzU=",
- "platformCode":null
- },
- {
- "lat":61.27072,
- "lon":24.02918,
- "name":"Valkeakosken aluesairaala",
- "gtfsId":"tampere:8973",
- "code":"8973",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5NzM=",
- "platformCode":null
- },
- {
- "lat":61.27171,
- "lon":24.02851,
- "name":"Alppikatu",
- "gtfsId":"tampere:8971",
- "code":"8971",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5NzE=",
- "platformCode":null
- },
- {
- "lat":61.27143,
- "lon":24.02329,
- "name":"Roopenkatu",
- "gtfsId":"tampere:8969",
- "code":"8969",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5Njk=",
- "platformCode":null
- },
- {
- "lat":61.27156,
- "lon":24.0217,
- "name":"Tallikatu",
- "gtfsId":"tampere:8967",
- "code":"8967",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5Njc=",
- "platformCode":null
- },
- {
- "lat":61.27378,
- "lon":24.0199,
- "name":"Kirjaskatu",
- "gtfsId":"tampere:8965",
- "code":"8965",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5NjU=",
- "platformCode":null
- },
- {
- "lat":61.27636,
- "lon":24.01792,
- "name":"Antinkulma",
- "gtfsId":"tampere:8963",
- "code":"8963",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5NjM=",
- "platformCode":null
- },
- {
- "lat":61.27774,
- "lon":24.01691,
- "name":"Kenraalintori P",
- "gtfsId":"tampere:8961",
- "code":"8961",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5NjE=",
- "platformCode":null
- },
- {
- "lat":61.27999,
- "lon":24.01582,
- "name":"Roukonmäki",
- "gtfsId":"tampere:9083",
- "code":"9083",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjkwODM=",
- "platformCode":null
- },
- {
- "lat":61.28182,
- "lon":24.01451,
- "name":"Roukontie 20",
- "gtfsId":"tampere:9081",
- "code":"9081",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjkwODE=",
- "platformCode":null
- },
- {
- "lat":61.28368,
- "lon":24.01318,
- "name":"Roukon koulu",
- "gtfsId":"tampere:9079",
- "code":"9079",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjkwNzk=",
- "platformCode":null
- },
- {
- "lat":61.28491,
- "lon":24.01032,
- "name":"Vääränkoivuntie",
- "gtfsId":"tampere:8716",
- "code":"8716",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg3MTY=",
- "platformCode":null
- },
- {
- "lat":61.28498,
- "lon":24.00609,
- "name":"Kaakonojantie 56",
- "gtfsId":"tampere:8718",
- "code":"8718",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg3MTg=",
- "platformCode":null
- },
- {
- "lat":61.28397,
- "lon":24.00098,
- "name":"Kaakonojantie 35",
- "gtfsId":"tampere:8736",
- "code":"8736",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg3MzY=",
- "platformCode":null
- },
- {
- "lat":61.28113,
- "lon":23.99429,
- "name":"VAAO",
- "gtfsId":"tampere:8982",
- "code":"8982",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5ODI=",
- "platformCode":null
- },
- {
- "lat":61.27998,
- "lon":23.99101,
- "name":"Koulukampus",
- "gtfsId":"tampere:9815",
- "code":"9815",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4MTU=",
- "platformCode":null
- },
- {
- "lat":61.27794,
- "lon":23.98531,
- "name":"Juusonranta L",
- "gtfsId":"tampere:9817",
- "code":"9817",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4MTc=",
- "platformCode":null
- },
- {
- "lat":61.27441,
- "lon":23.97542,
- "name":"Pispantalli L",
- "gtfsId":"tampere:9819",
- "code":"9819",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4MTk=",
- "platformCode":null
- },
- {
- "lat":61.27152,
- "lon":23.96893,
- "name":"Savilahti L",
- "gtfsId":"tampere:9861",
- "code":"9861",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4NjE=",
- "platformCode":null
- },
- {
- "lat":61.26652,
- "lon":23.95605,
- "name":"Eläinsairaala L",
- "gtfsId":"tampere:9863",
- "code":"9863",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4NjM=",
- "platformCode":null
- },
- {
- "lat":61.26407,
- "lon":23.9487,
- "name":"Yli-Nissi L",
- "gtfsId":"tampere:9865",
- "code":"9865",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4NjU=",
- "platformCode":null
- },
- {
- "lat":61.26185,
- "lon":23.94067,
- "name":"Kärpäntie L",
- "gtfsId":"tampere:9867",
- "code":"9867",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4Njc=",
- "platformCode":null
- },
- {
- "lat":61.26024,
- "lon":23.93499,
- "name":"Kärjenniemen koulu",
- "gtfsId":"tampere:9869",
- "code":"9869",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4Njk=",
- "platformCode":null
- },
- {
- "lat":61.25897,
- "lon":23.92637,
- "name":"Pastintie L",
- "gtfsId":"tampere:9871",
- "code":"9871",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4NzE=",
- "platformCode":null
- },
- {
- "lat":61.25592,
- "lon":23.92361,
- "name":"Rantoon th P",
- "gtfsId":"tampere:9873",
- "code":"9873",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4NzM=",
- "platformCode":null
- },
- {
- "lat":61.26045,
- "lon":23.89711,
- "name":"Metsäkansantie 373",
- "gtfsId":"tampere:9409",
- "code":"9409",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk0MDk=",
- "platformCode":null
- },
- {
- "lat":61.24611,
- "lon":23.88634,
- "name":"Metsäkansantie 177",
- "gtfsId":"tampere:9411",
- "code":"9411",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk0MTE=",
- "platformCode":null
- },
- {
- "lat":61.24385,
- "lon":23.88246,
- "name":"Horkantie 2",
- "gtfsId":"tampere:9413",
- "code":"9413",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk0MTM=",
- "platformCode":null
- },
- {
- "lat":61.23271,
- "lon":23.87919,
- "name":"Metsäkansa",
- "gtfsId":"tampere:9415",
- "code":"9415",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk0MTU=",
- "platformCode":null
- },
- {
- "lat":61.22967,
- "lon":23.87766,
- "name":"Iola",
- "gtfsId":"tampere:9417",
- "code":"9417",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk0MTc=",
- "platformCode":null
- },
- {
- "lat":61.2214,
- "lon":23.9561,
- "name":"Rantoo",
- "gtfsId":"tampere:9419",
- "code":"9419",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk0MTk=",
- "platformCode":null
- },
- {
- "lat":61.23625,
- "lon":23.94609,
- "name":"Mustilahti",
- "gtfsId":"tampere:9421",
- "code":"9421",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk0MjE=",
- "platformCode":null
- },
- {
- "lat":61.25741,
- "lon":23.92852,
- "name":"Vääränmäentie 27",
- "gtfsId":"tampere:9423",
- "code":"9423",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk0MjM=",
- "platformCode":null
- },
- {
- "lat":61.26068,
- "lon":23.93663,
- "name":"Kärjenniemen koulu",
- "gtfsId":"tampere:9868",
- "code":"9868",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4Njg=",
- "platformCode":null
- },
- {
- "lat":61.26214,
- "lon":23.94238,
- "name":"Kärpäntie I",
- "gtfsId":"tampere:9866",
- "code":"9866",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4NjY=",
- "platformCode":null
- },
- {
- "lat":61.26372,
- "lon":23.94812,
- "name":"Yli-Nissi",
- "gtfsId":"tampere:9864",
- "code":"9864",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4NjQ=",
- "platformCode":null
- },
- {
- "lat":61.26581,
- "lon":23.95467,
- "name":"Eläinsairaala I",
- "gtfsId":"tampere:9862",
- "code":"9862",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4NjI=",
- "platformCode":null
- },
- {
- "lat":61.27026,
- "lon":23.96711,
- "name":"Savilahti I",
- "gtfsId":"tampere:9860",
- "code":"9860",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4NjA=",
- "platformCode":null
- },
- {
- "lat":61.27479,
- "lon":23.97689,
- "name":"Pispantalli I",
- "gtfsId":"tampere:9820",
- "code":"9820",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4MjA=",
- "platformCode":null
- },
- {
- "lat":61.27853,
- "lon":23.98762,
- "name":"Juusonranta I",
- "gtfsId":"tampere:9818",
- "code":"9818",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4MTg=",
- "platformCode":null
- },
- {
- "lat":61.27987,
- "lon":23.99118,
- "name":"Tietotie I",
- "gtfsId":"tampere:9816",
- "code":"9816",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjk4MTY=",
- "platformCode":null
- },
- {
- "lat":61.28064,
- "lon":23.99374,
- "name":"Koulukampus",
- "gtfsId":"tampere:8983",
- "code":"8983",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5ODM=",
- "platformCode":null
- },
- {
- "lat":61.28322,
- "lon":23.9999,
- "name":"Mäntyläntie",
- "gtfsId":"tampere:8739",
- "code":"8739",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg3Mzk=",
- "platformCode":null
- },
- {
- "lat":61.28395,
- "lon":24.0016,
- "name":"Kaakonojantie 34",
- "gtfsId":"tampere:8737",
- "code":"8737",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg3Mzc=",
- "platformCode":null
- },
- {
- "lat":61.28489,
- "lon":24.00623,
- "name":"Kaakonojantie 56",
- "gtfsId":"tampere:8719",
- "code":"8719",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg3MTk=",
- "platformCode":null
- },
- {
- "lat":61.28486,
- "lon":24.00976,
- "name":"Vääränkoivuntie",
- "gtfsId":"tampere:8713",
- "code":"8713",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg3MTM=",
- "platformCode":null
- },
- {
- "lat":61.28348,
- "lon":24.01321,
- "name":"Roukon koulu",
- "gtfsId":"tampere:9078",
- "code":"9078",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjkwNzg=",
- "platformCode":null
- },
- {
- "lat":61.28194,
- "lon":24.01429,
- "name":"Roukontie 25",
- "gtfsId":"tampere:9080",
- "code":"9080",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjkwODA=",
- "platformCode":null
- },
- {
- "lat":61.2799,
- "lon":24.01572,
- "name":"Roukonmäki",
- "gtfsId":"tampere:9082",
- "code":"9082",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjkwODI=",
- "platformCode":null
- },
- {
- "lat":61.27776,
- "lon":24.01639,
- "name":"Kenraalintori E",
- "gtfsId":"tampere:8962",
- "code":"8962",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5NjI=",
- "platformCode":null
- },
- {
- "lat":61.27577,
- "lon":24.01783,
- "name":"Antinkulma",
- "gtfsId":"tampere:8964",
- "code":"8964",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5NjQ=",
- "platformCode":null
- },
- {
- "lat":61.27358,
- "lon":24.01979,
- "name":"Kirjaskatu",
- "gtfsId":"tampere:8966",
- "code":"8966",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5NjY=",
- "platformCode":null
- },
- {
- "lat":61.27192,
- "lon":24.02094,
- "name":"Tallikatu",
- "gtfsId":"tampere:8968",
- "code":"8968",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5Njg=",
- "platformCode":null
- },
- {
- "lat":61.27136,
- "lon":24.02349,
- "name":"Roopenkatu",
- "gtfsId":"tampere:8970",
- "code":"8970",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5NzA=",
- "platformCode":null
- },
- {
- "lat":61.27018,
- "lon":24.02933,
- "name":"Aluesairaala",
- "gtfsId":"tampere:8974",
- "code":"8974",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5NzQ=",
- "platformCode":null
- },
- {
- "lat":61.2667,
- "lon":24.03132,
- "name":"Valkeakoski Kauppatori",
- "gtfsId":"tampere:8978",
- "code":"8978",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5Nzg=",
- "platformCode":null
- },
- {
- "lat":61.26416,
- "lon":24.03355,
- "name":"Valkeakosken linja-autoasema",
- "gtfsId":"tampere:8997",
- "code":"8997",
- "desc":null,
- "zoneId":"D",
- "alerts":[
-
- ],
- "stops":[
-
- ],
- "id":"U3RvcDp0YW1wZXJlOjg5OTc=",
- "platformCode":null
- }
- ],
- "activeDates":[
- {
- "day":[
- "20220301",
- "20220302",
- "20220228"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU5MjI="
- },
- {
- "day":[
- "20220304",
- "20220107"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU5MjM="
- },
- {
- "day":[
- "20220330",
- "20220331",
- "20220131",
- "20220201",
- "20220202",
- "20220203",
- "20220207",
- "20220208",
- "20220209",
- "20220210",
- "20220214",
- "20220215",
- "20220216",
- "20220217",
- "20220221",
- "20220222",
- "20220223",
- "20220224",
- "20220303",
- "20220307",
- "20220308",
- "20220309",
- "20220310",
- "20220110",
- "20220111",
- "20220112",
- "20220314",
- "20220113",
- "20220315",
- "20220316",
- "20220317",
- "20220117",
- "20220118",
- "20220119",
- "20220321",
- "20220120",
- "20220322",
- "20220323",
- "20220324",
- "20220124",
- "20220125",
- "20220126",
- "20220328",
- "20220127",
- "20220329"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU4ODk="
- },
- {
- "day":[
- "20220128",
- "20220114",
- "20220318",
- "20220218",
- "20220204",
- "20220121",
- "20220325",
- "20220225",
- "20220311",
- "20220211"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU4OTA="
- },
- {
- "day":[
- "20220128",
- "20220114",
- "20220318",
- "20220218",
- "20220204",
- "20220121",
- "20220325",
- "20220225",
- "20220311",
- "20220211"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU4OTA="
- },
- {
- "day":[
- "20220330",
- "20220331",
- "20220131",
- "20220201",
- "20220202",
- "20220203",
- "20220207",
- "20220208",
- "20220209",
- "20220210",
- "20220214",
- "20220215",
- "20220216",
- "20220217",
- "20220221",
- "20220222",
- "20220223",
- "20220224",
- "20220303",
- "20220307",
- "20220308",
- "20220309",
- "20220310",
- "20220110",
- "20220111",
- "20220112",
- "20220314",
- "20220113",
- "20220315",
- "20220316",
- "20220317",
- "20220117",
- "20220118",
- "20220119",
- "20220321",
- "20220120",
- "20220322",
- "20220323",
- "20220324",
- "20220124",
- "20220125",
- "20220126",
- "20220328",
- "20220127",
- "20220329"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU4ODk="
- },
- {
- "day":[
- "20220301",
- "20220302",
- "20220228"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU5MjI="
- },
- {
- "day":[
- "20220304",
- "20220107"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU5MjM="
- },
- {
- "day":[
- "20220301",
- "20220302",
- "20220228"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU5MjI="
- },
- {
- "day":[
- "20220304",
- "20220107"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU5MjM="
- },
- {
- "day":[
- "20220330",
- "20220331",
- "20220131",
- "20220201",
- "20220202",
- "20220203",
- "20220207",
- "20220208",
- "20220209",
- "20220210",
- "20220214",
- "20220215",
- "20220216",
- "20220217",
- "20220221",
- "20220222",
- "20220223",
- "20220224",
- "20220303",
- "20220307",
- "20220308",
- "20220309",
- "20220310",
- "20220110",
- "20220111",
- "20220112",
- "20220314",
- "20220113",
- "20220315",
- "20220316",
- "20220317",
- "20220117",
- "20220118",
- "20220119",
- "20220321",
- "20220120",
- "20220322",
- "20220323",
- "20220324",
- "20220124",
- "20220125",
- "20220126",
- "20220328",
- "20220127",
- "20220329"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU4ODk="
- },
- {
- "day":[
- "20220128",
- "20220114",
- "20220318",
- "20220218",
- "20220204",
- "20220121",
- "20220325",
- "20220225",
- "20220311",
- "20220211"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU4OTA="
- },
- {
- "day":[
- "20220301",
- "20220302",
- "20220228"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU5MjI="
- },
- {
- "day":[
- "20220304",
- "20220107"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU5MjM="
- },
- {
- "day":[
- "20220330",
- "20220331",
- "20220131",
- "20220201",
- "20220202",
- "20220203",
- "20220207",
- "20220208",
- "20220209",
- "20220210",
- "20220214",
- "20220215",
- "20220216",
- "20220217",
- "20220221",
- "20220222",
- "20220223",
- "20220224",
- "20220303",
- "20220307",
- "20220308",
- "20220309",
- "20220310",
- "20220110",
- "20220111",
- "20220112",
- "20220314",
- "20220113",
- "20220315",
- "20220316",
- "20220317",
- "20220117",
- "20220118",
- "20220119",
- "20220321",
- "20220120",
- "20220322",
- "20220323",
- "20220324",
- "20220124",
- "20220125",
- "20220126",
- "20220328",
- "20220127",
- "20220329"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU4ODk="
- },
- {
- "day":[
- "20220128",
- "20220114",
- "20220318",
- "20220218",
- "20220204",
- "20220121",
- "20220325",
- "20220225",
- "20220311",
- "20220211"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU4OTA="
- }
- ],
- "route":{
- "mode":"BUS",
- "color":null,
- "id":"Um91dGU6dGFtcGVyZTo2NkE2OTU3"
- },
- "id":"UGF0dGVybjp0YW1wZXJlOjY2QTY5NTc6MDowMQ=="
- }
- }
- },
- "id":"routeRoutes_RoutePageMap_Query"
- },
- {
- "payload":{
- "data":{
- "pattern":{
- "code":"tampere:66A6957:0:01",
- "directionId":0,
- "route":{
- "mode":"BUS",
- "color":null,
- "shortName":"66A",
- "id":"Um91dGU6dGFtcGVyZTo2NkE2OTU3"
- },
- "stops":[
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":true,
- "realtimeState":"UPDATED",
- "realtimeArrival":47400,
- "realtimeDeparture":47400,
- "serviceDay":1640649120,
- "scheduledDeparture":47400,
- "pickupType":"UPDATED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjEwMDAw"
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51000,
- "realtimeDeparture":51000,
- "serviceDay":1640649120,
- "scheduledDeparture":51000,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjEwMDAw"
- }
- }
- ],
- "gtfsId":"tampere:10000",
- "lat":61.26373,
- "lon":24.03426,
- "name":"Valkeakosken linja-autoasema",
- "desc":null,
- "code":"10000",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjEwMDAw"
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":47460,
- "realtimeDeparture":47460,
- "serviceDay":1640649120,
- "scheduledDeparture":47460,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NzU="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51060,
- "realtimeDeparture":51060,
- "serviceDay":1640649120,
- "scheduledDeparture":51060,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NzU="
- }
- }
- ],
- "gtfsId":"tampere:8975",
- "lat":61.26763,
- "lon":24.031,
- "name":"Valkeakosken kauppatori",
- "desc":null,
- "code":"8975",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5NzU="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":47610,
- "realtimeDeparture":47610,
- "serviceDay":1640649120,
- "scheduledDeparture":47610,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NzM="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51210,
- "realtimeDeparture":51210,
- "serviceDay":1640649120,
- "scheduledDeparture":51210,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NzM="
- }
- }
- ],
- "gtfsId":"tampere:8973",
- "lat":61.27072,
- "lon":24.02918,
- "name":"Valkeakosken aluesairaala",
- "desc":null,
- "code":"8973",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5NzM="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":47640,
- "realtimeDeparture":47640,
- "serviceDay":1640649120,
- "scheduledDeparture":47640,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NzE="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51240,
- "realtimeDeparture":51240,
- "serviceDay":1640649120,
- "scheduledDeparture":51240,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NzE="
- }
- }
- ],
- "gtfsId":"tampere:8971",
- "lat":61.27171,
- "lon":24.02851,
- "name":"Alppikatu",
- "desc":null,
- "code":"8971",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5NzE="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":47670,
- "realtimeDeparture":47670,
- "serviceDay":1640649120,
- "scheduledDeparture":47670,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5Njk="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51270,
- "realtimeDeparture":51270,
- "serviceDay":1640649120,
- "scheduledDeparture":51270,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5Njk="
- }
- }
- ],
- "gtfsId":"tampere:8969",
- "lat":61.27143,
- "lon":24.02329,
- "name":"Roopenkatu",
- "desc":null,
- "code":"8969",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5Njk="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":47700,
- "realtimeDeparture":47700,
- "serviceDay":1640649120,
- "scheduledDeparture":47700,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5Njc="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51300,
- "realtimeDeparture":51300,
- "serviceDay":1640649120,
- "scheduledDeparture":51300,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5Njc="
- }
- }
- ],
- "gtfsId":"tampere:8967",
- "lat":61.27156,
- "lon":24.0217,
- "name":"Tallikatu",
- "desc":null,
- "code":"8967",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5Njc="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":47730,
- "realtimeDeparture":47730,
- "serviceDay":1640649120,
- "scheduledDeparture":47730,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NjU="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51330,
- "realtimeDeparture":51330,
- "serviceDay":1640649120,
- "scheduledDeparture":51330,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NjU="
- }
- }
- ],
- "gtfsId":"tampere:8965",
- "lat":61.27378,
- "lon":24.0199,
- "name":"Kirjaskatu",
- "desc":null,
- "code":"8965",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5NjU="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":47760,
- "realtimeDeparture":47760,
- "serviceDay":1640649120,
- "scheduledDeparture":47760,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NjM="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51360,
- "realtimeDeparture":51360,
- "serviceDay":1640649120,
- "scheduledDeparture":51360,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NjM="
- }
- }
- ],
- "gtfsId":"tampere:8963",
- "lat":61.27636,
- "lon":24.01792,
- "name":"Antinkulma",
- "desc":null,
- "code":"8963",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5NjM="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":47790,
- "realtimeDeparture":47790,
- "serviceDay":1640649120,
- "scheduledDeparture":47790,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NjE="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51390,
- "realtimeDeparture":51390,
- "serviceDay":1640649120,
- "scheduledDeparture":51390,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NjE="
- }
- }
- ],
- "gtfsId":"tampere:8961",
- "lat":61.27774,
- "lon":24.01691,
- "name":"Kenraalintori P",
- "desc":null,
- "code":"8961",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5NjE="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":47820,
- "realtimeDeparture":47820,
- "serviceDay":1640649120,
- "scheduledDeparture":47820,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjkwODM="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51420,
- "realtimeDeparture":51420,
- "serviceDay":1640649120,
- "scheduledDeparture":51420,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjkwODM="
- }
- }
- ],
- "gtfsId":"tampere:9083",
- "lat":61.27999,
- "lon":24.01582,
- "name":"Roukonmäki",
- "desc":null,
- "code":"9083",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjkwODM="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":47835,
- "realtimeDeparture":47835,
- "serviceDay":1640649120,
- "scheduledDeparture":47835,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjkwODE="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51435,
- "realtimeDeparture":51435,
- "serviceDay":1640649120,
- "scheduledDeparture":51435,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjkwODE="
- }
- }
- ],
- "gtfsId":"tampere:9081",
- "lat":61.28182,
- "lon":24.01451,
- "name":"Roukontie 20",
- "desc":null,
- "code":"9081",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjkwODE="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":47850,
- "realtimeDeparture":47850,
- "serviceDay":1640649120,
- "scheduledDeparture":47850,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjkwNzk="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51450,
- "realtimeDeparture":51450,
- "serviceDay":1640649120,
- "scheduledDeparture":51450,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjkwNzk="
- }
- }
- ],
- "gtfsId":"tampere:9079",
- "lat":61.28368,
- "lon":24.01318,
- "name":"Roukon koulu",
- "desc":null,
- "code":"9079",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjkwNzk="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":47880,
- "realtimeDeparture":47880,
- "serviceDay":1640649120,
- "scheduledDeparture":47880,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg3MTY="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51480,
- "realtimeDeparture":51480,
- "serviceDay":1640649120,
- "scheduledDeparture":51480,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg3MTY="
- }
- }
- ],
- "gtfsId":"tampere:8716",
- "lat":61.28491,
- "lon":24.01032,
- "name":"Vääränkoivuntie",
- "desc":null,
- "code":"8716",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg3MTY="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":47910,
- "realtimeDeparture":47910,
- "serviceDay":1640649120,
- "scheduledDeparture":47910,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg3MTg="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51510,
- "realtimeDeparture":51510,
- "serviceDay":1640649120,
- "scheduledDeparture":51510,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg3MTg="
- }
- }
- ],
- "gtfsId":"tampere:8718",
- "lat":61.28498,
- "lon":24.00609,
- "name":"Kaakonojantie 56",
- "desc":null,
- "code":"8718",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg3MTg="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":47940,
- "realtimeDeparture":47940,
- "serviceDay":1640649120,
- "scheduledDeparture":47940,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg3MzY="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51540,
- "realtimeDeparture":51540,
- "serviceDay":1640649120,
- "scheduledDeparture":51540,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg3MzY="
- }
- }
- ],
- "gtfsId":"tampere:8736",
- "lat":61.28397,
- "lon":24.00098,
- "name":"Kaakonojantie 35",
- "desc":null,
- "code":"8736",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg3MzY="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48015,
- "realtimeDeparture":48015,
- "serviceDay":1640649120,
- "scheduledDeparture":48015,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5ODI="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51615,
- "realtimeDeparture":51615,
- "serviceDay":1640649120,
- "scheduledDeparture":51615,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5ODI="
- }
- }
- ],
- "gtfsId":"tampere:8982",
- "lat":61.28113,
- "lon":23.99429,
- "name":"VAAO",
- "desc":null,
- "code":"8982",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5ODI="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48045,
- "realtimeDeparture":48045,
- "serviceDay":1640649120,
- "scheduledDeparture":48045,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4MTU="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51645,
- "realtimeDeparture":51645,
- "serviceDay":1640649120,
- "scheduledDeparture":51645,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4MTU="
- }
- }
- ],
- "gtfsId":"tampere:9815",
- "lat":61.27998,
- "lon":23.99101,
- "name":"Koulukampus",
- "desc":null,
- "code":"9815",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4MTU="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48075,
- "realtimeDeparture":48075,
- "serviceDay":1640649120,
- "scheduledDeparture":48075,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4MTc="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51675,
- "realtimeDeparture":51675,
- "serviceDay":1640649120,
- "scheduledDeparture":51675,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4MTc="
- }
- }
- ],
- "gtfsId":"tampere:9817",
- "lat":61.27794,
- "lon":23.98531,
- "name":"Juusonranta L",
- "desc":null,
- "code":"9817",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4MTc="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48105,
- "realtimeDeparture":48105,
- "serviceDay":1640649120,
- "scheduledDeparture":48105,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4MTk="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51705,
- "realtimeDeparture":51705,
- "serviceDay":1640649120,
- "scheduledDeparture":51705,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4MTk="
- }
- }
- ],
- "gtfsId":"tampere:9819",
- "lat":61.27441,
- "lon":23.97542,
- "name":"Pispantalli L",
- "desc":null,
- "code":"9819",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4MTk="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48135,
- "realtimeDeparture":48135,
- "serviceDay":1640649120,
- "scheduledDeparture":48135,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NjE="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51735,
- "realtimeDeparture":51735,
- "serviceDay":1640649120,
- "scheduledDeparture":51735,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NjE="
- }
- }
- ],
- "gtfsId":"tampere:9861",
- "lat":61.27152,
- "lon":23.96893,
- "name":"Savilahti L",
- "desc":null,
- "code":"9861",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4NjE="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48165,
- "realtimeDeparture":48165,
- "serviceDay":1640649120,
- "scheduledDeparture":48165,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NjM="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51765,
- "realtimeDeparture":51765,
- "serviceDay":1640649120,
- "scheduledDeparture":51765,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NjM="
- }
- }
- ],
- "gtfsId":"tampere:9863",
- "lat":61.26652,
- "lon":23.95605,
- "name":"Eläinsairaala L",
- "desc":null,
- "code":"9863",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4NjM="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48195,
- "realtimeDeparture":48195,
- "serviceDay":1640649120,
- "scheduledDeparture":48195,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NjU="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51795,
- "realtimeDeparture":51795,
- "serviceDay":1640649120,
- "scheduledDeparture":51795,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NjU="
- }
- }
- ],
- "gtfsId":"tampere:9865",
- "lat":61.26407,
- "lon":23.9487,
- "name":"Yli-Nissi L",
- "desc":null,
- "code":"9865",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4NjU="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48225,
- "realtimeDeparture":48225,
- "serviceDay":1640649120,
- "scheduledDeparture":48225,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4Njc="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51825,
- "realtimeDeparture":51825,
- "serviceDay":1640649120,
- "scheduledDeparture":51825,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4Njc="
- }
- }
- ],
- "gtfsId":"tampere:9867",
- "lat":61.26185,
- "lon":23.94067,
- "name":"Kärpäntie L",
- "desc":null,
- "code":"9867",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4Njc="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48255,
- "realtimeDeparture":48255,
- "serviceDay":1640649120,
- "scheduledDeparture":48255,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4Njk="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51855,
- "realtimeDeparture":51855,
- "serviceDay":1640649120,
- "scheduledDeparture":51855,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4Njk="
- }
- }
- ],
- "gtfsId":"tampere:9869",
- "lat":61.26024,
- "lon":23.93499,
- "name":"Kärjenniemen koulu",
- "desc":null,
- "code":"9869",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4Njk="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48315,
- "realtimeDeparture":48315,
- "serviceDay":1640649120,
- "scheduledDeparture":48315,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NzE="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51915,
- "realtimeDeparture":51915,
- "serviceDay":1640649120,
- "scheduledDeparture":51915,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NzE="
- }
- }
- ],
- "gtfsId":"tampere:9871",
- "lat":61.25897,
- "lon":23.92637,
- "name":"Pastintie L",
- "desc":null,
- "code":"9871",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4NzE="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48345,
- "realtimeDeparture":48345,
- "serviceDay":1640649120,
- "scheduledDeparture":48345,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NzM="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":51945,
- "realtimeDeparture":51945,
- "serviceDay":1640649120,
- "scheduledDeparture":51945,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NzM="
- }
- }
- ],
- "gtfsId":"tampere:9873",
- "lat":61.25592,
- "lon":23.92361,
- "name":"Rantoon th P",
- "desc":null,
- "code":"9873",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4NzM="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48405,
- "realtimeDeparture":48405,
- "serviceDay":1640649120,
- "scheduledDeparture":48405,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MDk="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52005,
- "realtimeDeparture":52005,
- "serviceDay":1640649120,
- "scheduledDeparture":52005,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MDk="
- }
- }
- ],
- "gtfsId":"tampere:9409",
- "lat":61.26045,
- "lon":23.89711,
- "name":"Metsäkansantie 373",
- "desc":null,
- "code":"9409",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk0MDk="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48585,
- "realtimeDeparture":48585,
- "serviceDay":1640649120,
- "scheduledDeparture":48585,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MTE="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52185,
- "realtimeDeparture":52185,
- "serviceDay":1640649120,
- "scheduledDeparture":52185,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MTE="
- }
- }
- ],
- "gtfsId":"tampere:9411",
- "lat":61.24611,
- "lon":23.88634,
- "name":"Metsäkansantie 177",
- "desc":null,
- "code":"9411",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk0MTE="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48630,
- "realtimeDeparture":48630,
- "serviceDay":1640649120,
- "scheduledDeparture":48630,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MTM="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52200,
- "realtimeDeparture":52200,
- "serviceDay":1640649120,
- "scheduledDeparture":52200,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MTM="
- }
- }
- ],
- "gtfsId":"tampere:9413",
- "lat":61.24385,
- "lon":23.88246,
- "name":"Horkantie 2",
- "desc":null,
- "code":"9413",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk0MTM="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48645,
- "realtimeDeparture":48645,
- "serviceDay":1640649120,
- "scheduledDeparture":48645,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MTU="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52245,
- "realtimeDeparture":52245,
- "serviceDay":1640649120,
- "scheduledDeparture":52245,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MTU="
- }
- }
- ],
- "gtfsId":"tampere:9415",
- "lat":61.23271,
- "lon":23.87919,
- "name":"Metsäkansa",
- "desc":null,
- "code":"9415",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk0MTU="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48825,
- "realtimeDeparture":48825,
- "serviceDay":1640649120,
- "scheduledDeparture":48825,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MTc="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52425,
- "realtimeDeparture":52425,
- "serviceDay":1640649120,
- "scheduledDeparture":52425,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MTc="
- }
- }
- ],
- "gtfsId":"tampere:9417",
- "lat":61.22967,
- "lon":23.87766,
- "name":"Iola",
- "desc":null,
- "code":"9417",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk0MTc="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":48900,
- "realtimeDeparture":48900,
- "serviceDay":1640649120,
- "scheduledDeparture":48900,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MTk="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52500,
- "realtimeDeparture":52500,
- "serviceDay":1640649120,
- "scheduledDeparture":52500,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MTk="
- }
- }
- ],
- "gtfsId":"tampere:9419",
- "lat":61.2214,
- "lon":23.9561,
- "name":"Rantoo",
- "desc":null,
- "code":"9419",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk0MTk="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49245,
- "realtimeDeparture":49245,
- "serviceDay":1640649120,
- "scheduledDeparture":49245,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MjE="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":52845,
- "realtimeDeparture":52845,
- "serviceDay":1640649120,
- "scheduledDeparture":52845,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MjE="
- }
- }
- ],
- "gtfsId":"tampere:9421",
- "lat":61.23625,
- "lon":23.94609,
- "name":"Mustilahti",
- "desc":null,
- "code":"9421",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk0MjE="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49485,
- "realtimeDeparture":49485,
- "serviceDay":1640649120,
- "scheduledDeparture":49485,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MjM="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53085,
- "realtimeDeparture":53085,
- "serviceDay":1640649120,
- "scheduledDeparture":53085,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk0MjM="
- }
- }
- ],
- "gtfsId":"tampere:9423",
- "lat":61.25741,
- "lon":23.92852,
- "name":"Vääränmäentie 27",
- "desc":null,
- "code":"9423",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk0MjM="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49545,
- "realtimeDeparture":49545,
- "serviceDay":1640649120,
- "scheduledDeparture":49545,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4Njg="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53145,
- "realtimeDeparture":53145,
- "serviceDay":1640649120,
- "scheduledDeparture":53145,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4Njg="
- }
- }
- ],
- "gtfsId":"tampere:9868",
- "lat":61.26068,
- "lon":23.93663,
- "name":"Kärjenniemen koulu",
- "desc":null,
- "code":"9868",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4Njg="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49575,
- "realtimeDeparture":49575,
- "serviceDay":1640649120,
- "scheduledDeparture":49575,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NjY="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53175,
- "realtimeDeparture":53175,
- "serviceDay":1640649120,
- "scheduledDeparture":53175,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NjY="
- }
- }
- ],
- "gtfsId":"tampere:9866",
- "lat":61.26214,
- "lon":23.94238,
- "name":"Kärpäntie I",
- "desc":null,
- "code":"9866",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4NjY="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49605,
- "realtimeDeparture":49605,
- "serviceDay":1640649120,
- "scheduledDeparture":49605,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NjQ="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53205,
- "realtimeDeparture":53205,
- "serviceDay":1640649120,
- "scheduledDeparture":53205,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NjQ="
- }
- }
- ],
- "gtfsId":"tampere:9864",
- "lat":61.26372,
- "lon":23.94812,
- "name":"Yli-Nissi",
- "desc":null,
- "code":"9864",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4NjQ="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49635,
- "realtimeDeparture":49635,
- "serviceDay":1640649120,
- "scheduledDeparture":49635,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NjI="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53235,
- "realtimeDeparture":53235,
- "serviceDay":1640649120,
- "scheduledDeparture":53235,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NjI="
- }
- }
- ],
- "gtfsId":"tampere:9862",
- "lat":61.26581,
- "lon":23.95467,
- "name":"Eläinsairaala I",
- "desc":null,
- "code":"9862",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4NjI="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49665,
- "realtimeDeparture":49665,
- "serviceDay":1640649120,
- "scheduledDeparture":49665,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NjA="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53265,
- "realtimeDeparture":53265,
- "serviceDay":1640649120,
- "scheduledDeparture":53265,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4NjA="
- }
- }
- ],
- "gtfsId":"tampere:9860",
- "lat":61.27026,
- "lon":23.96711,
- "name":"Savilahti I",
- "desc":null,
- "code":"9860",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4NjA="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49695,
- "realtimeDeparture":49695,
- "serviceDay":1640649120,
- "scheduledDeparture":49695,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4MjA="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53295,
- "realtimeDeparture":53295,
- "serviceDay":1640649120,
- "scheduledDeparture":53295,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4MjA="
- }
- }
- ],
- "gtfsId":"tampere:9820",
- "lat":61.27479,
- "lon":23.97689,
- "name":"Pispantalli I",
- "desc":null,
- "code":"9820",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4MjA="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49755,
- "realtimeDeparture":49755,
- "serviceDay":1640649120,
- "scheduledDeparture":49755,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4MTg="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53355,
- "realtimeDeparture":53355,
- "serviceDay":1640649120,
- "scheduledDeparture":53355,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4MTg="
- }
- }
- ],
- "gtfsId":"tampere:9818",
- "lat":61.27853,
- "lon":23.98762,
- "name":"Juusonranta I",
- "desc":null,
- "code":"9818",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4MTg="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49785,
- "realtimeDeparture":49785,
- "serviceDay":1640649120,
- "scheduledDeparture":49785,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4MTY="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53385,
- "realtimeDeparture":53385,
- "serviceDay":1640649120,
- "scheduledDeparture":53385,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjk4MTY="
- }
- }
- ],
- "gtfsId":"tampere:9816",
- "lat":61.27987,
- "lon":23.99118,
- "name":"Tietotie I",
- "desc":null,
- "code":"9816",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjk4MTY="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49815,
- "realtimeDeparture":49815,
- "serviceDay":1640649120,
- "scheduledDeparture":49815,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5ODM="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53415,
- "realtimeDeparture":53415,
- "serviceDay":1640649120,
- "scheduledDeparture":53415,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5ODM="
- }
- }
- ],
- "gtfsId":"tampere:8983",
- "lat":61.28064,
- "lon":23.99374,
- "name":"Koulukampus",
- "desc":null,
- "code":"8983",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5ODM="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49875,
- "realtimeDeparture":49875,
- "serviceDay":1640649120,
- "scheduledDeparture":49875,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg3Mzk="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53475,
- "realtimeDeparture":53475,
- "serviceDay":1640649120,
- "scheduledDeparture":53475,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg3Mzk="
- }
- }
- ],
- "gtfsId":"tampere:8739",
- "lat":61.28322,
- "lon":23.9999,
- "name":"Mäntyläntie",
- "desc":null,
- "code":"8739",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg3Mzk="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49905,
- "realtimeDeparture":49905,
- "serviceDay":1640649120,
- "scheduledDeparture":49905,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg3Mzc="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53505,
- "realtimeDeparture":53505,
- "serviceDay":1640649120,
- "scheduledDeparture":53505,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg3Mzc="
- }
- }
- ],
- "gtfsId":"tampere:8737",
- "lat":61.28395,
- "lon":24.0016,
- "name":"Kaakonojantie 34",
- "desc":null,
- "code":"8737",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg3Mzc="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49935,
- "realtimeDeparture":49935,
- "serviceDay":1640649120,
- "scheduledDeparture":49935,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg3MTk="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53535,
- "realtimeDeparture":53535,
- "serviceDay":1640649120,
- "scheduledDeparture":53535,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg3MTk="
- }
- }
- ],
- "gtfsId":"tampere:8719",
- "lat":61.28489,
- "lon":24.00623,
- "name":"Kaakonojantie 56",
- "desc":null,
- "code":"8719",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg3MTk="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49965,
- "realtimeDeparture":49965,
- "serviceDay":1640649120,
- "scheduledDeparture":49965,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg3MTM="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53565,
- "realtimeDeparture":53565,
- "serviceDay":1640649120,
- "scheduledDeparture":53565,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg3MTM="
- }
- }
- ],
- "gtfsId":"tampere:8713",
- "lat":61.28486,
- "lon":24.00976,
- "name":"Vääränkoivuntie",
- "desc":null,
- "code":"8713",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg3MTM="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":49995,
- "realtimeDeparture":49995,
- "serviceDay":1640649120,
- "scheduledDeparture":49995,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjkwNzg="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53595,
- "realtimeDeparture":53595,
- "serviceDay":1640649120,
- "scheduledDeparture":53595,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjkwNzg="
- }
- }
- ],
- "gtfsId":"tampere:9078",
- "lat":61.28348,
- "lon":24.01321,
- "name":"Roukon koulu",
- "desc":null,
- "code":"9078",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjkwNzg="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50025,
- "realtimeDeparture":50025,
- "serviceDay":1640649120,
- "scheduledDeparture":50025,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjkwODA="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53625,
- "realtimeDeparture":53625,
- "serviceDay":1640649120,
- "scheduledDeparture":53625,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjkwODA="
- }
- }
- ],
- "gtfsId":"tampere:9080",
- "lat":61.28194,
- "lon":24.01429,
- "name":"Roukontie 25",
- "desc":null,
- "code":"9080",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjkwODA="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50085,
- "realtimeDeparture":50085,
- "serviceDay":1640649120,
- "scheduledDeparture":50085,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjkwODI="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53685,
- "realtimeDeparture":53685,
- "serviceDay":1640649120,
- "scheduledDeparture":53685,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjkwODI="
- }
- }
- ],
- "gtfsId":"tampere:9082",
- "lat":61.2799,
- "lon":24.01572,
- "name":"Roukonmäki",
- "desc":null,
- "code":"9082",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjkwODI="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50145,
- "realtimeDeparture":50145,
- "serviceDay":1640649120,
- "scheduledDeparture":50145,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NjI="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53745,
- "realtimeDeparture":53745,
- "serviceDay":1640649120,
- "scheduledDeparture":53745,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NjI="
- }
- }
- ],
- "gtfsId":"tampere:8962",
- "lat":61.27776,
- "lon":24.01639,
- "name":"Kenraalintori E",
- "desc":null,
- "code":"8962",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5NjI="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50175,
- "realtimeDeparture":50175,
- "serviceDay":1640649120,
- "scheduledDeparture":50175,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NjQ="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53775,
- "realtimeDeparture":53775,
- "serviceDay":1640649120,
- "scheduledDeparture":53775,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NjQ="
- }
- }
- ],
- "gtfsId":"tampere:8964",
- "lat":61.27577,
- "lon":24.01783,
- "name":"Antinkulma",
- "desc":null,
- "code":"8964",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5NjQ="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50235,
- "realtimeDeparture":50235,
- "serviceDay":1640649120,
- "scheduledDeparture":50235,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NjY="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53835,
- "realtimeDeparture":53835,
- "serviceDay":1640649120,
- "scheduledDeparture":53835,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NjY="
- }
- }
- ],
- "gtfsId":"tampere:8966",
- "lat":61.27358,
- "lon":24.01979,
- "name":"Kirjaskatu",
- "desc":null,
- "code":"8966",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5NjY="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50295,
- "realtimeDeparture":50295,
- "serviceDay":1640649120,
- "scheduledDeparture":50295,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5Njg="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53895,
- "realtimeDeparture":53895,
- "serviceDay":1640649120,
- "scheduledDeparture":53895,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5Njg="
- }
- }
- ],
- "gtfsId":"tampere:8968",
- "lat":61.27192,
- "lon":24.02094,
- "name":"Tallikatu",
- "desc":null,
- "code":"8968",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5Njg="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50355,
- "realtimeDeparture":50355,
- "serviceDay":1640649120,
- "scheduledDeparture":50355,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NzA="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":53955,
- "realtimeDeparture":53955,
- "serviceDay":1640649120,
- "scheduledDeparture":53955,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NzA="
- }
- }
- ],
- "gtfsId":"tampere:8970",
- "lat":61.27136,
- "lon":24.02349,
- "name":"Roopenkatu",
- "desc":null,
- "code":"8970",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5NzA="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50445,
- "realtimeDeparture":50445,
- "serviceDay":1640649120,
- "scheduledDeparture":50445,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NzQ="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":54045,
- "realtimeDeparture":54045,
- "serviceDay":1640649120,
- "scheduledDeparture":54045,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5NzQ="
- }
- }
- ],
- "gtfsId":"tampere:8974",
- "lat":61.27018,
- "lon":24.02933,
- "name":"Aluesairaala",
- "desc":null,
- "code":"8974",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5NzQ="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50520,
- "realtimeDeparture":50520,
- "serviceDay":1640649120,
- "scheduledDeparture":50520,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5Nzg="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":54120,
- "realtimeDeparture":54120,
- "serviceDay":1640649120,
- "scheduledDeparture":54120,
- "pickupType":"SCHEDULED",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5Nzg="
- }
- }
- ],
- "gtfsId":"tampere:8978",
- "lat":61.2667,
- "lon":24.03132,
- "name":"Valkeakoski Kauppatori",
- "desc":null,
- "code":"8978",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5Nzg="
- },
- {
- "alerts":[
-
- ],
- "stopTimesForPattern":[
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":50640,
- "realtimeDeparture":50640,
- "serviceDay":1640649120,
- "scheduledDeparture":50640,
- "pickupType":"NONE",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5OTc="
- }
- },
- {
- "realtime":false,
- "realtimeState":"SCHEDULED",
- "realtimeArrival":54240,
- "realtimeDeparture":54240,
- "serviceDay":1640649120,
- "scheduledDeparture":54240,
- "pickupType":"NONE",
- "stop":{
- "platformCode":null,
- "id":"U3RvcDp0YW1wZXJlOjg5OTc="
- }
- }
- ],
- "gtfsId":"tampere:8997",
- "lat":61.26416,
- "lon":24.03355,
- "name":"Valkeakosken linja-autoasema",
- "desc":null,
- "code":"8997",
- "platformCode":null,
- "zoneId":"D",
- "id":"U3RvcDp0YW1wZXJlOjg5OTc="
- }
- ],
- "id":"UGF0dGVybjp0YW1wZXJlOjY2QTY5NTc6MDowMQ=="
- },
- "route":{
- "gtfsId":"tampere:66A6957",
- "color":null,
- "shortName":"66A",
- "longName":"Valkeakoski - Pispantalli - Metsäkansa - Rantoo",
- "mode":"BUS",
- "type":3,
- "agency":{
- "name":"Nysse/Vekka Group Oy",
- "url":"http://joukkoliikenne.tampere.fi/",
- "fareUrl":null,
- "id":"QWdlbmN5OnRhbXBlcmU6Njk1Nw==",
- "phone":"+358356564700"
- },
- "patterns":[
- {
- "code":"tampere:66A6957:0:01",
- "directionId":0,
- "headsign":"Metsäkansa",
- "stops":[
- {
- "name":"Valkeakosken linja-autoasema",
- "id":"U3RvcDp0YW1wZXJlOjEwMDAw",
- "gtfsId":"tampere:10000",
- "code":"10000",
- "alerts":[
-
- ]
- },
- {
- "name":"Valkeakosken kauppatori",
- "id":"U3RvcDp0YW1wZXJlOjg5NzU=",
- "gtfsId":"tampere:8975",
- "code":"8975",
- "alerts":[
-
- ]
- },
- {
- "name":"Valkeakosken aluesairaala",
- "id":"U3RvcDp0YW1wZXJlOjg5NzM=",
- "gtfsId":"tampere:8973",
- "code":"8973",
- "alerts":[
-
- ]
- },
- {
- "name":"Alppikatu",
- "id":"U3RvcDp0YW1wZXJlOjg5NzE=",
- "gtfsId":"tampere:8971",
- "code":"8971",
- "alerts":[
-
- ]
- },
- {
- "name":"Roopenkatu",
- "id":"U3RvcDp0YW1wZXJlOjg5Njk=",
- "gtfsId":"tampere:8969",
- "code":"8969",
- "alerts":[
-
- ]
- },
- {
- "name":"Tallikatu",
- "id":"U3RvcDp0YW1wZXJlOjg5Njc=",
- "gtfsId":"tampere:8967",
- "code":"8967",
- "alerts":[
-
- ]
- },
- {
- "name":"Kirjaskatu",
- "id":"U3RvcDp0YW1wZXJlOjg5NjU=",
- "gtfsId":"tampere:8965",
- "code":"8965",
- "alerts":[
-
- ]
- },
- {
- "name":"Antinkulma",
- "id":"U3RvcDp0YW1wZXJlOjg5NjM=",
- "gtfsId":"tampere:8963",
- "code":"8963",
- "alerts":[
-
- ]
- },
- {
- "name":"Kenraalintori P",
- "id":"U3RvcDp0YW1wZXJlOjg5NjE=",
- "gtfsId":"tampere:8961",
- "code":"8961",
- "alerts":[
-
- ]
- },
- {
- "name":"Roukonmäki",
- "id":"U3RvcDp0YW1wZXJlOjkwODM=",
- "gtfsId":"tampere:9083",
- "code":"9083",
- "alerts":[
-
- ]
- },
- {
- "name":"Roukontie 20",
- "id":"U3RvcDp0YW1wZXJlOjkwODE=",
- "gtfsId":"tampere:9081",
- "code":"9081",
- "alerts":[
-
- ]
- },
- {
- "name":"Roukon koulu",
- "id":"U3RvcDp0YW1wZXJlOjkwNzk=",
- "gtfsId":"tampere:9079",
- "code":"9079",
- "alerts":[
-
- ]
- },
- {
- "name":"Vääränkoivuntie",
- "id":"U3RvcDp0YW1wZXJlOjg3MTY=",
- "gtfsId":"tampere:8716",
- "code":"8716",
- "alerts":[
-
- ]
- },
- {
- "name":"Kaakonojantie 56",
- "id":"U3RvcDp0YW1wZXJlOjg3MTg=",
- "gtfsId":"tampere:8718",
- "code":"8718",
- "alerts":[
-
- ]
- },
- {
- "name":"Kaakonojantie 35",
- "id":"U3RvcDp0YW1wZXJlOjg3MzY=",
- "gtfsId":"tampere:8736",
- "code":"8736",
- "alerts":[
-
- ]
- },
- {
- "name":"VAAO",
- "id":"U3RvcDp0YW1wZXJlOjg5ODI=",
- "gtfsId":"tampere:8982",
- "code":"8982",
- "alerts":[
-
- ]
- },
- {
- "name":"Koulukampus",
- "id":"U3RvcDp0YW1wZXJlOjk4MTU=",
- "gtfsId":"tampere:9815",
- "code":"9815",
- "alerts":[
-
- ]
- },
- {
- "name":"Juusonranta L",
- "id":"U3RvcDp0YW1wZXJlOjk4MTc=",
- "gtfsId":"tampere:9817",
- "code":"9817",
- "alerts":[
-
- ]
- },
- {
- "name":"Pispantalli L",
- "id":"U3RvcDp0YW1wZXJlOjk4MTk=",
- "gtfsId":"tampere:9819",
- "code":"9819",
- "alerts":[
-
- ]
- },
- {
- "name":"Savilahti L",
- "id":"U3RvcDp0YW1wZXJlOjk4NjE=",
- "gtfsId":"tampere:9861",
- "code":"9861",
- "alerts":[
-
- ]
- },
- {
- "name":"Eläinsairaala L",
- "id":"U3RvcDp0YW1wZXJlOjk4NjM=",
- "gtfsId":"tampere:9863",
- "code":"9863",
- "alerts":[
-
- ]
- },
- {
- "name":"Yli-Nissi L",
- "id":"U3RvcDp0YW1wZXJlOjk4NjU=",
- "gtfsId":"tampere:9865",
- "code":"9865",
- "alerts":[
-
- ]
- },
- {
- "name":"Kärpäntie L",
- "id":"U3RvcDp0YW1wZXJlOjk4Njc=",
- "gtfsId":"tampere:9867",
- "code":"9867",
- "alerts":[
-
- ]
- },
- {
- "name":"Kärjenniemen koulu",
- "id":"U3RvcDp0YW1wZXJlOjk4Njk=",
- "gtfsId":"tampere:9869",
- "code":"9869",
- "alerts":[
-
- ]
- },
- {
- "name":"Pastintie L",
- "id":"U3RvcDp0YW1wZXJlOjk4NzE=",
- "gtfsId":"tampere:9871",
- "code":"9871",
- "alerts":[
-
- ]
- },
- {
- "name":"Rantoon th P",
- "id":"U3RvcDp0YW1wZXJlOjk4NzM=",
- "gtfsId":"tampere:9873",
- "code":"9873",
- "alerts":[
-
- ]
- },
- {
- "name":"Metsäkansantie 373",
- "id":"U3RvcDp0YW1wZXJlOjk0MDk=",
- "gtfsId":"tampere:9409",
- "code":"9409",
- "alerts":[
-
- ]
- },
- {
- "name":"Metsäkansantie 177",
- "id":"U3RvcDp0YW1wZXJlOjk0MTE=",
- "gtfsId":"tampere:9411",
- "code":"9411",
- "alerts":[
-
- ]
- },
- {
- "name":"Horkantie 2",
- "id":"U3RvcDp0YW1wZXJlOjk0MTM=",
- "gtfsId":"tampere:9413",
- "code":"9413",
- "alerts":[
-
- ]
- },
- {
- "name":"Metsäkansa",
- "id":"U3RvcDp0YW1wZXJlOjk0MTU=",
- "gtfsId":"tampere:9415",
- "code":"9415",
- "alerts":[
-
- ]
- },
- {
- "name":"Iola",
- "id":"U3RvcDp0YW1wZXJlOjk0MTc=",
- "gtfsId":"tampere:9417",
- "code":"9417",
- "alerts":[
-
- ]
- },
- {
- "name":"Rantoo",
- "id":"U3RvcDp0YW1wZXJlOjk0MTk=",
- "gtfsId":"tampere:9419",
- "code":"9419",
- "alerts":[
-
- ]
- },
- {
- "name":"Mustilahti",
- "id":"U3RvcDp0YW1wZXJlOjk0MjE=",
- "gtfsId":"tampere:9421",
- "code":"9421",
- "alerts":[
-
- ]
- },
- {
- "name":"Vääränmäentie 27",
- "id":"U3RvcDp0YW1wZXJlOjk0MjM=",
- "gtfsId":"tampere:9423",
- "code":"9423",
- "alerts":[
-
- ]
- },
- {
- "name":"Kärjenniemen koulu",
- "id":"U3RvcDp0YW1wZXJlOjk4Njg=",
- "gtfsId":"tampere:9868",
- "code":"9868",
- "alerts":[
-
- ]
- },
- {
- "name":"Kärpäntie I",
- "id":"U3RvcDp0YW1wZXJlOjk4NjY=",
- "gtfsId":"tampere:9866",
- "code":"9866",
- "alerts":[
-
- ]
- },
- {
- "name":"Yli-Nissi",
- "id":"U3RvcDp0YW1wZXJlOjk4NjQ=",
- "gtfsId":"tampere:9864",
- "code":"9864",
- "alerts":[
-
- ]
- },
- {
- "name":"Eläinsairaala I",
- "id":"U3RvcDp0YW1wZXJlOjk4NjI=",
- "gtfsId":"tampere:9862",
- "code":"9862",
- "alerts":[
-
- ]
- },
- {
- "name":"Savilahti I",
- "id":"U3RvcDp0YW1wZXJlOjk4NjA=",
- "gtfsId":"tampere:9860",
- "code":"9860",
- "alerts":[
-
- ]
- },
- {
- "name":"Pispantalli I",
- "id":"U3RvcDp0YW1wZXJlOjk4MjA=",
- "gtfsId":"tampere:9820",
- "code":"9820",
- "alerts":[
-
- ]
- },
- {
- "name":"Juusonranta I",
- "id":"U3RvcDp0YW1wZXJlOjk4MTg=",
- "gtfsId":"tampere:9818",
- "code":"9818",
- "alerts":[
-
- ]
- },
- {
- "name":"Tietotie I",
- "id":"U3RvcDp0YW1wZXJlOjk4MTY=",
- "gtfsId":"tampere:9816",
- "code":"9816",
- "alerts":[
-
- ]
- },
- {
- "name":"Koulukampus",
- "id":"U3RvcDp0YW1wZXJlOjg5ODM=",
- "gtfsId":"tampere:8983",
- "code":"8983",
- "alerts":[
-
- ]
- },
- {
- "name":"Mäntyläntie",
- "id":"U3RvcDp0YW1wZXJlOjg3Mzk=",
- "gtfsId":"tampere:8739",
- "code":"8739",
- "alerts":[
-
- ]
- },
- {
- "name":"Kaakonojantie 34",
- "id":"U3RvcDp0YW1wZXJlOjg3Mzc=",
- "gtfsId":"tampere:8737",
- "code":"8737",
- "alerts":[
-
- ]
- },
- {
- "name":"Kaakonojantie 56",
- "id":"U3RvcDp0YW1wZXJlOjg3MTk=",
- "gtfsId":"tampere:8719",
- "code":"8719",
- "alerts":[
-
- ]
- },
- {
- "name":"Vääränkoivuntie",
- "id":"U3RvcDp0YW1wZXJlOjg3MTM=",
- "gtfsId":"tampere:8713",
- "code":"8713",
- "alerts":[
-
- ]
- },
- {
- "name":"Roukon koulu",
- "id":"U3RvcDp0YW1wZXJlOjkwNzg=",
- "gtfsId":"tampere:9078",
- "code":"9078",
- "alerts":[
-
- ]
- },
- {
- "name":"Roukontie 25",
- "id":"U3RvcDp0YW1wZXJlOjkwODA=",
- "gtfsId":"tampere:9080",
- "code":"9080",
- "alerts":[
-
- ]
- },
- {
- "name":"Roukonmäki",
- "id":"U3RvcDp0YW1wZXJlOjkwODI=",
- "gtfsId":"tampere:9082",
- "code":"9082",
- "alerts":[
-
- ]
- },
- {
- "name":"Kenraalintori E",
- "id":"U3RvcDp0YW1wZXJlOjg5NjI=",
- "gtfsId":"tampere:8962",
- "code":"8962",
- "alerts":[
-
- ]
- },
- {
- "name":"Antinkulma",
- "id":"U3RvcDp0YW1wZXJlOjg5NjQ=",
- "gtfsId":"tampere:8964",
- "code":"8964",
- "alerts":[
-
- ]
- },
- {
- "name":"Kirjaskatu",
- "id":"U3RvcDp0YW1wZXJlOjg5NjY=",
- "gtfsId":"tampere:8966",
- "code":"8966",
- "alerts":[
-
- ]
- },
- {
- "name":"Tallikatu",
- "id":"U3RvcDp0YW1wZXJlOjg5Njg=",
- "gtfsId":"tampere:8968",
- "code":"8968",
- "alerts":[
-
- ]
- },
- {
- "name":"Roopenkatu",
- "id":"U3RvcDp0YW1wZXJlOjg5NzA=",
- "gtfsId":"tampere:8970",
- "code":"8970",
- "alerts":[
-
- ]
- },
- {
- "name":"Aluesairaala",
- "id":"U3RvcDp0YW1wZXJlOjg5NzQ=",
- "gtfsId":"tampere:8974",
- "code":"8974",
- "alerts":[
-
- ]
- },
- {
- "name":"Valkeakoski Kauppatori",
- "id":"U3RvcDp0YW1wZXJlOjg5Nzg=",
- "gtfsId":"tampere:8978",
- "code":"8978",
- "alerts":[
-
- ]
- },
- {
- "name":"Valkeakosken linja-autoasema",
- "id":"U3RvcDp0YW1wZXJlOjg5OTc=",
- "gtfsId":"tampere:8997",
- "code":"8997",
- "alerts":[
-
- ]
- }
- ],
- "activeDates":[
- {
- "serviceId":"tampere:TAL_MATO_K66_2022",
- "day":[
- "20220301",
- "20220302",
- "20220228"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU5MjI="
- },
- {
- "serviceId":"tampere:TAL_PE_K66_2022",
- "day":[
- "20220304",
- "20220107"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU5MjM="
- },
- {
- "serviceId":"tampere:TAL_KPMATO_K66_2022",
- "day":[
- "20220330",
- "20220331",
- "20220131",
- "20220201",
- "20220202",
- "20220203",
- "20220207",
- "20220208",
- "20220209",
- "20220210",
- "20220214",
- "20220215",
- "20220216",
- "20220217",
- "20220221",
- "20220222",
- "20220223",
- "20220224",
- "20220303",
- "20220307",
- "20220308",
- "20220309",
- "20220310",
- "20220110",
- "20220111",
- "20220112",
- "20220314",
- "20220113",
- "20220315",
- "20220316",
- "20220317",
- "20220117",
- "20220118",
- "20220119",
- "20220321",
- "20220120",
- "20220322",
- "20220323",
- "20220324",
- "20220124",
- "20220125",
- "20220126",
- "20220328",
- "20220127",
- "20220329"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU4ODk="
- },
- {
- "serviceId":"tampere:TAL_KPPE_K66_2022",
- "day":[
- "20220128",
- "20220114",
- "20220318",
- "20220218",
- "20220204",
- "20220121",
- "20220325",
- "20220225",
- "20220311",
- "20220211"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU4OTA="
- },
- {
- "serviceId":"tampere:TAL_KPPE_K66_2022",
- "day":[
- "20220128",
- "20220114",
- "20220318",
- "20220218",
- "20220204",
- "20220121",
- "20220325",
- "20220225",
- "20220311",
- "20220211"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU4OTA="
- },
- {
- "serviceId":"tampere:TAL_KPMATO_K66_2022",
- "day":[
- "20220330",
- "20220331",
- "20220131",
- "20220201",
- "20220202",
- "20220203",
- "20220207",
- "20220208",
- "20220209",
- "20220210",
- "20220214",
- "20220215",
- "20220216",
- "20220217",
- "20220221",
- "20220222",
- "20220223",
- "20220224",
- "20220303",
- "20220307",
- "20220308",
- "20220309",
- "20220310",
- "20220110",
- "20220111",
- "20220112",
- "20220314",
- "20220113",
- "20220315",
- "20220316",
- "20220317",
- "20220117",
- "20220118",
- "20220119",
- "20220321",
- "20220120",
- "20220322",
- "20220323",
- "20220324",
- "20220124",
- "20220125",
- "20220126",
- "20220328",
- "20220127",
- "20220329"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU4ODk="
- },
- {
- "serviceId":"tampere:TAL_MATO_K66_2022",
- "day":[
- "20220301",
- "20220302",
- "20220228"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU5MjI="
- },
- {
- "serviceId":"tampere:TAL_PE_K66_2022",
- "day":[
- "20220304",
- "20220107"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU5MjM="
- },
- {
- "serviceId":"tampere:TAL_MATO_K66_2022",
- "day":[
- "20220301",
- "20220302",
- "20220228"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU5MjI="
- },
- {
- "serviceId":"tampere:TAL_PE_K66_2022",
- "day":[
- "20220304",
- "20220107"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU5MjM="
- },
- {
- "serviceId":"tampere:TAL_KPMATO_K66_2022",
- "day":[
- "20220330",
- "20220331",
- "20220131",
- "20220201",
- "20220202",
- "20220203",
- "20220207",
- "20220208",
- "20220209",
- "20220210",
- "20220214",
- "20220215",
- "20220216",
- "20220217",
- "20220221",
- "20220222",
- "20220223",
- "20220224",
- "20220303",
- "20220307",
- "20220308",
- "20220309",
- "20220310",
- "20220110",
- "20220111",
- "20220112",
- "20220314",
- "20220113",
- "20220315",
- "20220316",
- "20220317",
- "20220117",
- "20220118",
- "20220119",
- "20220321",
- "20220120",
- "20220322",
- "20220323",
- "20220324",
- "20220124",
- "20220125",
- "20220126",
- "20220328",
- "20220127",
- "20220329"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU4ODk="
- },
- {
- "serviceId":"tampere:TAL_KPPE_K66_2022",
- "day":[
- "20220128",
- "20220114",
- "20220318",
- "20220218",
- "20220204",
- "20220121",
- "20220325",
- "20220225",
- "20220311",
- "20220211"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU4OTA="
- },
- {
- "serviceId":"tampere:TAL_MATO_K66_2022",
- "day":[
- "20220301",
- "20220302",
- "20220228"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU5MjI="
- },
- {
- "serviceId":"tampere:TAL_PE_K66_2022",
- "day":[
- "20220304",
- "20220107"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU5MjM="
- },
- {
- "serviceId":"tampere:TAL_KPMATO_K66_2022",
- "day":[
- "20220330",
- "20220331",
- "20220131",
- "20220201",
- "20220202",
- "20220203",
- "20220207",
- "20220208",
- "20220209",
- "20220210",
- "20220214",
- "20220215",
- "20220216",
- "20220217",
- "20220221",
- "20220222",
- "20220223",
- "20220224",
- "20220303",
- "20220307",
- "20220308",
- "20220309",
- "20220310",
- "20220110",
- "20220111",
- "20220112",
- "20220314",
- "20220113",
- "20220315",
- "20220316",
- "20220317",
- "20220117",
- "20220118",
- "20220119",
- "20220321",
- "20220120",
- "20220322",
- "20220323",
- "20220324",
- "20220124",
- "20220125",
- "20220126",
- "20220328",
- "20220127",
- "20220329"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU4ODk="
- },
- {
- "serviceId":"tampere:TAL_KPPE_K66_2022",
- "day":[
- "20220128",
- "20220114",
- "20220318",
- "20220218",
- "20220204",
- "20220121",
- "20220325",
- "20220225",
- "20220311",
- "20220211"
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU4OTA="
- }
- ],
- "tripsForDate":[
- {
- "stoptimes":[
- {
- "scheduledDeparture":54600,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54660,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54810,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54840,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54870,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54900,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54930,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54960,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54990,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55020,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55035,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55050,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55080,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55110,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55140,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55215,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55245,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55275,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55305,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55335,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55365,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55395,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55425,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55455,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55515,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55545,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55605,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55785,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55800,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":55845,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56025,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56100,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56445,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56685,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56745,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56775,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56805,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56835,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56865,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56895,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56955,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":56985,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57015,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57075,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57105,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57135,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57165,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57195,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57225,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57285,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57345,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57375,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57435,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57495,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57555,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57645,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57720,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":57840,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU4ODk="
- },
- {
- "stoptimes":[
- {
- "scheduledDeparture":47400,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47460,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47610,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47640,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47670,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47700,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47730,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47760,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47790,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47820,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47835,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47850,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47880,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47910,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":47940,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48015,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48045,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48075,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48105,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48135,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48165,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48195,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48225,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48255,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48315,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48345,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48405,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48585,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48630,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48645,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48825,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":48900,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49245,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49485,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49545,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49575,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49605,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49635,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49665,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49695,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49755,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49785,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49815,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49875,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49905,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49935,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49965,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":49995,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50025,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50085,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50145,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50175,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50235,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50295,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50355,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50445,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50520,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":50640,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU4ODk="
- },
- {
- "stoptimes":[
- {
- "scheduledDeparture":51000,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51060,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51210,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51240,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51270,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51300,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51330,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51360,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51390,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51420,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51435,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51450,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51480,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51510,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51540,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51615,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51645,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51675,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51705,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51735,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51765,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51795,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51825,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51855,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51915,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":51945,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":52005,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":52185,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":52200,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":52245,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":52425,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":52500,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":52845,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53085,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53145,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53175,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53205,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53235,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53265,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53295,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53355,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53385,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53415,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53475,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53505,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53535,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53565,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53595,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53625,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53685,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53745,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53775,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53835,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53895,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":53955,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54045,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54120,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":54240,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU4ODk="
- },
- {
- "stoptimes":[
- {
- "scheduledDeparture":31500,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31560,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31710,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31740,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31770,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31800,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31830,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31860,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31890,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31920,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31935,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31950,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":31980,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32010,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32040,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32115,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32145,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32175,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32205,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32235,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32265,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32295,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32325,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32355,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32415,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32445,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32505,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32685,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":32745,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33000,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33120,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33300,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33345,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33585,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33645,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33675,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33705,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33735,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33765,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33795,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33855,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33885,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33915,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":33975,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34005,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34035,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34065,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34095,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34125,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34185,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34245,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34275,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34335,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34395,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34455,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34545,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34620,
- "serviceDay":1641852000
- },
- {
- "scheduledDeparture":34740,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU4ODk="
- }
- ],
- "id":"UGF0dGVybjp0YW1wZXJlOjY2QTY5NTc6MDowMQ==",
- "trips":[
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54600,
- "scheduledDeparture":54600,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54660,
- "scheduledDeparture":54660,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54810,
- "scheduledDeparture":54810,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54840,
- "scheduledDeparture":54840,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54870,
- "scheduledDeparture":54870,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54900,
- "scheduledDeparture":54900,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54930,
- "scheduledDeparture":54930,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54960,
- "scheduledDeparture":54960,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54990,
- "scheduledDeparture":54990,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55020,
- "scheduledDeparture":55020,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55035,
- "scheduledDeparture":55035,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55050,
- "scheduledDeparture":55050,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55080,
- "scheduledDeparture":55080,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55110,
- "scheduledDeparture":55110,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55140,
- "scheduledDeparture":55140,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55215,
- "scheduledDeparture":55215,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55245,
- "scheduledDeparture":55245,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55275,
- "scheduledDeparture":55275,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55305,
- "scheduledDeparture":55305,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55335,
- "scheduledDeparture":55335,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55365,
- "scheduledDeparture":55365,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55395,
- "scheduledDeparture":55395,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55425,
- "scheduledDeparture":55425,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55455,
- "scheduledDeparture":55455,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55515,
- "scheduledDeparture":55515,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55545,
- "scheduledDeparture":55545,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55605,
- "scheduledDeparture":55605,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55785,
- "scheduledDeparture":55785,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55800,
- "scheduledDeparture":55800,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":55845,
- "scheduledDeparture":55845,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56025,
- "scheduledDeparture":56025,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56100,
- "scheduledDeparture":56100,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56445,
- "scheduledDeparture":56445,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56685,
- "scheduledDeparture":56685,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56745,
- "scheduledDeparture":56745,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56775,
- "scheduledDeparture":56775,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56805,
- "scheduledDeparture":56805,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56835,
- "scheduledDeparture":56835,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56865,
- "scheduledDeparture":56865,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56895,
- "scheduledDeparture":56895,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56955,
- "scheduledDeparture":56955,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":56985,
- "scheduledDeparture":56985,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57015,
- "scheduledDeparture":57015,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57075,
- "scheduledDeparture":57075,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57105,
- "scheduledDeparture":57105,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57135,
- "scheduledDeparture":57135,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57165,
- "scheduledDeparture":57165,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57195,
- "scheduledDeparture":57195,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57225,
- "scheduledDeparture":57225,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57285,
- "scheduledDeparture":57285,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57345,
- "scheduledDeparture":57345,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57375,
- "scheduledDeparture":57375,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57435,
- "scheduledDeparture":57435,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57495,
- "scheduledDeparture":57495,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57555,
- "scheduledDeparture":57555,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57645,
- "scheduledDeparture":57645,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57720,
- "scheduledDeparture":57720,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":57840,
- "scheduledDeparture":57840,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMTU4ODk="
- },
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47400,
- "scheduledDeparture":47400,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47460,
- "scheduledDeparture":47460,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47610,
- "scheduledDeparture":47610,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47640,
- "scheduledDeparture":47640,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47670,
- "scheduledDeparture":47670,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47700,
- "scheduledDeparture":47700,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47730,
- "scheduledDeparture":47730,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47760,
- "scheduledDeparture":47760,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47790,
- "scheduledDeparture":47790,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47820,
- "scheduledDeparture":47820,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47835,
- "scheduledDeparture":47835,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47850,
- "scheduledDeparture":47850,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47880,
- "scheduledDeparture":47880,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47910,
- "scheduledDeparture":47910,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":47940,
- "scheduledDeparture":47940,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48015,
- "scheduledDeparture":48015,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48045,
- "scheduledDeparture":48045,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48075,
- "scheduledDeparture":48075,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48105,
- "scheduledDeparture":48105,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48135,
- "scheduledDeparture":48135,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48165,
- "scheduledDeparture":48165,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48195,
- "scheduledDeparture":48195,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48225,
- "scheduledDeparture":48225,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48255,
- "scheduledDeparture":48255,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48315,
- "scheduledDeparture":48315,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48345,
- "scheduledDeparture":48345,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48405,
- "scheduledDeparture":48405,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48585,
- "scheduledDeparture":48585,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48630,
- "scheduledDeparture":48630,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48645,
- "scheduledDeparture":48645,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48825,
- "scheduledDeparture":48825,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":48900,
- "scheduledDeparture":48900,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49245,
- "scheduledDeparture":49245,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49485,
- "scheduledDeparture":49485,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49545,
- "scheduledDeparture":49545,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49575,
- "scheduledDeparture":49575,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49605,
- "scheduledDeparture":49605,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49635,
- "scheduledDeparture":49635,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49665,
- "scheduledDeparture":49665,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49695,
- "scheduledDeparture":49695,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49755,
- "scheduledDeparture":49755,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49785,
- "scheduledDeparture":49785,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49815,
- "scheduledDeparture":49815,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49875,
- "scheduledDeparture":49875,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49905,
- "scheduledDeparture":49905,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49935,
- "scheduledDeparture":49935,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49965,
- "scheduledDeparture":49965,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":49995,
- "scheduledDeparture":49995,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50025,
- "scheduledDeparture":50025,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50085,
- "scheduledDeparture":50085,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50145,
- "scheduledDeparture":50145,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50175,
- "scheduledDeparture":50175,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50235,
- "scheduledDeparture":50235,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50295,
- "scheduledDeparture":50295,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50355,
- "scheduledDeparture":50355,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50445,
- "scheduledDeparture":50445,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50520,
- "scheduledDeparture":50520,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":50640,
- "scheduledDeparture":50640,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwOTU4ODk="
- },
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51000,
- "scheduledDeparture":51000,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51060,
- "scheduledDeparture":51060,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51210,
- "scheduledDeparture":51210,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51240,
- "scheduledDeparture":51240,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51270,
- "scheduledDeparture":51270,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51300,
- "scheduledDeparture":51300,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51330,
- "scheduledDeparture":51330,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51360,
- "scheduledDeparture":51360,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51390,
- "scheduledDeparture":51390,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51420,
- "scheduledDeparture":51420,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51435,
- "scheduledDeparture":51435,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51450,
- "scheduledDeparture":51450,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51480,
- "scheduledDeparture":51480,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51510,
- "scheduledDeparture":51510,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51540,
- "scheduledDeparture":51540,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51615,
- "scheduledDeparture":51615,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51645,
- "scheduledDeparture":51645,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51675,
- "scheduledDeparture":51675,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51705,
- "scheduledDeparture":51705,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51735,
- "scheduledDeparture":51735,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51765,
- "scheduledDeparture":51765,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51795,
- "scheduledDeparture":51795,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51825,
- "scheduledDeparture":51825,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51855,
- "scheduledDeparture":51855,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51915,
- "scheduledDeparture":51915,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":51945,
- "scheduledDeparture":51945,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52005,
- "scheduledDeparture":52005,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52185,
- "scheduledDeparture":52185,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52200,
- "scheduledDeparture":52200,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52245,
- "scheduledDeparture":52245,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52425,
- "scheduledDeparture":52425,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52500,
- "scheduledDeparture":52500,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":52845,
- "scheduledDeparture":52845,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53085,
- "scheduledDeparture":53085,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53145,
- "scheduledDeparture":53145,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53175,
- "scheduledDeparture":53175,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53205,
- "scheduledDeparture":53205,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53235,
- "scheduledDeparture":53235,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53265,
- "scheduledDeparture":53265,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53295,
- "scheduledDeparture":53295,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53355,
- "scheduledDeparture":53355,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53385,
- "scheduledDeparture":53385,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53415,
- "scheduledDeparture":53415,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53475,
- "scheduledDeparture":53475,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53505,
- "scheduledDeparture":53505,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53535,
- "scheduledDeparture":53535,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53565,
- "scheduledDeparture":53565,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53595,
- "scheduledDeparture":53595,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53625,
- "scheduledDeparture":53625,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53685,
- "scheduledDeparture":53685,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53745,
- "scheduledDeparture":53745,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53775,
- "scheduledDeparture":53775,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53835,
- "scheduledDeparture":53835,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53895,
- "scheduledDeparture":53895,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":53955,
- "scheduledDeparture":53955,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54045,
- "scheduledDeparture":54045,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54120,
- "scheduledDeparture":54120,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":54240,
- "scheduledDeparture":54240,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAxMDU4ODk="
- },
- {
- "stoptimes":[
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31500,
- "scheduledDeparture":31500,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31560,
- "scheduledDeparture":31560,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31710,
- "scheduledDeparture":31710,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31740,
- "scheduledDeparture":31740,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31770,
- "scheduledDeparture":31770,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31800,
- "scheduledDeparture":31800,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31830,
- "scheduledDeparture":31830,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31860,
- "scheduledDeparture":31860,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31890,
- "scheduledDeparture":31890,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31920,
- "scheduledDeparture":31920,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31935,
- "scheduledDeparture":31935,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31950,
- "scheduledDeparture":31950,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":31980,
- "scheduledDeparture":31980,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32010,
- "scheduledDeparture":32010,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32040,
- "scheduledDeparture":32040,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32115,
- "scheduledDeparture":32115,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32145,
- "scheduledDeparture":32145,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32175,
- "scheduledDeparture":32175,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32205,
- "scheduledDeparture":32205,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32235,
- "scheduledDeparture":32235,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32265,
- "scheduledDeparture":32265,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32295,
- "scheduledDeparture":32295,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32325,
- "scheduledDeparture":32325,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32355,
- "scheduledDeparture":32355,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32415,
- "scheduledDeparture":32415,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32445,
- "scheduledDeparture":32445,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32505,
- "scheduledDeparture":32505,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32685,
- "scheduledDeparture":32685,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":32745,
- "scheduledDeparture":32745,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33000,
- "scheduledDeparture":33000,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33120,
- "scheduledDeparture":33120,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33300,
- "scheduledDeparture":33300,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33345,
- "scheduledDeparture":33345,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33585,
- "scheduledDeparture":33585,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33645,
- "scheduledDeparture":33645,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33675,
- "scheduledDeparture":33675,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33705,
- "scheduledDeparture":33705,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33735,
- "scheduledDeparture":33735,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33765,
- "scheduledDeparture":33765,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33795,
- "scheduledDeparture":33795,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33855,
- "scheduledDeparture":33855,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33885,
- "scheduledDeparture":33885,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33915,
- "scheduledDeparture":33915,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":33975,
- "scheduledDeparture":33975,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34005,
- "scheduledDeparture":34005,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34035,
- "scheduledDeparture":34035,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34065,
- "scheduledDeparture":34065,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34095,
- "scheduledDeparture":34095,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34125,
- "scheduledDeparture":34125,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34185,
- "scheduledDeparture":34185,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34245,
- "scheduledDeparture":34245,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34275,
- "scheduledDeparture":34275,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34335,
- "scheduledDeparture":34335,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34395,
- "scheduledDeparture":34395,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34455,
- "scheduledDeparture":34455,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34545,
- "scheduledDeparture":34545,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34620,
- "scheduledDeparture":34620,
- "serviceDay":1641852000
- },
- {
- "realtimeState":"SCHEDULED",
- "scheduledArrival":34740,
- "scheduledDeparture":34740,
- "serviceDay":1641852000
- }
- ],
- "id":"VHJpcDp0YW1wZXJlOjc0NDAwODU4ODk="
- }
- ]
- }
- ],
- "alerts":[
-
- ],
- "id":"Um91dGU6dGFtcGVyZTo2NkE2OTU3"
- }
- }
- },
- "id":"routeRoutes_PatternStopsContainer_Query"
- }
-]
\ No newline at end of file
diff --git a/test/e2e/mock-data/StopPageBatchQueryResponse.json b/test/e2e/mock-data/StopPageBatchQueryResponse.json
deleted file mode 100644
index 0be04e4690..0000000000
--- a/test/e2e/mock-data/StopPageBatchQueryResponse.json
+++ /dev/null
@@ -1,19608 +0,0 @@
-[
- {
- "payload": {
- "data": {
- "stop": {
- "gtfsId": "HSL:2434202",
- "name": "Oxfot",
- "code": "E4936",
- "desc": "Nöykkiönkatu",
- "zoneId": "C",
- "alerts": [],
- "lat": 60.16658,
- "lon": 24.66045,
- "stops": [],
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- }
- }
- },
- "id": "stopRoutes_StopPageHeaderContainer_Query"
- },
- {
- "payload": {
- "data": {
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "stops": [],
- "alerts": [],
- "vehicleMode": "BUS",
- "stoptimes": [
- {
- "realtimeState": "SCHEDULED",
- "trip": {
- "pattern": {
- "code": "HSL:2159:1:01",
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "color": null,
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzEwMDE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "trip": {
- "pattern": {
- "code": "HSL:2157:1:01",
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "color": null,
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzEwMDU="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "trip": {
- "pattern": {
- "code": "HSL:2158:1:01",
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "color": null,
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzEwMDc="
- }
- }
- ],
- "routes": [
- {
- "gtfsId": "HSL:2158K",
- "shortName": "158K",
- "longName": "Matinkylä (M)-Nöykkiö-Latokaski",
- "mode": "BUS",
- "color": null,
- "alerts": [],
- "patterns": [
- {
- "code": "HSL:2158K:1:01",
- "id": "UGF0dGVybjpIU0w6MjE1OEs6MTowMQ=="
- },
- {
- "code": "HSL:2158K:0:01",
- "id": "UGF0dGVybjpIU0w6MjE1OEs6MDowMQ=="
- }
- ],
- "id": "Um91dGU6SFNMOjIxNThL"
- },
- {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "color": null,
- "alerts": [],
- "patterns": [
- {
- "code": "HSL:2158:0:01",
- "id": "UGF0dGVybjpIU0w6MjE1ODowOjAx"
- },
- {
- "code": "HSL:2158:1:01",
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- }
- ],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "color": null,
- "alerts": [],
- "patterns": [
- {
- "code": "HSL:2157:0:01",
- "id": "UGF0dGVybjpIU0w6MjE1NzowOjAx"
- },
- {
- "code": "HSL:2157:1:01",
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- }
- ],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- {
- "gtfsId": "HSL:2125N",
- "shortName": "125N",
- "longName": "Kamppi-Tapiola (M)-Niittykumpu (M)-Olari- Latokaski",
- "mode": "BUS",
- "color": null,
- "alerts": [],
- "patterns": [
- {
- "code": "HSL:2125N:0:01",
- "id": "UGF0dGVybjpIU0w6MjEyNU46MDowMQ=="
- },
- {
- "code": "HSL:2125N:1:01",
- "id": "UGF0dGVybjpIU0w6MjEyNU46MTowMQ=="
- }
- ],
- "id": "Um91dGU6SFNMOjIxMjVO"
- },
- {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "color": null,
- "alerts": [],
- "patterns": [
- {
- "code": "HSL:2159:0:01",
- "id": "UGF0dGVybjpIU0w6MjE1OTowOjAx"
- },
- {
- "code": "HSL:2159:1:01",
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- }
- ],
- "id": "Um91dGU6SFNMOjIxNTk="
- }
- ]
- }
- }
- },
- "id": "stopRoutes_StopPageTab_Query"
- },
- {
- "payload": {
- "data": {
- "stop": {
- "url": "http://aikataulut.hsl.fi/pysakit/fi/2434202.html",
- "stoptimes": [
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 36300,
- "scheduledDeparture": 36300,
- "realtimeArrival": 36300,
- "scheduledArrival": 36300,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1001",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzEwMDE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 36540,
- "scheduledDeparture": 36540,
- "realtimeArrival": 36540,
- "scheduledArrival": 36540,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1005",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzEwMDU="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 36720,
- "scheduledDeparture": 36720,
- "realtimeArrival": 36720,
- "scheduledArrival": 36720,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1007",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzEwMDc="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 37200,
- "scheduledDeparture": 37200,
- "realtimeArrival": 37200,
- "scheduledArrival": 37200,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1016",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzEwMTY="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 37440,
- "scheduledDeparture": 37440,
- "realtimeArrival": 37440,
- "scheduledArrival": 37440,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1020",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzEwMjA="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 37620,
- "scheduledDeparture": 37620,
- "realtimeArrival": 37620,
- "scheduledArrival": 37620,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1022",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzEwMjI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 38100,
- "scheduledDeparture": 38100,
- "realtimeArrival": 38100,
- "scheduledArrival": 38100,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1031",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzEwMzE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 38340,
- "scheduledDeparture": 38340,
- "realtimeArrival": 38340,
- "scheduledArrival": 38340,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1035",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzEwMzU="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 38520,
- "scheduledDeparture": 38520,
- "realtimeArrival": 38520,
- "scheduledArrival": 38520,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1037",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzEwMzc="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 39000,
- "scheduledDeparture": 39000,
- "realtimeArrival": 39000,
- "scheduledArrival": 39000,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1046",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzEwNDY="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 39240,
- "scheduledDeparture": 39240,
- "realtimeArrival": 39240,
- "scheduledArrival": 39240,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1050",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzEwNTA="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 39420,
- "scheduledDeparture": 39420,
- "realtimeArrival": 39420,
- "scheduledArrival": 39420,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1052",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzEwNTI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 39900,
- "scheduledDeparture": 39900,
- "realtimeArrival": 39900,
- "scheduledArrival": 39900,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1101",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzExMDE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 40140,
- "scheduledDeparture": 40140,
- "realtimeArrival": 40140,
- "scheduledArrival": 40140,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1105",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzExMDU="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 40320,
- "scheduledDeparture": 40320,
- "realtimeArrival": 40320,
- "scheduledArrival": 40320,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1107",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzExMDc="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 40800,
- "scheduledDeparture": 40800,
- "realtimeArrival": 40800,
- "scheduledArrival": 40800,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1116",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzExMTY="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 41040,
- "scheduledDeparture": 41040,
- "realtimeArrival": 41040,
- "scheduledArrival": 41040,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1120",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzExMjA="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 41220,
- "scheduledDeparture": 41220,
- "realtimeArrival": 41220,
- "scheduledArrival": 41220,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1122",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzExMjI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 41700,
- "scheduledDeparture": 41700,
- "realtimeArrival": 41700,
- "scheduledArrival": 41700,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1131",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzExMzE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 41940,
- "scheduledDeparture": 41940,
- "realtimeArrival": 41940,
- "scheduledArrival": 41940,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1135",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzExMzU="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 42120,
- "scheduledDeparture": 42120,
- "realtimeArrival": 42120,
- "scheduledArrival": 42120,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1137",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzExMzc="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 42600,
- "scheduledDeparture": 42600,
- "realtimeArrival": 42600,
- "scheduledArrival": 42600,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1146",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzExNDY="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 42840,
- "scheduledDeparture": 42840,
- "realtimeArrival": 42840,
- "scheduledArrival": 42840,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1150",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzExNTA="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 43020,
- "scheduledDeparture": 43020,
- "realtimeArrival": 43020,
- "scheduledArrival": 43020,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1152",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzExNTI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 43500,
- "scheduledDeparture": 43500,
- "realtimeArrival": 43500,
- "scheduledArrival": 43500,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1201",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzEyMDE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 43740,
- "scheduledDeparture": 43740,
- "realtimeArrival": 43740,
- "scheduledArrival": 43740,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1205",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzEyMDU="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 43920,
- "scheduledDeparture": 43920,
- "realtimeArrival": 43920,
- "scheduledArrival": 43920,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1207",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzEyMDc="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 44400,
- "scheduledDeparture": 44400,
- "realtimeArrival": 44400,
- "scheduledArrival": 44400,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1216",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzEyMTY="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 44640,
- "scheduledDeparture": 44640,
- "realtimeArrival": 44640,
- "scheduledArrival": 44640,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1220",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzEyMjA="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 44820,
- "scheduledDeparture": 44820,
- "realtimeArrival": 44820,
- "scheduledArrival": 44820,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1222",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzEyMjI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 45300,
- "scheduledDeparture": 45300,
- "realtimeArrival": 45300,
- "scheduledArrival": 45300,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1231",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzEyMzE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 45540,
- "scheduledDeparture": 45540,
- "realtimeArrival": 45540,
- "scheduledArrival": 45540,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1235",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzEyMzU="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 45660,
- "scheduledDeparture": 45660,
- "realtimeArrival": 45660,
- "scheduledArrival": 45660,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158K_20220603_Ma_2_1237",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158K",
- "shortName": "158K",
- "longName": "Matinkylä (M)-Nöykkiö-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNThL"
- },
- "code": "HSL:2158K:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OEs6MTowMQ=="
- },
- "id": "VHJpcDpIU0w6MjE1OEtfMjAyMjA2MDNfTWFfMl8xMjM3"
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 46200,
- "scheduledDeparture": 46200,
- "realtimeArrival": 46200,
- "scheduledArrival": 46200,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1246",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzEyNDY="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 46440,
- "scheduledDeparture": 46440,
- "realtimeArrival": 46440,
- "scheduledArrival": 46440,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1250",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzEyNTA="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 46620,
- "scheduledDeparture": 46620,
- "realtimeArrival": 46620,
- "scheduledArrival": 46620,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1252",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzEyNTI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 47100,
- "scheduledDeparture": 47100,
- "realtimeArrival": 47100,
- "scheduledArrival": 47100,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1301",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzEzMDE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 47340,
- "scheduledDeparture": 47340,
- "realtimeArrival": 47340,
- "scheduledArrival": 47340,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1305",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzEzMDU="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 47520,
- "scheduledDeparture": 47520,
- "realtimeArrival": 47520,
- "scheduledArrival": 47520,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1307",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzEzMDc="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 48000,
- "scheduledDeparture": 48000,
- "realtimeArrival": 48000,
- "scheduledArrival": 48000,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1316",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzEzMTY="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 48240,
- "scheduledDeparture": 48240,
- "realtimeArrival": 48240,
- "scheduledArrival": 48240,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1320",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzEzMjA="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 48420,
- "scheduledDeparture": 48420,
- "realtimeArrival": 48420,
- "scheduledArrival": 48420,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1322",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzEzMjI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 48900,
- "scheduledDeparture": 48900,
- "realtimeArrival": 48900,
- "scheduledArrival": 48900,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1331",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzEzMzE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 49140,
- "scheduledDeparture": 49140,
- "realtimeArrival": 49140,
- "scheduledArrival": 49140,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1335",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzEzMzU="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 49200,
- "scheduledDeparture": 49200,
- "realtimeArrival": 49200,
- "scheduledArrival": 49200,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158K_20220603_Ma_2_1336",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158K",
- "shortName": "158K",
- "longName": "Matinkylä (M)-Nöykkiö-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNThL"
- },
- "code": "HSL:2158K:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OEs6MTowMQ=="
- },
- "id": "VHJpcDpIU0w6MjE1OEtfMjAyMjA2MDNfTWFfMl8xMzM2"
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 49800,
- "scheduledDeparture": 49800,
- "realtimeArrival": 49800,
- "scheduledArrival": 49800,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1346",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzEzNDY="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 50040,
- "scheduledDeparture": 50040,
- "realtimeArrival": 50040,
- "scheduledArrival": 50040,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1350",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzEzNTA="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 50220,
- "scheduledDeparture": 50220,
- "realtimeArrival": 50220,
- "scheduledArrival": 50220,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1352",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzEzNTI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 50700,
- "scheduledDeparture": 50700,
- "realtimeArrival": 50700,
- "scheduledArrival": 50700,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1401",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE0MDE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 50940,
- "scheduledDeparture": 50940,
- "realtimeArrival": 50940,
- "scheduledArrival": 50940,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1405",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE0MDU="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 51120,
- "scheduledDeparture": 51120,
- "realtimeArrival": 51120,
- "scheduledArrival": 51120,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1407",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE0MDc="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 51660,
- "scheduledDeparture": 51660,
- "realtimeArrival": 51660,
- "scheduledArrival": 51660,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1416",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE0MTY="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 51840,
- "scheduledDeparture": 51840,
- "realtimeArrival": 51840,
- "scheduledArrival": 51840,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1420",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE0MjA="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 52020,
- "scheduledDeparture": 52020,
- "realtimeArrival": 52020,
- "scheduledArrival": 52020,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1422",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE0MjI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 52620,
- "scheduledDeparture": 52620,
- "realtimeArrival": 52620,
- "scheduledArrival": 52620,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1433",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE0MzM="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 52860,
- "scheduledDeparture": 52860,
- "realtimeArrival": 52860,
- "scheduledArrival": 52860,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1436",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE0MzY="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 53040,
- "scheduledDeparture": 53040,
- "realtimeArrival": 53040,
- "scheduledArrival": 53040,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1439",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE0Mzk="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 53640,
- "scheduledDeparture": 53640,
- "realtimeArrival": 53640,
- "scheduledArrival": 53640,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1450",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE0NTA="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 53760,
- "scheduledDeparture": 53760,
- "realtimeArrival": 53760,
- "scheduledArrival": 53760,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1451",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE0NTE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 53820,
- "scheduledDeparture": 53820,
- "realtimeArrival": 53820,
- "scheduledArrival": 53820,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1452",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE0NTI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 54360,
- "scheduledDeparture": 54360,
- "realtimeArrival": 54360,
- "scheduledArrival": 54360,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1502",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE1MDI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 54780,
- "scheduledDeparture": 54780,
- "realtimeArrival": 54780,
- "scheduledArrival": 54780,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1508",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE1MDg="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 54960,
- "scheduledDeparture": 54960,
- "realtimeArrival": 54960,
- "scheduledArrival": 54960,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1511",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE1MTE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 55380,
- "scheduledDeparture": 55380,
- "realtimeArrival": 55380,
- "scheduledArrival": 55380,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1519",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE1MTk="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 55620,
- "scheduledDeparture": 55620,
- "realtimeArrival": 55620,
- "scheduledArrival": 55620,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1522",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE1MjI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 55740,
- "scheduledDeparture": 55740,
- "realtimeArrival": 55740,
- "scheduledArrival": 55740,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1524",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE1MjQ="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 56160,
- "scheduledDeparture": 56160,
- "realtimeArrival": 56160,
- "scheduledArrival": 56160,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1532",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE1MzI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 56580,
- "scheduledDeparture": 56580,
- "realtimeArrival": 56580,
- "scheduledArrival": 56580,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1538",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE1Mzg="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 56760,
- "scheduledDeparture": 56760,
- "realtimeArrival": 56760,
- "scheduledArrival": 56760,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1541",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE1NDE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 57120,
- "scheduledDeparture": 57120,
- "realtimeArrival": 57120,
- "scheduledArrival": 57120,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1548",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE1NDg="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 57300,
- "scheduledDeparture": 57300,
- "realtimeArrival": 57300,
- "scheduledArrival": 57300,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158K_20220603_Ma_2_1550",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158K",
- "shortName": "158K",
- "longName": "Matinkylä (M)-Nöykkiö-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNThL"
- },
- "code": "HSL:2158K:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OEs6MTowMQ=="
- },
- "id": "VHJpcDpIU0w6MjE1OEtfMjAyMjA2MDNfTWFfMl8xNTUw"
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 57540,
- "scheduledDeparture": 57540,
- "realtimeArrival": 57540,
- "scheduledArrival": 57540,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1554",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE1NTQ="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 57900,
- "scheduledDeparture": 57900,
- "realtimeArrival": 57900,
- "scheduledArrival": 57900,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1601",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE2MDE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 58380,
- "scheduledDeparture": 58380,
- "realtimeArrival": 58380,
- "scheduledArrival": 58380,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1608",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE2MDg="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 58560,
- "scheduledDeparture": 58560,
- "realtimeArrival": 58560,
- "scheduledArrival": 58560,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1611",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE2MTE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 58920,
- "scheduledDeparture": 58920,
- "realtimeArrival": 58920,
- "scheduledArrival": 58920,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1618",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE2MTg="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 59220,
- "scheduledDeparture": 59220,
- "realtimeArrival": 59220,
- "scheduledArrival": 59220,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1622",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE2MjI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 59340,
- "scheduledDeparture": 59340,
- "realtimeArrival": 59340,
- "scheduledArrival": 59340,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1624",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE2MjQ="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 59760,
- "scheduledDeparture": 59760,
- "realtimeArrival": 59760,
- "scheduledArrival": 59760,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1632",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE2MzI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 60180,
- "scheduledDeparture": 60180,
- "realtimeArrival": 60180,
- "scheduledArrival": 60180,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1638",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE2Mzg="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 60360,
- "scheduledDeparture": 60360,
- "realtimeArrival": 60360,
- "scheduledArrival": 60360,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1641",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE2NDE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 60780,
- "scheduledDeparture": 60780,
- "realtimeArrival": 60780,
- "scheduledArrival": 60780,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1649",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE2NDk="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 61020,
- "scheduledDeparture": 61020,
- "realtimeArrival": 61020,
- "scheduledArrival": 61020,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1652",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE2NTI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 61140,
- "scheduledDeparture": 61140,
- "realtimeArrival": 61140,
- "scheduledArrival": 61140,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1654",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE2NTQ="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 61620,
- "scheduledDeparture": 61620,
- "realtimeArrival": 61620,
- "scheduledArrival": 61620,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1703",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE3MDM="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 61980,
- "scheduledDeparture": 61980,
- "realtimeArrival": 61980,
- "scheduledArrival": 61980,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1708",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE3MDg="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 62160,
- "scheduledDeparture": 62160,
- "realtimeArrival": 62160,
- "scheduledArrival": 62160,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1711",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE3MTE="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 62640,
- "scheduledDeparture": 62640,
- "realtimeArrival": 62640,
- "scheduledArrival": 62640,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1720",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE3MjA="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 62940,
- "scheduledDeparture": 62940,
- "realtimeArrival": 62940,
- "scheduledArrival": 62940,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1724",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE3MjQ="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 63060,
- "scheduledDeparture": 63060,
- "realtimeArrival": 63060,
- "scheduledArrival": 63060,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1726",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE3MjY="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 63420,
- "scheduledDeparture": 63420,
- "realtimeArrival": 63420,
- "scheduledArrival": 63420,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1733",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE3MzM="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 63720,
- "scheduledDeparture": 63720,
- "realtimeArrival": 63720,
- "scheduledArrival": 63720,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1737",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE3Mzc="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 63960,
- "scheduledDeparture": 63960,
- "realtimeArrival": 63960,
- "scheduledArrival": 63960,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1742",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE3NDI="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 64440,
- "scheduledDeparture": 64440,
- "realtimeArrival": 64440,
- "scheduledArrival": 64440,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1750",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE3NTA="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 64740,
- "scheduledDeparture": 64740,
- "realtimeArrival": 64740,
- "scheduledArrival": 64740,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1754",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE3NTQ="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 64860,
- "scheduledDeparture": 64860,
- "realtimeArrival": 64860,
- "scheduledArrival": 64860,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1757",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE3NTc="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 65340,
- "scheduledDeparture": 65340,
- "realtimeArrival": 65340,
- "scheduledArrival": 65340,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1805",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE4MDU="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 65520,
- "scheduledDeparture": 65520,
- "realtimeArrival": 65520,
- "scheduledArrival": 65520,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2158_20220603_Ma_2_1807",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2158",
- "shortName": "158",
- "longName": "Matinkylä (M)-Nöykkiö-Kattilalaakso-Kiviruukki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTg="
- },
- "code": "HSL:2158:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421227",
- "code": "E4218",
- "id": "U3RvcDpIU0w6MjQyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2421225",
- "code": "E4216",
- "id": "U3RvcDpIU0w6MjQyMTIyNQ=="
- },
- {
- "gtfsId": "HSL:2421223",
- "code": "E4214",
- "id": "U3RvcDpIU0w6MjQyMTIyMw=="
- },
- {
- "gtfsId": "HSL:2421211",
- "code": "E4203",
- "id": "U3RvcDpIU0w6MjQyMTIxMQ=="
- },
- {
- "gtfsId": "HSL:2421219",
- "code": "E4211",
- "id": "U3RvcDpIU0w6MjQyMTIxOQ=="
- },
- {
- "gtfsId": "HSL:2421213",
- "code": "E4205",
- "id": "U3RvcDpIU0w6MjQyMTIxMw=="
- },
- {
- "gtfsId": "HSL:2434211",
- "code": "E4960",
- "id": "U3RvcDpIU0w6MjQzNDIxMQ=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434205",
- "code": "E4939",
- "id": "U3RvcDpIU0w6MjQzNDIwNQ=="
- },
- {
- "gtfsId": "HSL:2434207",
- "code": "E4941",
- "id": "U3RvcDpIU0w6MjQzNDIwNw=="
- },
- {
- "gtfsId": "HSL:2434209",
- "code": "E4943",
- "id": "U3RvcDpIU0w6MjQzNDIwOQ=="
- },
- {
- "gtfsId": "HSL:2434244",
- "code": "E4954",
- "id": "U3RvcDpIU0w6MjQzNDI0NA=="
- },
- {
- "gtfsId": "HSL:2434246",
- "code": "E4956",
- "id": "U3RvcDpIU0w6MjQzNDI0Ng=="
- },
- {
- "gtfsId": "HSL:2432210",
- "code": "E4910",
- "id": "U3RvcDpIU0w6MjQzMjIxMA=="
- },
- {
- "gtfsId": "HSL:2432227",
- "code": "E4927",
- "id": "U3RvcDpIU0w6MjQzMjIyNw=="
- },
- {
- "gtfsId": "HSL:2432228",
- "code": "E4928",
- "id": "U3RvcDpIU0w6MjQzMjIyOA=="
- },
- {
- "gtfsId": "HSL:2434302",
- "code": "E4959",
- "id": "U3RvcDpIU0w6MjQzNDMwMg=="
- },
- {
- "gtfsId": "HSL:2433246",
- "code": "E4329",
- "id": "U3RvcDpIU0w6MjQzMzI0Ng=="
- },
- {
- "gtfsId": "HSL:2432234",
- "code": "E4971",
- "id": "U3RvcDpIU0w6MjQzMjIzNA=="
- },
- {
- "gtfsId": "HSL:2432205",
- "code": "E4905",
- "id": "U3RvcDpIU0w6MjQzMjIwNQ=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1ODoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OF8yMDIyMDYwM19NYV8yXzE4MDc="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 66060,
- "scheduledDeparture": 66060,
- "realtimeArrival": 66060,
- "scheduledArrival": 66060,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2159_20220603_Ma_2_1817",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2159",
- "shortName": "159",
- "longName": "Matinkylä (M)-Latokaski",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTk="
- },
- "code": "HSL:2159:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2431240",
- "code": "E4310",
- "id": "U3RvcDpIU0w6MjQzMTI0MA=="
- },
- {
- "gtfsId": "HSL:2431238",
- "code": "E4308",
- "id": "U3RvcDpIU0w6MjQzMTIzOA=="
- },
- {
- "gtfsId": "HSL:2431252",
- "code": "E4314",
- "id": "U3RvcDpIU0w6MjQzMTI1Mg=="
- },
- {
- "gtfsId": "HSL:2431254",
- "code": "E4316",
- "id": "U3RvcDpIU0w6MjQzMTI1NA=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2442201",
- "code": "E4417",
- "id": "U3RvcDpIU0w6MjQ0MjIwMQ=="
- },
- {
- "gtfsId": "HSL:2314207",
- "code": "E3157",
- "id": "U3RvcDpIU0w6MjMxNDIwNw=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1OToxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1OV8yMDIyMDYwM19NYV8yXzE4MTc="
- }
- },
- {
- "realtimeState": "SCHEDULED",
- "realtimeDeparture": 66240,
- "scheduledDeparture": 66240,
- "realtimeArrival": 66240,
- "scheduledArrival": 66240,
- "realtime": false,
- "serviceDay": 1654462800,
- "pickupType": "SCHEDULED",
- "dropoffType": "SCHEDULED",
- "headsign": "Matinkylä (M)",
- "stop": {
- "id": "U3RvcDpIU0w6MjQzNDIwMg==",
- "code": "E4936",
- "platformCode": null
- },
- "trip": {
- "gtfsId": "HSL:2157_20220603_Ma_2_1820",
- "directionId": "1",
- "tripHeadsign": "Matinkylä (M)",
- "stops": [
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "pattern": {
- "route": {
- "gtfsId": "HSL:2157",
- "shortName": "157",
- "longName": "Matinkylä (M)-Suomenoja-Tillinmäki",
- "mode": "BUS",
- "type": 701,
- "color": null,
- "agency": {
- "name": "Helsingin seudun liikenne",
- "id": "QWdlbmN5OkhTTDpIU0w="
- },
- "alerts": [],
- "id": "Um91dGU6SFNMOjIxNTc="
- },
- "code": "HSL:2157:1:01",
- "stops": [
- {
- "gtfsId": "HSL:2421201",
- "code": "E4207",
- "id": "U3RvcDpIU0w6MjQyMTIwMQ=="
- },
- {
- "gtfsId": "HSL:2421203",
- "code": "E4252",
- "id": "U3RvcDpIU0w6MjQyMTIwMw=="
- },
- {
- "gtfsId": "HSL:2421205",
- "code": "E4254",
- "id": "U3RvcDpIU0w6MjQyMTIwNQ=="
- },
- {
- "gtfsId": "HSL:2421207",
- "code": "E4255",
- "id": "U3RvcDpIU0w6MjQyMTIwNw=="
- },
- {
- "gtfsId": "HSL:2434213",
- "code": "E4962",
- "id": "U3RvcDpIU0w6MjQzNDIxMw=="
- },
- {
- "gtfsId": "HSL:2434202",
- "code": "E4936",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- },
- {
- "gtfsId": "HSL:2434204",
- "code": "E4938",
- "id": "U3RvcDpIU0w6MjQzNDIwNA=="
- },
- {
- "gtfsId": "HSL:2421206",
- "code": "E4258",
- "id": "U3RvcDpIU0w6MjQyMTIwNg=="
- },
- {
- "gtfsId": "HSL:2432231",
- "code": "E4931",
- "id": "U3RvcDpIU0w6MjQzMjIzMQ=="
- },
- {
- "gtfsId": "HSL:2434229",
- "code": "E4949",
- "id": "U3RvcDpIU0w6MjQzNDIyOQ=="
- },
- {
- "gtfsId": "HSL:2434227",
- "code": "E4947",
- "id": "U3RvcDpIU0w6MjQzNDIyNw=="
- },
- {
- "gtfsId": "HSL:2432226",
- "code": "E4926",
- "id": "U3RvcDpIU0w6MjQzMjIyNg=="
- },
- {
- "gtfsId": "HSL:2432224",
- "code": "E4924",
- "id": "U3RvcDpIU0w6MjQzMjIyNA=="
- },
- {
- "gtfsId": "HSL:2432222",
- "code": "E4922",
- "id": "U3RvcDpIU0w6MjQzMjIyMg=="
- },
- {
- "gtfsId": "HSL:2432219",
- "code": "E4919",
- "id": "U3RvcDpIU0w6MjQzMjIxOQ=="
- },
- {
- "gtfsId": "HSL:2432217",
- "code": "E4917",
- "id": "U3RvcDpIU0w6MjQzMjIxNw=="
- },
- {
- "gtfsId": "HSL:2321227",
- "code": "E3216",
- "id": "U3RvcDpIU0w6MjMyMTIyNw=="
- },
- {
- "gtfsId": "HSL:2314223",
- "code": "E3139",
- "id": "U3RvcDpIU0w6MjMxNDIyMw=="
- },
- {
- "gtfsId": "HSL:2314226",
- "code": "E3142",
- "id": "U3RvcDpIU0w6MjMxNDIyNg=="
- },
- {
- "gtfsId": "HSL:2314200",
- "code": "E3145",
- "id": "U3RvcDpIU0w6MjMxNDIwMA=="
- }
- ],
- "id": "UGF0dGVybjpIU0w6MjE1NzoxOjAx"
- },
- "id": "VHJpcDpIU0w6MjE1N18yMDIyMDYwM19NYV8yXzE4MjA="
- }
- }
- ],
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- }
- }
- },
- "id": "stopRoutes_StopPageContent_Query"
- },
- {
- "payload": {
- "data": {
- "stop": {
- "lat": 60.16658,
- "lon": 24.66045,
- "platformCode": null,
- "name": "Oxfot",
- "code": "E4936",
- "desc": "Nöykkiönkatu",
- "vehicleMode": "BUS",
- "locationType": "STOP",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- }
- }
- },
- "id": "stopRoutes_StopPageMapContainer_Query"
- },
- {
- "payload": {
- "data": {
- "stop": {
- "name": "Oxfot",
- "code": "E4936",
- "desc": "Nöykkiönkatu",
- "id": "U3RvcDpIU0w6MjQzNDIwMg=="
- }
- }
- },
- "id": "stopRoutes_StopPageMeta_Query"
- }
-]
\ No newline at end of file
diff --git a/test/unit/OldSearchesStore.test.js b/test/unit/OldSearchesStore.test.js
index f730fe9ca0..b3e9ee7a8d 100644
--- a/test/unit/OldSearchesStore.test.js
+++ b/test/unit/OldSearchesStore.test.js
@@ -80,26 +80,6 @@ const mockData = {
},
type: 'endpoint',
},
- currentLocation: {
- item: {
- type: 'CurrentLocation',
- address: 'Mannerheimintie 1, Helsinki',
- lat: 60.17020147545328,
- lon: 24.937821437201357,
- properties: {
- labelId: 'Käytä nykyistä sijaintia',
- layer: 'currentPosition',
- address: 'Mannerheimintie 1, Helsinki',
- lat: 60.17020147545328,
- lon: 24.937821437201357,
- },
- geometry: {
- type: 'Point',
- coordinates: [24.937821437201357, 60.17020147545328],
- },
- },
- type: 'endpoint',
- },
};
describe('OldSearchesStore', () => {
@@ -161,18 +141,11 @@ describe('OldSearchesStore', () => {
setOldSearchesStorage({
version: STORE_VERSION,
items: [
- {
- type: 'endpoint',
- },
- {
- type: 'route',
- },
- {
- type: 'endpoint',
- },
+ { item: {}, type: 'endpoint' },
+ { item: {}, type: 'route' },
+ { item: {}, type: 'endpoint' },
],
});
-
const store = new OldSearchesStore();
const oldSearches = store.getOldSearches('endpoint');
expect(oldSearches).to.not.be.empty;
@@ -228,7 +201,7 @@ describe('OldSearchesStore', () => {
MockDate.set(timestamp);
setOldSearchesStorage({
version: STORE_VERSION,
- items: [{}],
+ items: [{ item: {} }],
});
const store = new OldSearchesStore();
@@ -236,25 +209,6 @@ describe('OldSearchesStore', () => {
expect(oldSearches).to.not.be.empty;
expect(oldSearches.length).to.equal(1);
});
-
- it('should ignore items of type "CurrentLocation" if they are found from the store', () => {
- const timeStamp = moment('2019-06-19');
- MockDate.set(timeStamp);
- setOldSearchesStorage({
- version: STORE_VERSION,
- items: [
- {
- ...mockData.currentLocation,
- count: 1,
- lastUpdated: timeStamp.unix(),
- },
- ],
- });
-
- const store = new OldSearchesStore();
- const searches = store.getOldSearches();
- expect(searches).to.have.lengthOf(0);
- });
});
describe('saveSearch(destination)', () => {
@@ -345,11 +299,5 @@ describe('OldSearchesStore', () => {
const result = store.getOldSearches()[0];
expect(result).to.deep.equal(newData.item);
});
-
- it('should not save items of type "CurrentLocation"', () => {
- const store = new OldSearchesStore();
- store.saveSearch({ ...mockData.currentLocation });
- expect(getOldSearchesStorage().items).to.deep.equal([]);
- });
});
});
diff --git a/test/unit/component/CustomizeSearchNew.test.js b/test/unit/component/CustomizeSearchNew.test.js
deleted file mode 100644
index 62520ac269..0000000000
--- a/test/unit/component/CustomizeSearchNew.test.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/* import { expect } from 'chai';
-import fetchMock from 'fetch-mock';
-import { after, before, describe, it } from 'mocha';
-import React from 'react';
-
-import CustomizeSearch from '../../../app/component/CustomizeSearchNew';
-import VehicleRentalStationNetworkSelector from '../../../app/component/VehicleRentalStationNetworkSelector';
-
-import { mockContext, mockChildContextTypes } from '../helpers/mock-context';
-import { mountWithIntl } from '../helpers/mock-intl-enzyme';
-import defaultConfig from '../../../app/configurations/config.default';
-import hslConfig from '../../../app/configurations/config.hsl';
-
-const mergedConfig = {
- ...defaultConfig,
- ...hslConfig,
-};
-
-describe('', () => {
- before(() => {
- fetchMock.post('/graphql', {
- data: {
- route: {
- id: 'Um91dGU6SFNMOjI1NTA=',
- shortName: '550',
- longName: 'Itäkeskus-Westendinasema',
- mode: 'BUS',
- },
- },
- });
- });
-
- after(() => {
- fetchMock.restore();
- });
-
- it.skip('should show citybike network selector when many networks are available', () => {
- const wrapper = mountWithIntl(
- {}} />,
- {
- context: {
- ...mockContext,
- config: {
- ...mergedConfig,
- transportModes: {
- ...mergedConfig.transportModes,
- citybike: {
- availableForSelection: true,
- },
- },
- },
- location: {
- ...mockContext.location,
- },
- router: createMemoryMockRouter(),
- },
- childContextTypes: {
- ...mockChildContextTypes,
- },
- },
- );
- expect(wrapper.find(VehicleRentalStationNetworkSelector)).to.have.lengthOf(1);
- });
-
- it.skip('should hide citybike network selector when citybike routing is disabled', () => {
- const wrapper = mountWithIntl(
- {}} />,
- {
- context: {
- ...mockContext,
- config: {
- ...mergedConfig,
- transportModes: {
- ...mergedConfig.transportModes,
- citybike: {
- availableForSelection: false,
- },
- },
- },
- },
- childContextTypes: {
- ...mockChildContextTypes,
- },
- },
- );
- expect(wrapper.find(VehicleRentalStationNetworkSelector)).to.have.lengthOf(0);
- });
-});
-*/
diff --git a/test/unit/component/Timetable.test.js b/test/unit/component/Timetable.test.js
index 38266b887f..45290d2128 100644
--- a/test/unit/component/Timetable.test.js
+++ b/test/unit/component/Timetable.test.js
@@ -12,11 +12,8 @@ import * as timetables from '../../../app/configurations/timetableConfigUtils';
const stopIdNumber = '1140199';
const props = {
- propsForDateSelect: {
- startDate: '20190110',
- selectedDate: '20190110',
- onDateChange: () => {},
- },
+ startDate: '20190110',
+ onDateChange: () => {},
stop: {
gtfsId: `HSL:${stopIdNumber}`,
locationType: 'STOP',
diff --git a/test/unit/component/map/tile-layer/Stops.test.js b/test/unit/component/map/tile-layer/Stops.test.js
index cb9cf60d8f..ed5b18b6d7 100644
--- a/test/unit/component/map/tile-layer/Stops.test.js
+++ b/test/unit/component/map/tile-layer/Stops.test.js
@@ -2,6 +2,8 @@ import fetchMock from 'fetch-mock';
import Stops from '../../../../../app/component/map/tile-layer/Stops';
describe('Stops', () => {
+ before(() => fetchMock.mockGlobal());
+ after(() => fetchMock.unmockGlobal());
const config = {
URL: {
STOP_MAP: { default: 'https://localhost/stopmap/' },
@@ -18,24 +20,28 @@ describe('Stops', () => {
};
describe('fetchStatusAndDrawStop', () => {
- afterEach(() => {
- fetchMock.reset();
- });
-
it('should make a get to the correct url', () => {
- const mock = fetchMock.get(`${config.URL.STOP_MAP.default}3/1/2.pbf`, {
- status: 404,
- });
+ fetchMock.get(
+ 'end:3/1/2.pbf',
+ {
+ status: 200,
+ },
+ { repeat: 1 },
+ );
new Stops(tile, config, []).getPromise(); // eslint-disable-line no-new
- expect(mock.called()).to.equal(true);
+ expect(fetchMock.callHistory.called('end:/3/1/2.pbf')).to.equal(true);
});
it('should add zoom offset to the z coordinate', () => {
- const mock = fetchMock.get(`${config.URL.STOP_MAP.default}4/1/2.pbf`, {
- status: 404,
- });
+ fetchMock.get(
+ 'end:/4/1/2.pbf',
+ {
+ status: 200,
+ },
+ { repeat: 1 },
+ );
new Stops({ ...tile, props: { zoomOffset: 1 } }, config, []).getPromise(); // eslint-disable-line no-new
- expect(mock.called()).to.equal(true);
+ expect(fetchMock.callHistory.called('end:/4/1/2.pbf')).to.equal(true);
});
});
});
diff --git a/test/unit/store/GeoJsonStore.test.js b/test/unit/store/GeoJsonStore.test.js
index 96dec09485..9053f3ed26 100644
--- a/test/unit/store/GeoJsonStore.test.js
+++ b/test/unit/store/GeoJsonStore.test.js
@@ -9,15 +9,19 @@ import GeoJsonStore, {
describe('GeoJsonStore', () => {
let store;
const dispatcher = () => {};
+ before(() => fetchMock.mockGlobal());
beforeEach(() => {
store = new GeoJsonStore(dispatcher);
});
afterEach(() => {
- fetchMock.reset();
+ fetchMock.removeRoutes();
+ fetchMock.clearHistory();
});
+ after(() => fetchMock.unmockGlobal());
+
describe('getGeoJsonConfig', () => {
it('should return undefined if the url is falsey', async () => {
expect(await store.getGeoJsonConfig(undefined)).to.equal(undefined);
@@ -48,7 +52,7 @@ describe('GeoJsonStore', () => {
const result1 = await store.getGeoJsonConfig(url);
const result2 = await store.getGeoJsonConfig(url);
- expect(fetchMock.calls().length).to.equal(1);
+ expect(fetchMock.callHistory.calls().length).to.equal(1);
expect(result1).to.equal(result2);
});
@@ -79,7 +83,7 @@ describe('GeoJsonStore', () => {
const result1 = await store.getGeoJsonData(url, undefined, undefined);
const result2 = await store.getGeoJsonData(url, undefined, undefined);
- expect(fetchMock.calls().length).to.equal(1);
+ expect(fetchMock.callHistory.calls().length).to.equal(1);
expect(result1).to.deep.equal(result2);
});
diff --git a/test/unit/store/MessageStore.test.js b/test/unit/store/MessageStore.test.js
index 9d7e1c5f26..c828df1fae 100644
--- a/test/unit/store/MessageStore.test.js
+++ b/test/unit/store/MessageStore.test.js
@@ -9,9 +9,18 @@ import MessageStore, {
describe('MessageStore', () => {
describe('getMessages', () => {
+ before(() => fetchMock.mockGlobal());
+
+ afterEach(() => {
+ fetchMock.removeRoutes();
+ fetchMock.clearHistory();
+ });
+
+ after(() => fetchMock.unmockGlobal());
+
it('should show higher priority first', async () => {
const staticMessagesUrl = '/staticMessages';
- const mock = fetchMock.sandbox().mock(staticMessagesUrl, {
+ fetchMock.get(staticMessagesUrl, {
staticMessages: [
{
id: '2',
@@ -26,7 +35,6 @@ describe('MessageStore', () => {
},
],
});
- global.fetch = mock;
const store = new MessageStore();
const config = {
staticMessages: [
@@ -47,7 +55,7 @@ describe('MessageStore', () => {
};
await store.addConfigMessages(config);
- expect(mock.called(staticMessagesUrl)).to.equal(true);
+ expect(fetchMock.callHistory.called(staticMessagesUrl)).to.equal(true);
expect(store.getMessages()).to.deep.equal([
{
content: {
diff --git a/test/unit/util/analyticsUtils.test.js b/test/unit/util/analyticsUtils.test.js
index db759b7054..e4c0baabf5 100644
--- a/test/unit/util/analyticsUtils.test.js
+++ b/test/unit/util/analyticsUtils.test.js
@@ -29,13 +29,23 @@ describe('analytics utils', () => {
});
describe('getAnalyticsInitCode', () => {
it('should return a nonempty string when GTMid is given', () => {
- const res = getAnalyticsInitCode(1);
+ const res = getAnalyticsInitCode({ GTMid: 1 });
expect(res.length > 0).to.equal(true);
});
- it('should return an empty string when null GTMid is given', () => {
- const res = getAnalyticsInitCode(null);
+ it('should return an empty string when null GTMid and no analyticsScript is given', () => {
+ const res = getAnalyticsInitCode(
+ { GTMid: null, analyticsScript: '' },
+ 'hostname',
+ );
expect(res.length).to.equal(0);
});
+ it('should return a nonempty string when analyticsScript and hostname are given', () => {
+ const res = getAnalyticsInitCode(
+ { analyticsScript: () => 'test' },
+ 'hostname',
+ );
+ expect(res.length > 0).to.equal(true);
+ });
});
describe('initAnalyticsClientSide', () => {
it('should initialize window.dataLayer to an array', () => {
diff --git a/test/unit/util/fetchUtil.test.js b/test/unit/util/fetchUtil.test.js
index 78bc0b9334..2a762de93a 100644
--- a/test/unit/util/fetchUtil.test.js
+++ b/test/unit/util/fetchUtil.test.js
@@ -1,6 +1,6 @@
-import { expect, assert } from 'chai';
-import { describe, it } from 'mocha';
+import { assert, expect } from 'chai';
import fetchMock from 'fetch-mock';
+import { describe, it } from 'mocha';
import { retryFetch } from '../../../app/util/fetchUtils';
// retryFetch retries fetch requests (url, options, retry count, delay) where total number or calls is initial request + retry count
@@ -11,106 +11,85 @@ const testUrl =
const testJSONResponse = '{"test": 3}';
describe('retryFetch', () => {
- /* eslint-disable no-unused-vars */
- it('fetching something that does not exist with 5 retries should give Not Found error and 6 requests in total should be made ', done => {
- fetchMock.mock(testUrl, 404);
- retryFetch(testUrl, 5, 10)
- .then(res => res.json())
- .then(
- result => {
- assert.fail('Error should have been thrown');
- },
- err => {
- expect(err).to.equal(`${testUrl}: Not Found`);
- // calls has array of requests made to given URL
- const calls = fetchMock.calls(
- 'https://dev-api.digitransit.fi/timetables/v1/hsl/routes/routes.json',
- );
- expect(calls.length).to.equal(6);
- fetchMock.restore();
- done();
- },
- );
+ before(() => fetchMock.mockGlobal());
+
+ afterEach(() => {
+ fetchMock.removeRoutes();
+ fetchMock.clearHistory();
});
- it('fetch with larger fetch timeout should take longer', done => {
- let firstEnd;
- let firstDuration;
- const firstStart = performance.now();
- fetchMock.mock(testUrl, 404);
- retryFetch(testUrl, 2, 20)
- .then(res => res.json())
- .then(
- result => {
- assert.fail('Error should have been thrown');
- },
- err => {
- firstEnd = performance.now();
- firstDuration = firstEnd - firstStart;
- expect(firstDuration).to.be.above(40);
- // because test system can be slow, requests should take between 40-200ms (because system can be slow) when retry delay is 20ms and 2 retries
- expect(firstDuration).to.be.below(200);
- fetchMock.restore();
- },
- )
- .then(() => {
- const secondStart = performance.now();
- fetchMock.mock(testUrl, 404);
- retryFetch(testUrl, 2, 100)
- .then(res => res.json())
- .then(
- result => {
- assert.fail('Error should have been thrown');
- },
- err => {
- const secondEnd = performance.now();
- const secondDuration = secondEnd - secondStart;
- expect(secondDuration).to.be.above(200);
- // because test system can be slow, requests should take between 200-360ms when retry delay is 100ms and 2 retries
- expect(firstDuration).to.be.below(360);
- // because of longer delay between requests, the difference between 2 retries with 20ms delay
- // and 2 retries with 100ms delay should be 160ms but because performance slightly varies, there is a 60ms threshold for test failure
- expect(secondDuration - firstDuration).to.be.above(100);
- fetchMock.restore();
- done();
- },
- );
- });
+ after(() => fetchMock.unmockGlobal());
+
+ it('fetching something that does not exist with 5 retries should give Not Found error and 6 requests in total should be made ', async () => {
+ fetchMock.get(testUrl, 404);
+
+ try {
+ await retryFetch(testUrl, 5, 10);
+ } catch (err) {
+ expect(err).to.equal(`${testUrl}: Not Found`);
+ }
+
+ const calls = fetchMock.callHistory.calls(
+ 'https://dev-api.digitransit.fi/timetables/v1/hsl/routes/routes.json',
+ );
+ expect(calls.length).to.equal(6);
});
- it('fetch that gives 200 should not be retried', done => {
+ it('fetch with larger fetch timeout should take longer', async () => {
+ async function measureFetchDuration(retries, delay) {
+ const start = performance.now();
+ try {
+ await retryFetch(testUrl, retries, delay);
+ } catch (err) {
+ // Expected error due to 404
+ }
+ return performance.now() - start;
+ }
+ // because test system can be slow, requests should take between 40-200ms when retry delay is 20ms and 2 retries
+ const firstDuration = await measureFetchDuration(2, 20);
+ expect(firstDuration).to.be.above(40);
+ expect(firstDuration).to.be.below(200);
+
+ // because test system can be slow, requests should take between 200-360ms when retry delay is 100ms and 2 retries
+ const secondDuration = await measureFetchDuration(2, 100);
+ expect(secondDuration).to.be.above(200);
+ expect(secondDuration).to.be.below(360);
+
+ // because of longer delay between requests, the difference between 2 retries with 20ms delay
+ // and 2 retries with 100ms delay should be 160ms but because performance slightly varies, there is a 100ms threshold for test failure
+ const expectedDifference = 100;
+ const allowedVariance = 100;
+ const durationDifference = secondDuration - firstDuration;
+
+ expect(durationDifference).to.be.within(
+ expectedDifference - allowedVariance,
+ expectedDifference + allowedVariance,
+ );
+ });
+
+ it('fetch that gives 200 should not be retried', async () => {
fetchMock.get(testUrl, testJSONResponse);
- retryFetch(testUrl, 5, 10)
- .then(res => res.json())
- .then(
- result => {
- // calls has array of requests made to given URL
- const calls = fetchMock.calls(
- 'https://dev-api.digitransit.fi/timetables/v1/hsl/routes/routes.json',
- );
- expect(calls.length).to.equal(1);
- fetchMock.restore();
- done();
- },
- err => {
- assert.fail('No error should have been thrown');
- },
- );
+ try {
+ await retryFetch(testUrl, 5, 10);
+ } catch (err) {
+ assert.fail('No error should have been thrown');
+ }
+ const calls = fetchMock.callHistory.calls(
+ 'https://dev-api.digitransit.fi/timetables/v1/hsl/routes/routes.json',
+ );
+ expect(calls.length).to.equal(1);
});
- it('fetch that gives 200 should have correct result data', done => {
+ it('fetch that gives 200 should have correct result data', async () => {
fetchMock.get(testUrl, testJSONResponse);
- retryFetch(testUrl, 5, 10)
- .then(res => res.json())
- .then(
- result => {
- expect(result.test).to.equal(3);
- fetchMock.restore();
- done();
- },
- err => {
- assert.fail('No error should have been thrown');
- },
- );
+
+ try {
+ const res = await retryFetch(testUrl, 5, 10);
+ const data = await res.json();
+
+ expect(data).to.have.property('test', 3);
+ } catch (err) {
+ assert.fail(`Request failed unexpectedly: ${err.message}`);
+ }
});
});
diff --git a/test/unit/component/Itinerary.test.js b/test/unit/views/ItineraryPage/component/Itinerary.test.js
similarity index 97%
rename from test/unit/component/Itinerary.test.js
rename to test/unit/views/ItineraryPage/component/Itinerary.test.js
index 3894419812..eac5a2d45f 100644
--- a/test/unit/component/Itinerary.test.js
+++ b/test/unit/views/ItineraryPage/component/Itinerary.test.js
@@ -2,17 +2,23 @@ import { expect } from 'chai';
import { describe, it } from 'mocha';
import React from 'react';
-import { mockContext, mockChildContextTypes } from '../helpers/mock-context';
-import { mountWithIntl, shallowWithIntl } from '../helpers/mock-intl-enzyme';
import {
component as Itinerary,
ModeLeg,
- ViaLeg,
RouteLeg,
-} from '../../../app/component/itinerary/Itinerary';
-import { AlertSeverityLevelType } from '../../../app/constants';
-import RouteNumberContainer from '../../../app/component/RouteNumberContainer';
-import dcw12 from '../test-data/dcw12';
+ ViaLeg,
+} from '../../../../../app/component/itinerary/Itinerary';
+import RouteNumberContainer from '../../../../../app/component/RouteNumberContainer';
+import { AlertSeverityLevelType } from '../../../../../app/constants';
+import {
+ mockChildContextTypes,
+ mockContext,
+} from '../../../helpers/mock-context';
+import {
+ mountWithIntl,
+ shallowWithIntl,
+} from '../../../helpers/mock-intl-enzyme';
+import dcw12 from '../../../test-data/dcw12';
const defaultProps = {
breakpoint: 'large',
diff --git a/test/unit/component/ItineraryList.test.js b/test/unit/views/ItineraryPage/component/ItineraryList.test.js
similarity index 86%
rename from test/unit/component/ItineraryList.test.js
rename to test/unit/views/ItineraryPage/component/ItineraryList.test.js
index b797a64255..0e20fca31b 100644
--- a/test/unit/component/ItineraryList.test.js
+++ b/test/unit/views/ItineraryPage/component/ItineraryList.test.js
@@ -1,8 +1,11 @@
import React from 'react';
-import { mockContext, mockChildContextTypes } from '../helpers/mock-context';
-import { mountWithIntl } from '../helpers/mock-intl-enzyme';
-import { Component as ItineraryList } from '../../../app/component/itinerary/ItineraryList';
+import { Component as ItineraryList } from '../../../../../app/component/itinerary/ItineraryList';
+import {
+ mockChildContextTypes,
+ mockContext,
+} from '../../../helpers/mock-context';
+import { mountWithIntl } from '../../../helpers/mock-intl-enzyme';
const noop = () => {};
diff --git a/test/unit/views/ItineraryPage/component/NavigatorIntro.test.js b/test/unit/views/ItineraryPage/component/NavigatorIntro.test.js
new file mode 100644
index 0000000000..f6b68b2209
--- /dev/null
+++ b/test/unit/views/ItineraryPage/component/NavigatorIntro.test.js
@@ -0,0 +1,88 @@
+import { assert } from 'chai';
+import { describe, it } from 'mocha';
+import React from 'react';
+
+import NavigatorIntro from '../../../../../app/component/itinerary/NavigatorIntro/NavigatorIntro';
+import {
+ mockChildContextTypes,
+ mockContext,
+} from '../../../helpers/mock-context';
+import { mountWithIntl } from '../../../helpers/mock-intl-enzyme';
+
+const defaultProps = {
+ onClose: () => {},
+};
+
+describe('', () => {
+ it('should render logo if prop is present', () => {
+ const wrapper = mountWithIntl(
+ ,
+ {
+ context: {
+ ...mockContext,
+ },
+ childContextTypes: { ...mockChildContextTypes },
+ },
+ );
+
+ expect(
+ wrapper.find('div.navigator-intro-modal-content img'),
+ ).to.have.lengthOf(1);
+ });
+
+ it('should not render logo if prop is missing', () => {
+ const wrapper = mountWithIntl(, {
+ context: {
+ ...mockContext,
+ },
+ childContextTypes: { ...mockChildContextTypes },
+ });
+
+ assert(wrapper.find('div.navigator-intro-modal-content img'), undefined);
+ });
+
+ it('should render login tip if login is allowed and user is not logged in', () => {
+ const wrapper = mountWithIntl(
+ ,
+ {
+ context: {
+ ...mockContext,
+ config: { CONFIG: 'default', allowLogin: true },
+ },
+ childContextTypes: { ...mockChildContextTypes },
+ },
+ );
+
+ expect(wrapper.find('div.login-tip')).to.have.lengthOf(1);
+ });
+
+ it('should not render login tip if login is not allowed and user is not logged in', () => {
+ const wrapper = mountWithIntl(
+ ,
+ {
+ context: {
+ ...mockContext,
+ config: { CONFIG: 'default', allowLogin: true },
+ },
+ childContextTypes: { ...mockChildContextTypes },
+ },
+ );
+
+ assert(wrapper.find('div.login-tip'), undefined);
+ });
+
+ it('should not render login tip if login is allowed and user logged in', () => {
+ const wrapper = mountWithIntl(
+ ,
+ {
+ context: {
+ ...mockContext,
+ config: { CONFIG: 'default', allowLogin: true },
+ },
+ childContextTypes: { ...mockChildContextTypes },
+ },
+ );
+
+ assert(wrapper.find('div.login-tip'), undefined);
+ });
+});
diff --git a/yarn.lock b/yarn.lock
index 1b00cb003e..d8c2d7e8d6 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -283,7 +283,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/core@npm:7.23.9, @babel/core@npm:^7.0.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.7.5":
+"@babel/core@npm:7.23.9, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.7.5":
version: 7.23.9
resolution: "@babel/core@npm:7.23.9"
dependencies:
@@ -1968,11 +1968,11 @@ __metadata:
languageName: unknown
linkType: soft
-"@digitransit-component/digitransit-component-autosuggest-panel@^3.0.8, @digitransit-component/digitransit-component-autosuggest-panel@workspace:digitransit-component/packages/digitransit-component-autosuggest-panel":
+"@digitransit-component/digitransit-component-autosuggest-panel@^4.0.1, @digitransit-component/digitransit-component-autosuggest-panel@workspace:digitransit-component/packages/digitransit-component-autosuggest-panel":
version: 0.0.0-use.local
resolution: "@digitransit-component/digitransit-component-autosuggest-panel@workspace:digitransit-component/packages/digitransit-component-autosuggest-panel"
peerDependencies:
- "@digitransit-component/digitransit-component-autosuggest": ^2.0.8
+ "@digitransit-component/digitransit-component-autosuggest": ^3.0.1
"@digitransit-component/digitransit-component-icon": ^1.0.1
"@hsl-fi/sass": ^0.2.0
classnames: 2.2.6
@@ -1988,11 +1988,11 @@ __metadata:
languageName: unknown
linkType: soft
-"@digitransit-component/digitransit-component-autosuggest@^2.0.8, @digitransit-component/digitransit-component-autosuggest@workspace:digitransit-component/packages/digitransit-component-autosuggest":
+"@digitransit-component/digitransit-component-autosuggest@^3.0.1, @digitransit-component/digitransit-component-autosuggest@workspace:digitransit-component/packages/digitransit-component-autosuggest":
version: 0.0.0-use.local
resolution: "@digitransit-component/digitransit-component-autosuggest@workspace:digitransit-component/packages/digitransit-component-autosuggest"
dependencies:
- "@digitransit-search-util/digitransit-search-util-execute-search-immidiate": ^2.0.3
+ "@digitransit-search-util/digitransit-search-util-execute-search-immidiate": ^3.0.1
"@digitransit-search-util/digitransit-search-util-get-label": ^1.0.0
"@digitransit-search-util/digitransit-search-util-uniq-by-label": ^2.0.0
"@hsl-fi/hooks": ^1.2.4
@@ -2166,8 +2166,8 @@ __metadata:
version: 0.0.0-use.local
resolution: "@digitransit-component/digitransit-component@workspace:digitransit-component/packages/digitransit-component"
dependencies:
- "@digitransit-component/digitransit-component-autosuggest": ^2.0.8
- "@digitransit-component/digitransit-component-autosuggest-panel": ^3.0.8
+ "@digitransit-component/digitransit-component-autosuggest": ^3.0.1
+ "@digitransit-component/digitransit-component-autosuggest-panel": ^4.0.1
"@digitransit-component/digitransit-component-control-panel": ^2.0.0
"@digitransit-component/digitransit-component-favourite-bar": 2.0.5
"@digitransit-component/digitransit-component-favourite-editing-modal": ^2.0.2
@@ -2203,7 +2203,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@digitransit-search-util/digitransit-search-util-execute-search-immidiate@^2.0.3, @digitransit-search-util/digitransit-search-util-execute-search-immidiate@workspace:digitransit-search-util/packages/digitransit-search-util-execute-search-immidiate":
+"@digitransit-search-util/digitransit-search-util-execute-search-immidiate@^3.0.1, @digitransit-search-util/digitransit-search-util-execute-search-immidiate@workspace:digitransit-search-util/packages/digitransit-search-util-execute-search-immidiate":
version: 0.0.0-use.local
resolution: "@digitransit-search-util/digitransit-search-util-execute-search-immidiate@workspace:digitransit-search-util/packages/digitransit-search-util-execute-search-immidiate"
dependencies:
@@ -2236,7 +2236,7 @@ __metadata:
resolution: "@digitransit-search-util/digitransit-search-util-get-json@workspace:digitransit-search-util/packages/digitransit-search-util-get-json"
dependencies:
"@digitransit-search-util/digitransit-search-util-serialize": 0.0.2
- axios: 1.6.7
+ axios: 1.7.7
languageName: unknown
linkType: soft
@@ -5453,62 +5453,6 @@ __metadata:
languageName: node
linkType: hard
-"@redis/bloom@npm:1.2.0":
- version: 1.2.0
- resolution: "@redis/bloom@npm:1.2.0"
- peerDependencies:
- "@redis/client": ^1.0.0
- checksum: 8c214227287d6b278109098bca00afc601cf84f7da9c6c24f4fa7d3854b946170e5893aa86ed607ba017a4198231d570541c79931b98b6d50b262971022d1d6c
- languageName: node
- linkType: hard
-
-"@redis/client@npm:1.5.14":
- version: 1.5.14
- resolution: "@redis/client@npm:1.5.14"
- dependencies:
- cluster-key-slot: 1.1.2
- generic-pool: 3.9.0
- yallist: 4.0.0
- checksum: f401997c6df92055c1a59385ed2fed7ee9295860f39935821107ea2570f76168dd1b25b71a3b37b9bbfaba26a9d18080d6bcd101a4bfc3852f72cc20576c6e7d
- languageName: node
- linkType: hard
-
-"@redis/graph@npm:1.1.1":
- version: 1.1.1
- resolution: "@redis/graph@npm:1.1.1"
- peerDependencies:
- "@redis/client": ^1.0.0
- checksum: caf9b9a3ff82a08ae543c356a3fed548399ae79aba5ed08ce6cf1b522b955eb5cee4406b0ed0c6899345f8fbc06dfd6cd51304ae8422c3ebbc468f53294dc509
- languageName: node
- linkType: hard
-
-"@redis/json@npm:1.0.6":
- version: 1.0.6
- resolution: "@redis/json@npm:1.0.6"
- peerDependencies:
- "@redis/client": ^1.0.0
- checksum: 9fda29abc339c72593f34a23f8023b715c1f8f3d73f7c59889af02f25589bac2ad57073ad08d0b8da42cd8c258665a7b38d39e761e92945cc27aca651c8a93a5
- languageName: node
- linkType: hard
-
-"@redis/search@npm:1.1.6":
- version: 1.1.6
- resolution: "@redis/search@npm:1.1.6"
- peerDependencies:
- "@redis/client": ^1.0.0
- checksum: 0d87e6a9e40e62e46064ccfccca9a5ba7ce608890740415008acb1e83a02690edf37ac1ee878bcc0702d30a2eeba7776e7b467b71f87d8e7b278f38637161e16
- languageName: node
- linkType: hard
-
-"@redis/time-series@npm:1.0.5":
- version: 1.0.5
- resolution: "@redis/time-series@npm:1.0.5"
- peerDependencies:
- "@redis/client": ^1.0.0
- checksum: 6bbdb0b793dcbd13518aa60a09a980f953554e4c745bfacc1611baa8098f360e0378e8ee6b7faf600a67f1de83f4b68bbec6f95a0740faee6164c14be3a30752
- languageName: node
- linkType: hard
-
"@repeaterjs/repeater@npm:3.0.4":
version: 3.0.4
resolution: "@repeaterjs/repeater@npm:3.0.4"
@@ -5856,6 +5800,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/glob-to-regexp@npm:^0.4.4":
+ version: 0.4.4
+ resolution: "@types/glob-to-regexp@npm:0.4.4"
+ checksum: be9c924d664592a16129c825aa392365335ce455c34e1c9d3f6dd8b45371088bb5d4a45bbb576559f2b63d4f8bcf464cbd5baafb08cdf89b71d3b6a79356b747
+ languageName: node
+ linkType: hard
+
"@types/glob@npm:^7.1.1":
version: 7.2.0
resolution: "@types/glob@npm:7.2.0"
@@ -6690,7 +6641,7 @@ __metadata:
languageName: node
linkType: hard
-"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.7, accepts@npm:~1.3.8":
+"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8":
version: 1.3.8
resolution: "accepts@npm:1.3.8"
dependencies:
@@ -7622,14 +7573,14 @@ __metadata:
languageName: node
linkType: hard
-"axios@npm:1.6.7, axios@npm:^1.6.1":
- version: 1.6.7
- resolution: "axios@npm:1.6.7"
+"axios@npm:1.7.7, axios@npm:^1.6.1":
+ version: 1.7.7
+ resolution: "axios@npm:1.7.7"
dependencies:
- follow-redirects: ^1.15.4
+ follow-redirects: ^1.15.6
form-data: ^4.0.0
proxy-from-env: ^1.1.0
- checksum: 87d4d429927d09942771f3b3a6c13580c183e31d7be0ee12f09be6d5655304996bb033d85e54be81606f4e89684df43be7bf52d14becb73a12727bf33298a082
+ checksum: 882d4fe0ec694a07c7f5c1f68205eb6dc5a62aecdb632cc7a4a3d0985188ce3030e0b277e1a8260ac3f194d314ae342117660a151fabffdc5081ca0b5a8b47fe
languageName: node
linkType: hard
@@ -8050,24 +8001,6 @@ __metadata:
languageName: node
linkType: hard
-"body-parser@npm:1.19.0":
- version: 1.19.0
- resolution: "body-parser@npm:1.19.0"
- dependencies:
- bytes: 3.1.0
- content-type: ~1.0.4
- debug: 2.6.9
- depd: ~1.1.2
- http-errors: 1.7.2
- iconv-lite: 0.4.24
- on-finished: ~2.3.0
- qs: 6.7.0
- raw-body: 2.4.0
- type-is: ~1.6.17
- checksum: 490231b4c89bbd43112762f7ba8e5342c174a6c9f64284a3b0fcabf63277e332f8316765596f1e5b15e4f3a6cf0422e005f4bb3149ed3a224bb025b7a36b9ac1
- languageName: node
- linkType: hard
-
"body-parser@npm:1.20.1":
version: 1.20.1
resolution: "body-parser@npm:1.20.1"
@@ -8088,6 +8021,26 @@ __metadata:
languageName: node
linkType: hard
+"body-parser@npm:1.20.3":
+ version: 1.20.3
+ resolution: "body-parser@npm:1.20.3"
+ dependencies:
+ bytes: 3.1.2
+ content-type: ~1.0.5
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.13.0
+ raw-body: 2.5.2
+ type-is: ~1.6.18
+ unpipe: 1.0.0
+ checksum: 1a35c59a6be8d852b00946330141c4f142c6af0f970faa87f10ad74f1ee7118078056706a05ae3093c54dabca9cd3770fa62a170a85801da1a4324f04381167d
+ languageName: node
+ linkType: hard
+
"body@npm:^5.1.0":
version: 5.1.0
resolution: "body@npm:5.1.0"
@@ -8456,13 +8409,6 @@ __metadata:
languageName: node
linkType: hard
-"bytes@npm:3.1.0":
- version: 3.1.0
- resolution: "bytes@npm:3.1.0"
- checksum: 7c3b21c5d9d44ed455460d5d36a31abc6fa2ce3807964ba60a4b03fd44454c8cf07bb0585af83bfde1c5cc2ea4bbe5897bc3d18cd15e0acf25a3615a35aba2df
- languageName: node
- linkType: hard
-
"bytes@npm:3.1.2":
version: 3.1.2
resolution: "bytes@npm:3.1.2"
@@ -8629,6 +8575,19 @@ __metadata:
languageName: node
linkType: hard
+"call-bind@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "call-bind@npm:1.0.7"
+ dependencies:
+ es-define-property: ^1.0.0
+ es-errors: ^1.3.0
+ function-bind: ^1.1.2
+ get-intrinsic: ^1.2.4
+ set-function-length: ^1.2.1
+ checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029
+ languageName: node
+ linkType: hard
+
"call-me-maybe@npm:^1.0.1":
version: 1.0.2
resolution: "call-me-maybe@npm:1.0.2"
@@ -9272,13 +9231,6 @@ __metadata:
languageName: node
linkType: hard
-"cluster-key-slot@npm:1.1.2":
- version: 1.1.2
- resolution: "cluster-key-slot@npm:1.1.2"
- checksum: be0ad2d262502adc998597e83f9ded1b80f827f0452127c5a37b22dfca36bab8edf393f7b25bb626006fb9fb2436106939ede6d2d6ecf4229b96a47f27edd681
- languageName: node
- linkType: hard
-
"co@npm:^4.6.0":
version: 4.6.0
resolution: "co@npm:4.6.0"
@@ -9688,12 +9640,10 @@ __metadata:
languageName: node
linkType: hard
-"connect-redis@npm:7.1.1":
- version: 7.1.1
- resolution: "connect-redis@npm:7.1.1"
- peerDependencies:
- express-session: ">=1"
- checksum: ac91ee818d0f467866b6982f66b3423fee58de9da3562618f6d1df2ddeea426354c1efe70b3f799be1b52e3cc67f2043b9ae203678fd3ff9db5dff44b078f0ca
+"connect-redis@npm:5.0.0":
+ version: 5.0.0
+ resolution: "connect-redis@npm:5.0.0"
+ checksum: 0eca205a42b68842c6b461d3cb51bde2cbc99984a0af51e99701f07a55209f3f60e1e34dd6d6cc81aa4fd462cd2d9881bf9b2f44ca3bbcd4b496514822a5e585
languageName: node
linkType: hard
@@ -9718,15 +9668,6 @@ __metadata:
languageName: node
linkType: hard
-"content-disposition@npm:0.5.3":
- version: 0.5.3
- resolution: "content-disposition@npm:0.5.3"
- dependencies:
- safe-buffer: 5.1.2
- checksum: 95bf164c0b0b8199d3f44b7631e51b37f683c6a90b9baa4315bd3d405a6d1bc81b7346f0981046aa004331fb3d7a28b629514d01fc209a5251573fc7e4d33380
- languageName: node
- linkType: hard
-
"content-disposition@npm:0.5.4":
version: 0.5.4
resolution: "content-disposition@npm:0.5.4"
@@ -9736,7 +9677,7 @@ __metadata:
languageName: node
linkType: hard
-"content-type@npm:~1.0.4":
+"content-type@npm:~1.0.4, content-type@npm:~1.0.5":
version: 1.0.5
resolution: "content-type@npm:1.0.5"
checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766
@@ -10161,7 +10102,7 @@ __metadata:
languageName: node
linkType: hard
-"core-js@npm:^3.0.0, core-js@npm:^3.29.0, core-js@npm:^3.30.2, core-js@npm:^3.6.1":
+"core-js@npm:^3.29.0, core-js@npm:^3.30.2, core-js@npm:^3.6.1":
version: 3.35.1
resolution: "core-js@npm:3.35.1"
checksum: e246af6b634be3763ffe3ce6ac4601b4dc5b928006fb6c95e5d08ecd82a2413bf36f00ffe178b89c9a8e94000288933a78a9881b2c9498e6cf312b031013b952
@@ -10997,6 +10938,17 @@ __metadata:
languageName: node
linkType: hard
+"define-data-property@npm:^1.1.4":
+ version: 1.1.4
+ resolution: "define-data-property@npm:1.1.4"
+ dependencies:
+ es-define-property: ^1.0.0
+ es-errors: ^1.3.0
+ gopd: ^1.0.1
+ checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b
+ languageName: node
+ linkType: hard
+
"define-lazy-prop@npm:^2.0.0":
version: 2.0.0
resolution: "define-lazy-prop@npm:2.0.0"
@@ -11109,13 +11061,6 @@ __metadata:
languageName: node
linkType: hard
-"destroy@npm:~1.0.4":
- version: 1.0.4
- resolution: "destroy@npm:1.0.4"
- checksum: da9ab4961dc61677c709da0c25ef01733042614453924d65636a7db37308fef8a24cd1e07172e61173d471ca175371295fbc984b0af5b2b4ff47cd57bd784c03
- languageName: node
- linkType: hard
-
"detect-indent@npm:^5.0.0":
version: 5.0.0
resolution: "detect-indent@npm:5.0.0"
@@ -11232,6 +11177,7 @@ __metadata:
"@commitlint/cli": 9.1.2
"@commitlint/config-conventional": 9.1.2
"@graphql-eslint/eslint-plugin": 3.20.1
+ "@hsl-fi/button": ^1.2.4
"@hsl-fi/container-spinner": 0.3.2
"@hsl-fi/hooks": 1.2.4
"@hsl-fi/modal": " ^0.3.2"
@@ -11251,7 +11197,7 @@ __metadata:
async: ^3.2.2
autoprefixer: 9.8.6
axe-core: ^4.7.2
- axios: 1.6.7
+ axios: 1.7.7
babel-loader: 8.2.5
babel-plugin-dynamic-import-node: 2.3.3
babel-plugin-inline-react-svg: 2.0.2
@@ -11259,11 +11205,11 @@ __metadata:
babel-plugin-relay: 16.2.0
babel-plugin-transform-react-remove-prop-types: 0.4.24
base64-arraybuffer: 0.1.5
- body-parser: 1.19.0
+ body-parser: 1.20.3
chai: 4.3.7
classnames: 2.2.6
compression-webpack-plugin: 5.0.2
- connect-redis: 7.1.1
+ connect-redis: 5.0.0
cookie-parser: 1.4.5
copy-webpack-plugin: 6.1.0
css-loader: ^5.2.7
@@ -11283,14 +11229,14 @@ __metadata:
eslint-plugin-react: 7.33.2
eslint-plugin-react-hooks: 4.6.0
esm: 3.2.25
- express: 4.17.1
+ express: 4.20.0
express-http-proxy: 1.6.2
express-session: 1.18.0
express-static-gzip: 2.0.8
farce: 0.4.5
fast-xml-parser: 4.3.4
favicons-webpack-plugin: 4.2.0
- fetch-mock: 9.11.0
+ fetch-mock: ^12.0.2
file-loader: 5.0.2
fluxible: 1.4.0
fluxible-addons-react: 0.2.16
@@ -11364,10 +11310,10 @@ __metadata:
react-swipe: 6.0.4
react-truncate-markup: 5.1.0
recompose: 0.30.0
- redis: 4.6.13
+ redis: 2.8.0
relay-compiler: 16.2.0
relay-runtime: 16.2.0
- rollup: 2.35.1
+ rollup: 2.79.2
rollup-plugin-babel: 4.4.0
rollup-plugin-commonjs: 10.1.0
rollup-plugin-peer-deps-external: 2.2.4
@@ -11712,10 +11658,17 @@ __metadata:
languageName: node
linkType: hard
+"double-ended-queue@npm:^2.1.0-0":
+ version: 2.1.0-0
+ resolution: "double-ended-queue@npm:2.1.0-0"
+ checksum: 3030cf9dcf6f8e7d8cb6ae5b7304890445d7c32233a614e400ba7b378086ad76f5822d0e501afd5ffe0af1de4bcb842fa23d4c79174d54f6566399435fafc271
+ languageName: node
+ linkType: hard
+
"dset@npm:^3.1.2":
- version: 3.1.3
- resolution: "dset@npm:3.1.3"
- checksum: 5db964a36c60c51aa3f7088bfe1dc5c0eedd9a6ef3b216935bb70ef4a7b8fc40fd2f9bb16b9a4692c9c9772cea60cfefb108d2d09fbd53c85ea8f6cd54502d6a
+ version: 3.1.4
+ resolution: "dset@npm:3.1.4"
+ checksum: 9a7677e9ffd3c13ad850f7cf367aa94b39984006510e84c3c09b7b88bba0a5b3b7196d85a99d0c4cae4e47d67bdeca43dc1834a41d80f31bcdc86dd26121ecec
languageName: node
linkType: hard
@@ -11805,8 +11758,8 @@ __metadata:
linkType: hard
"elliptic@npm:^6.5.3, elliptic@npm:^6.5.4":
- version: 6.5.4
- resolution: "elliptic@npm:6.5.4"
+ version: 6.6.0
+ resolution: "elliptic@npm:6.6.0"
dependencies:
bn.js: ^4.11.9
brorand: ^1.1.0
@@ -11815,7 +11768,7 @@ __metadata:
inherits: ^2.0.4
minimalistic-assert: ^1.0.1
minimalistic-crypto-utils: ^1.0.1
- checksum: d56d21fd04e97869f7ffcc92e18903b9f67f2d4637a23c860492fbbff5a3155fd9ca0184ce0c865dd6eb2487d234ce9551335c021c376cd2d3b7cb749c7d10f4
+ checksum: e912349b883e694bfe65005214237a470c9a098a6ba36fd24396d0ab07feb399920c0738aeed1aed6cf5dca9c64fd479e212faed3a75c9d81453671ef0de5157
languageName: node
linkType: hard
@@ -11875,6 +11828,13 @@ __metadata:
languageName: node
linkType: hard
+"encodeurl@npm:~2.0.0":
+ version: 2.0.0
+ resolution: "encodeurl@npm:2.0.0"
+ checksum: abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe
+ languageName: node
+ linkType: hard
+
"encoding@npm:^0.1.11, encoding@npm:^0.1.12, encoding@npm:^0.1.13":
version: 0.1.13
resolution: "encoding@npm:0.1.13"
@@ -12139,6 +12099,15 @@ __metadata:
languageName: node
linkType: hard
+"es-define-property@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "es-define-property@npm:1.0.0"
+ dependencies:
+ get-intrinsic: ^1.2.4
+ checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6
+ languageName: node
+ linkType: hard
+
"es-errors@npm:^1.0.0, es-errors@npm:^1.1.0, es-errors@npm:^1.2.1, es-errors@npm:^1.3.0":
version: 1.3.0
resolution: "es-errors@npm:1.3.0"
@@ -12882,41 +12851,42 @@ __metadata:
languageName: node
linkType: hard
-"express@npm:4.17.1":
- version: 4.17.1
- resolution: "express@npm:4.17.1"
+"express@npm:4.20.0":
+ version: 4.20.0
+ resolution: "express@npm:4.20.0"
dependencies:
- accepts: ~1.3.7
+ accepts: ~1.3.8
array-flatten: 1.1.1
- body-parser: 1.19.0
- content-disposition: 0.5.3
+ body-parser: 1.20.3
+ content-disposition: 0.5.4
content-type: ~1.0.4
- cookie: 0.4.0
+ cookie: 0.6.0
cookie-signature: 1.0.6
debug: 2.6.9
- depd: ~1.1.2
- encodeurl: ~1.0.2
+ depd: 2.0.0
+ encodeurl: ~2.0.0
escape-html: ~1.0.3
etag: ~1.8.1
- finalhandler: ~1.1.2
+ finalhandler: 1.2.0
fresh: 0.5.2
- merge-descriptors: 1.0.1
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.3
methods: ~1.1.2
- on-finished: ~2.3.0
+ on-finished: 2.4.1
parseurl: ~1.3.3
- path-to-regexp: 0.1.7
- proxy-addr: ~2.0.5
- qs: 6.7.0
+ path-to-regexp: 0.1.10
+ proxy-addr: ~2.0.7
+ qs: 6.11.0
range-parser: ~1.2.1
- safe-buffer: 5.1.2
- send: 0.17.1
- serve-static: 1.14.1
- setprototypeof: 1.1.1
- statuses: ~1.5.0
+ safe-buffer: 5.2.1
+ send: 0.19.0
+ serve-static: 1.16.0
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
type-is: ~1.6.18
utils-merge: 1.0.1
vary: ~1.1.2
- checksum: d964e9e17af331ea6fa2f84999b063bc47189dd71b4a735df83f9126d3bb2b92e830f1cb1d7c2742530eb625e2689d7a9a9c71f0c3cc4dd6015c3cd32a01abd5
+ checksum: faa11bffa16be97b26d9f38187e569378c01cad0b92fbd02094fb4e35a224dc5177cc9cc6849141702da80d2d8cbe857c60a7e622e8106695405dc27e38fb3ee
languageName: node
linkType: hard
@@ -13318,26 +13288,16 @@ __metadata:
languageName: node
linkType: hard
-"fetch-mock@npm:9.11.0":
- version: 9.11.0
- resolution: "fetch-mock@npm:9.11.0"
+"fetch-mock@npm:^12.0.2":
+ version: 12.0.2
+ resolution: "fetch-mock@npm:12.0.2"
dependencies:
- "@babel/core": ^7.0.0
- "@babel/runtime": ^7.0.0
- core-js: ^3.0.0
- debug: ^4.1.1
- glob-to-regexp: ^0.4.0
- is-subset: ^0.1.1
- lodash.isequal: ^4.5.0
- path-to-regexp: ^2.2.1
- querystring: ^0.2.0
- whatwg-url: ^6.5.0
- peerDependencies:
- node-fetch: "*"
- peerDependenciesMeta:
- node-fetch:
- optional: true
- checksum: debc4dd83bcda79b0aa71c38d08da6036906cdc49393343eb3426112314a7e57557255664f745d2e3f0b9b2a6e852bd3a564ae3f08332c27e422d3441bb865bd
+ "@types/glob-to-regexp": ^0.4.4
+ dequal: ^2.0.3
+ glob-to-regexp: ^0.4.1
+ is-subset-of: ^3.1.10
+ regexparam: ^3.0.0
+ checksum: 6de234c4a3e2e36dd1505a4cfc19138e75b7dd123665a33a85047d9a675cbe88309f995d0ec8a8df32d8d9b028c6607e6e1a275b2a5c04c420b21c22d88568d8
languageName: node
linkType: hard
@@ -13471,21 +13431,6 @@ __metadata:
languageName: node
linkType: hard
-"finalhandler@npm:~1.1.2":
- version: 1.1.2
- resolution: "finalhandler@npm:1.1.2"
- dependencies:
- debug: 2.6.9
- encodeurl: ~1.0.2
- escape-html: ~1.0.3
- on-finished: ~2.3.0
- parseurl: ~1.3.3
- statuses: ~1.5.0
- unpipe: ~1.0.0
- checksum: 617880460c5138dd7ccfd555cb5dde4d8f170f4b31b8bd51e4b646bb2946c30f7db716428a1f2882d730d2b72afb47d1f67cc487b874cb15426f95753a88965e
- languageName: node
- linkType: hard
-
"find-cache-dir@npm:^2.0.0, find-cache-dir@npm:^2.1.0":
version: 2.1.0
resolution: "find-cache-dir@npm:2.1.0"
@@ -13668,7 +13613,7 @@ __metadata:
languageName: node
linkType: hard
-"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.15.4":
+"follow-redirects@npm:^1.0.0":
version: 1.15.5
resolution: "follow-redirects@npm:1.15.5"
peerDependenciesMeta:
@@ -13678,6 +13623,16 @@ __metadata:
languageName: node
linkType: hard
+"follow-redirects@npm:^1.15.6":
+ version: 1.15.9
+ resolution: "follow-redirects@npm:1.15.9"
+ peerDependenciesMeta:
+ debug:
+ optional: true
+ checksum: 859e2bacc7a54506f2bf9aacb10d165df78c8c1b0ceb8023f966621b233717dab56e8d08baadc3ad3b9db58af290413d585c999694b7c146aaf2616340c3d2a6
+ languageName: node
+ linkType: hard
+
"for-each@npm:^0.3.3":
version: 0.3.3
resolution: "for-each@npm:0.3.3"
@@ -13956,16 +13911,6 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@npm:~2.1.2":
- version: 2.1.3
- resolution: "fsevents@npm:2.1.3"
- dependencies:
- node-gyp: latest
- checksum: b5ec0516b44d75b60af5c01ff80a80cd995d175e4640d2a92fbabd02991dd664d76b241b65feef0775c23d531c3c74742c0fbacd6205af812a9c3cef59f04292
- conditions: os=darwin
- languageName: node
- linkType: hard
-
"fsevents@patch:fsevents@^1.2.7#~builtin":
version: 1.2.13
resolution: "fsevents@patch:fsevents@npm%3A1.2.13#~builtin::version=1.2.13&hash=d11327"
@@ -13985,15 +13930,6 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@patch:fsevents@~2.1.2#~builtin":
- version: 2.1.3
- resolution: "fsevents@patch:fsevents@npm%3A2.1.3#~builtin::version=2.1.3&hash=31d12a"
- dependencies:
- node-gyp: latest
- conditions: os=darwin
- languageName: node
- linkType: hard
-
"function-bind@npm:^1.1.1, function-bind@npm:^1.1.2":
version: 1.1.2
resolution: "function-bind@npm:1.1.2"
@@ -14070,13 +14006,6 @@ __metadata:
languageName: node
linkType: hard
-"generic-pool@npm:3.9.0":
- version: 3.9.0
- resolution: "generic-pool@npm:3.9.0"
- checksum: 3d89e9b2018d2e3bbf44fec78c76b2b7d56d6a484237aa9daf6ff6eedb14b0899dadd703b5d810219baab2eb28e5128fb18b29e91e602deb2eccac14492d8ca8
- languageName: node
- linkType: hard
-
"genfun@npm:^5.0.0":
version: 5.0.0
resolution: "genfun@npm:5.0.0"
@@ -14451,7 +14380,7 @@ __metadata:
languageName: node
linkType: hard
-"glob-to-regexp@npm:^0.4.0":
+"glob-to-regexp@npm:^0.4.1":
version: 0.4.1
resolution: "glob-to-regexp@npm:0.4.1"
checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167
@@ -14873,6 +14802,15 @@ __metadata:
languageName: node
linkType: hard
+"has-property-descriptors@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "has-property-descriptors@npm:1.0.2"
+ dependencies:
+ es-define-property: ^1.0.0
+ checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3
+ languageName: node
+ linkType: hard
+
"has-proto@npm:^1.0.1":
version: 1.0.1
resolution: "has-proto@npm:1.0.1"
@@ -15304,19 +15242,6 @@ __metadata:
languageName: node
linkType: hard
-"http-errors@npm:1.7.2":
- version: 1.7.2
- resolution: "http-errors@npm:1.7.2"
- dependencies:
- depd: ~1.1.2
- inherits: 2.0.3
- setprototypeof: 1.1.1
- statuses: ">= 1.5.0 < 2"
- toidentifier: 1.0.0
- checksum: 5534b0ae08e77f5a45a2380f500e781f6580c4ff75b816cb1f09f99a290b57e78a518be6d866db1b48cca6b052c09da2c75fc91fb16a2fe3da3c44d9acbb9972
- languageName: node
- linkType: hard
-
"http-errors@npm:2.0.0":
version: 2.0.0
resolution: "http-errors@npm:2.0.0"
@@ -15342,19 +15267,6 @@ __metadata:
languageName: node
linkType: hard
-"http-errors@npm:~1.7.2":
- version: 1.7.3
- resolution: "http-errors@npm:1.7.3"
- dependencies:
- depd: ~1.1.2
- inherits: 2.0.4
- setprototypeof: 1.1.1
- statuses: ">= 1.5.0 < 2"
- toidentifier: 1.0.0
- checksum: a59f359473f4b3ea78305beee90d186268d6075432622a46fb7483059068a2dd4c854a20ac8cd438883127e06afb78c1309168bde6cdfeed1e3700eb42487d99
- languageName: node
- linkType: hard
-
"http-parser-js@npm:>=0.5.1":
version: 0.5.8
resolution: "http-parser-js@npm:0.5.8"
@@ -15405,8 +15317,8 @@ __metadata:
linkType: hard
"http-proxy-middleware@npm:^2.0.3":
- version: 2.0.6
- resolution: "http-proxy-middleware@npm:2.0.6"
+ version: 2.0.7
+ resolution: "http-proxy-middleware@npm:2.0.7"
dependencies:
"@types/http-proxy": ^1.17.8
http-proxy: ^1.18.1
@@ -15418,7 +15330,7 @@ __metadata:
peerDependenciesMeta:
"@types/express":
optional: true
- checksum: 2ee85bc878afa6cbf34491e972ece0f5be0a3e5c98a60850cf40d2a9a5356e1fc57aab6cff33c1fc37691b0121c3a42602d2b1956c52577e87a5b77b62ae1c3a
+ checksum: 18caa21145917aa1054740353916e8f03f5a3a93bede9106f1f44d84f7b174df17af1c72bf5fade5cc440c2058ee813f47cbb2bdd6ae6874af1cf33e0ac575f3
languageName: node
linkType: hard
@@ -16595,6 +16507,15 @@ __metadata:
languageName: node
linkType: hard
+"is-subset-of@npm:^3.1.10":
+ version: 3.1.10
+ resolution: "is-subset-of@npm:3.1.10"
+ dependencies:
+ typedescriptor: 3.0.2
+ checksum: 98773fc775596dcfbb0f444e037e5ad101319a7932b82d85f706e77f6e53fe5b8bf19a3a8bea950269313c81c7f4ddec51fb107eedb9b51323b2d97a8dfb06c3
+ languageName: node
+ linkType: hard
+
"is-subset@npm:^0.1.1":
version: 0.1.1
resolution: "is-subset@npm:0.1.1"
@@ -19132,6 +19053,13 @@ __metadata:
languageName: node
linkType: hard
+"merge-descriptors@npm:1.0.3":
+ version: 1.0.3
+ resolution: "merge-descriptors@npm:1.0.3"
+ checksum: 52117adbe0313d5defa771c9993fe081e2d2df9b840597e966aadafde04ae8d0e3da46bac7ca4efc37d4d2b839436582659cd49c6a43eacb3fe3050896a105d1
+ languageName: node
+ linkType: hard
+
"merge-stream@npm:^2.0.0":
version: 2.0.0
resolution: "merge-stream@npm:2.0.0"
@@ -19863,13 +19791,6 @@ __metadata:
languageName: node
linkType: hard
-"ms@npm:2.1.1":
- version: 2.1.1
- resolution: "ms@npm:2.1.1"
- checksum: 0078a23cd916a9a7435c413caa14c57d4b4f6e2470e0ab554b6964163c8a4436448ac7ae020e883685475da6b6796cc396b670f579cb275db288a21e3e57721e
- languageName: node
- linkType: hard
-
"ms@npm:2.1.2":
version: 2.1.2
resolution: "ms@npm:2.1.2"
@@ -21567,6 +21488,13 @@ __metadata:
languageName: node
linkType: hard
+"path-to-regexp@npm:0.1.10":
+ version: 0.1.10
+ resolution: "path-to-regexp@npm:0.1.10"
+ checksum: ab7a3b7a0b914476d44030340b0a65d69851af2a0f33427df1476100ccb87d409c39e2182837a96b98fb38c4ef2ba6b87bdad62bb70a2c153876b8061760583c
+ languageName: node
+ linkType: hard
+
"path-to-regexp@npm:0.1.7":
version: 0.1.7
resolution: "path-to-regexp@npm:0.1.7"
@@ -21583,13 +21511,6 @@ __metadata:
languageName: node
linkType: hard
-"path-to-regexp@npm:^2.2.1":
- version: 2.4.0
- resolution: "path-to-regexp@npm:2.4.0"
- checksum: 581175bf2968e51452f2b8c71f10e75c995693668b4ecf7d0b48962fbe0c56830661ca5dd5fd6d8e2f0cc9a045ce07e89af504ab133e1d21887c2712df85b1f4
- languageName: node
- linkType: hard
-
"path-to-regexp@npm:^6.2.1":
version: 6.2.1
resolution: "path-to-regexp@npm:6.2.1"
@@ -23036,7 +22957,7 @@ __metadata:
languageName: node
linkType: hard
-"proxy-addr@npm:~2.0.5, proxy-addr@npm:~2.0.7":
+"proxy-addr@npm:~2.0.7":
version: 2.0.7
resolution: "proxy-addr@npm:2.0.7"
dependencies:
@@ -23179,10 +23100,12 @@ __metadata:
languageName: node
linkType: hard
-"qs@npm:6.7.0":
- version: 6.7.0
- resolution: "qs@npm:6.7.0"
- checksum: dfd5f6adef50e36e908cfa70a6233871b5afe66fbaca37ecc1da352ba29eb2151a3797991948f158bb37fccde51bd57845cb619a8035287bfc24e4591172c347
+"qs@npm:6.13.0":
+ version: 6.13.0
+ resolution: "qs@npm:6.13.0"
+ dependencies:
+ side-channel: ^1.0.6
+ checksum: e9404dc0fc2849245107108ce9ec2766cde3be1b271de0bf1021d049dc5b98d1a2901e67b431ac5509f865420a7ed80b7acb3980099fe1c118a1c5d2e1432ad8
languageName: node
linkType: hard
@@ -23242,13 +23165,6 @@ __metadata:
languageName: node
linkType: hard
-"querystring@npm:^0.2.0":
- version: 0.2.1
- resolution: "querystring@npm:0.2.1"
- checksum: 7b83b45d641e75fd39cd6625ddfd44e7618e741c61e95281b57bbae8fde0afcc12cf851924559e5cc1ef9baa3b1e06e22b164ea1397d65dd94b801f678d9c8ce
- languageName: node
- linkType: hard
-
"querystringify@npm:^2.1.1":
version: 2.2.0
resolution: "querystringify@npm:2.2.0"
@@ -23374,18 +23290,6 @@ __metadata:
languageName: node
linkType: hard
-"raw-body@npm:2.4.0":
- version: 2.4.0
- resolution: "raw-body@npm:2.4.0"
- dependencies:
- bytes: 3.1.0
- http-errors: 1.7.2
- iconv-lite: 0.4.24
- unpipe: 1.0.0
- checksum: 6343906939e018c6e633a34a938a5d6d1e93ffcfa48646e00207d53b418e941953b521473950c079347220944dc75ba10e7b3c08bf97e3ac72c7624882db09bb
- languageName: node
- linkType: hard
-
"raw-body@npm:2.5.1":
version: 2.5.1
resolution: "raw-body@npm:2.5.1"
@@ -23398,7 +23302,7 @@ __metadata:
languageName: node
linkType: hard
-"raw-body@npm:^2.3.0":
+"raw-body@npm:2.5.2, raw-body@npm:^2.3.0":
version: 2.5.2
resolution: "raw-body@npm:2.5.2"
dependencies:
@@ -24144,17 +24048,28 @@ __metadata:
languageName: node
linkType: hard
-"redis@npm:4.6.13":
- version: 4.6.13
- resolution: "redis@npm:4.6.13"
+"redis-commands@npm:^1.2.0":
+ version: 1.7.0
+ resolution: "redis-commands@npm:1.7.0"
+ checksum: d1ff7fbcb5e54768c77f731f1d49679d2a62c3899522c28addb4e2e5813aea8bcac3f22519d71d330224c3f2937f935dfc3d8dc65e90db0f5fe22dc2c1515aa7
+ languageName: node
+ linkType: hard
+
+"redis-parser@npm:^2.6.0":
+ version: 2.6.0
+ resolution: "redis-parser@npm:2.6.0"
+ checksum: 8d4936875e39d56a951e0bbb6653b4da1f7fdd727552c89561c3c78e7ffeb9c3e8820a78454e939b74d1ba20996d62ac179b4fc39d07340d10f8d52740399422
+ languageName: node
+ linkType: hard
+
+"redis@npm:2.8.0":
+ version: 2.8.0
+ resolution: "redis@npm:2.8.0"
dependencies:
- "@redis/bloom": 1.2.0
- "@redis/client": 1.5.14
- "@redis/graph": 1.1.1
- "@redis/json": 1.0.6
- "@redis/search": 1.1.6
- "@redis/time-series": 1.0.5
- checksum: 10150ec30f1f89e47cec41c27dc77a99c78a0b078735de4fc9b79c2a779787d52274c64c52004af161b95b9729067671a4cfca95257719968accb30057856a09
+ double-ended-queue: ^2.1.0-0
+ redis-commands: ^1.2.0
+ redis-parser: ^2.6.0
+ checksum: e44dc50a9a92ede2c95b3166482a4b04373853fdbb72ab138e834b868a3cd446798742fc0f85de2d5e442f9c86f58e1250637ea71af3ad5527478d05ef430079
languageName: node
linkType: hard
@@ -24249,6 +24164,13 @@ __metadata:
languageName: node
linkType: hard
+"regexparam@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "regexparam@npm:3.0.0"
+ checksum: c8649af1538ccc12b5c5d250525f61bd370227dce41f4fb908433a9651e18b7be21dd8f8518c322dd9ebd75f7caaaea4921e374c39a469c11d4f9d0c738043e0
+ languageName: node
+ linkType: hard
+
"regexpu-core@npm:^5.3.1":
version: 5.3.2
resolution: "regexpu-core@npm:5.3.2"
@@ -24916,17 +24838,17 @@ __metadata:
languageName: node
linkType: hard
-"rollup@npm:2.35.1":
- version: 2.35.1
- resolution: "rollup@npm:2.35.1"
+"rollup@npm:2.79.2":
+ version: 2.79.2
+ resolution: "rollup@npm:2.79.2"
dependencies:
- fsevents: ~2.1.2
+ fsevents: ~2.3.2
dependenciesMeta:
fsevents:
optional: true
bin:
rollup: dist/bin/rollup
- checksum: d696a4bed381e26583735ecf1650c9da31fae90efd1f1e21f0804156930b1dc71b2dc4c3d1f836a64fb70662a07ec7f52e60d90d6243e10d85a5198c1a1f6e2b
+ checksum: df7aa4c8b95245dede157b06ab71e1921de6080757d30e9bf31f8fb142064d12dda865e2bafbab4349588f43425b2965a290c9a5da1c048246a70fc21734ebd7
languageName: node
linkType: hard
@@ -25313,30 +25235,30 @@ __metadata:
languageName: node
linkType: hard
-"send@npm:0.17.1":
- version: 0.17.1
- resolution: "send@npm:0.17.1"
+"send@npm:0.18.0":
+ version: 0.18.0
+ resolution: "send@npm:0.18.0"
dependencies:
debug: 2.6.9
- depd: ~1.1.2
- destroy: ~1.0.4
+ depd: 2.0.0
+ destroy: 1.2.0
encodeurl: ~1.0.2
escape-html: ~1.0.3
etag: ~1.8.1
fresh: 0.5.2
- http-errors: ~1.7.2
+ http-errors: 2.0.0
mime: 1.6.0
- ms: 2.1.1
- on-finished: ~2.3.0
+ ms: 2.1.3
+ on-finished: 2.4.1
range-parser: ~1.2.1
- statuses: ~1.5.0
- checksum: d214c2fa42e7fae3f8fc1aa3931eeb3e6b78c2cf141574e09dbe159915c1e3a337269fc6b7512e7dfddcd7d6ff5974cb62f7c3637ba86a55bde20a92c18bdca0
+ statuses: 2.0.1
+ checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8
languageName: node
linkType: hard
-"send@npm:0.18.0":
- version: 0.18.0
- resolution: "send@npm:0.18.0"
+"send@npm:0.19.0":
+ version: 0.19.0
+ resolution: "send@npm:0.19.0"
dependencies:
debug: 2.6.9
depd: 2.0.0
@@ -25351,7 +25273,7 @@ __metadata:
on-finished: 2.4.1
range-parser: ~1.2.1
statuses: 2.0.1
- checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8
+ checksum: 5ae11bd900c1c2575525e2aa622e856804e2f96a09281ec1e39610d089f53aa69e13fd8db84b52f001d0318cf4bb0b3b904ad532fc4c0014eb90d32db0cff55f
languageName: node
linkType: hard
@@ -25388,27 +25310,27 @@ __metadata:
languageName: node
linkType: hard
-"serve-static@npm:1.14.1":
- version: 1.14.1
- resolution: "serve-static@npm:1.14.1"
+"serve-static@npm:1.15.0, serve-static@npm:^1.14.1":
+ version: 1.15.0
+ resolution: "serve-static@npm:1.15.0"
dependencies:
encodeurl: ~1.0.2
escape-html: ~1.0.3
parseurl: ~1.3.3
- send: 0.17.1
- checksum: c6b268e8486d39ecd54b86c7f2d0ee4a38cd7514ddd9c92c8d5793bb005afde5e908b12395898ae206782306ccc848193d93daa15b86afb3cbe5a8414806abe8
+ send: 0.18.0
+ checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d
languageName: node
linkType: hard
-"serve-static@npm:1.15.0, serve-static@npm:^1.14.1":
- version: 1.15.0
- resolution: "serve-static@npm:1.15.0"
+"serve-static@npm:1.16.0":
+ version: 1.16.0
+ resolution: "serve-static@npm:1.16.0"
dependencies:
encodeurl: ~1.0.2
escape-html: ~1.0.3
parseurl: ~1.3.3
send: 0.18.0
- checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d
+ checksum: a479dfe7e9fa7e8cb3ceccb0d944a3c72bb8f88d78472e30989f58fe15a92cfc909ab05a5c7cda2d1a6aa2663ab503ad1e2f40653740346e53e72b3ba41b6951
languageName: node
linkType: hard
@@ -25433,6 +25355,20 @@ __metadata:
languageName: node
linkType: hard
+"set-function-length@npm:^1.2.1":
+ version: 1.2.2
+ resolution: "set-function-length@npm:1.2.2"
+ dependencies:
+ define-data-property: ^1.1.4
+ es-errors: ^1.3.0
+ function-bind: ^1.1.2
+ get-intrinsic: ^1.2.4
+ gopd: ^1.0.1
+ has-property-descriptors: ^1.0.2
+ checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72
+ languageName: node
+ linkType: hard
+
"set-function-name@npm:^2.0.0, set-function-name@npm:^2.0.1":
version: 2.0.1
resolution: "set-function-name@npm:2.0.1"
@@ -25470,13 +25406,6 @@ __metadata:
languageName: node
linkType: hard
-"setprototypeof@npm:1.1.1":
- version: 1.1.1
- resolution: "setprototypeof@npm:1.1.1"
- checksum: a8bee29c1c64c245d460ce53f7460af8cbd0aceac68d66e5215153992cc8b3a7a123416353e0c642060e85cc5fd4241c92d1190eec97eda0dcb97436e8fcca3b
- languageName: node
- linkType: hard
-
"setprototypeof@npm:1.2.0":
version: 1.2.0
resolution: "setprototypeof@npm:1.2.0"
@@ -25639,6 +25568,18 @@ __metadata:
languageName: node
linkType: hard
+"side-channel@npm:^1.0.6":
+ version: 1.0.6
+ resolution: "side-channel@npm:1.0.6"
+ dependencies:
+ call-bind: ^1.0.7
+ es-errors: ^1.3.0
+ get-intrinsic: ^1.2.4
+ object-inspect: ^1.13.1
+ checksum: bfc1afc1827d712271453e91b7cd3878ac0efd767495fd4e594c4c2afaa7963b7b510e249572bfd54b0527e66e4a12b61b80c061389e129755f34c493aad9b97
+ languageName: node
+ linkType: hard
+
"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7":
version: 3.0.7
resolution: "signal-exit@npm:3.0.7"
@@ -26250,7 +26191,7 @@ __metadata:
languageName: node
linkType: hard
-"statuses@npm:>= 1.4.0 < 2, statuses@npm:>= 1.5.0 < 2, statuses@npm:~1.5.0":
+"statuses@npm:>= 1.4.0 < 2":
version: 1.5.0
resolution: "statuses@npm:1.5.0"
checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c
@@ -27489,13 +27430,6 @@ __metadata:
languageName: node
linkType: hard
-"toidentifier@npm:1.0.0":
- version: 1.0.0
- resolution: "toidentifier@npm:1.0.0"
- checksum: 199e6bfca1531d49b3506cff02353d53ec987c9ee10ee272ca6484ed97f1fc10fb77c6c009079ca16d5c5be4a10378178c3cacdb41ce9ec954c3297c74c6053e
- languageName: node
- linkType: hard
-
"toidentifier@npm:1.0.1":
version: 1.0.1
resolution: "toidentifier@npm:1.0.1"
@@ -27757,7 +27691,7 @@ __metadata:
languageName: node
linkType: hard
-"type-is@npm:~1.6.17, type-is@npm:~1.6.18":
+"type-is@npm:~1.6.18":
version: 1.6.18
resolution: "type-is@npm:1.6.18"
dependencies:
@@ -27837,6 +27771,13 @@ __metadata:
languageName: node
linkType: hard
+"typedescriptor@npm:3.0.2":
+ version: 3.0.2
+ resolution: "typedescriptor@npm:3.0.2"
+ checksum: 90e637ece22df0687acae70e152e88dd07ec10d0f4c87de2752bbcb78e420c5f5c86c3fe5e41d9f315a741a1e379e197fc5cb52044f33aafe891be6c63825ef7
+ languageName: node
+ linkType: hard
+
"ua-parser-js@npm:^0.7.30":
version: 0.7.37
resolution: "ua-parser-js@npm:0.7.37"
@@ -29068,17 +29009,6 @@ __metadata:
languageName: node
linkType: hard
-"whatwg-url@npm:^6.5.0":
- version: 6.5.0
- resolution: "whatwg-url@npm:6.5.0"
- dependencies:
- lodash.sortby: ^4.7.0
- tr46: ^1.0.1
- webidl-conversions: ^4.0.2
- checksum: a10bd5e29f4382cd19789c2a7bbce25416e606b6fefc241c7fe34a2449de5bc5709c165bd13634eda433942d917ca7386a52841780b82dc37afa8141c31a8ebd
- languageName: node
- linkType: hard
-
"whatwg-url@npm:^7.0.0":
version: 7.1.0
resolution: "whatwg-url@npm:7.1.0"
@@ -29554,13 +29484,6 @@ __metadata:
languageName: node
linkType: hard
-"yallist@npm:4.0.0, yallist@npm:^4.0.0":
- version: 4.0.0
- resolution: "yallist@npm:4.0.0"
- checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5
- languageName: node
- linkType: hard
-
"yallist@npm:^2.1.2":
version: 2.1.2
resolution: "yallist@npm:2.1.2"
@@ -29575,6 +29498,13 @@ __metadata:
languageName: node
linkType: hard
+"yallist@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "yallist@npm:4.0.0"
+ checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5
+ languageName: node
+ linkType: hard
+
"yaml@npm:^1.10.0, yaml@npm:^1.10.2, yaml@npm:^1.7.2":
version: 1.10.2
resolution: "yaml@npm:1.10.2"