aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package-lock.json87
-rw-r--r--src/frontend/app/AppContext.tsx122
-rw-r--r--src/frontend/app/ErrorBoundary.tsx18
-rw-r--r--src/frontend/app/components/GroupedTable.tsx124
-rw-r--r--src/frontend/app/components/LineIcon.css5
-rw-r--r--src/frontend/app/components/LineIcon.tsx4
-rw-r--r--src/frontend/app/components/NavBar.tsx30
-rw-r--r--src/frontend/app/components/RegularTable.tsx129
-rw-r--r--src/frontend/app/components/StopItem.css2
-rw-r--r--src/frontend/app/components/StopItem.tsx15
-rw-r--r--src/frontend/app/components/StopSheet.css146
-rw-r--r--src/frontend/app/components/StopSheet.tsx154
-rw-r--r--src/frontend/app/data/StopDataProvider.ts197
-rw-r--r--src/frontend/app/i18n/index.ts26
-rw-r--r--src/frontend/app/i18n/locales/en-GB.json6
-rw-r--r--src/frontend/app/i18n/locales/es-ES.json6
-rw-r--r--src/frontend/app/i18n/locales/gl-ES.json6
-rw-r--r--src/frontend/app/maps/styleloader.ts83
-rw-r--r--src/frontend/app/root.css8
-rw-r--r--src/frontend/app/root.tsx60
-rw-r--r--src/frontend/app/routes.tsx2
-rw-r--r--src/frontend/app/routes/estimates-$id.css2
-rw-r--r--src/frontend/app/routes/estimates-$id.tsx162
-rw-r--r--src/frontend/app/routes/index.tsx2
-rw-r--r--src/frontend/app/routes/map.css96
-rw-r--r--src/frontend/app/routes/map.tsx284
-rw-r--r--src/frontend/app/routes/settings.tsx192
-rw-r--r--src/frontend/app/routes/stoplist.tsx214
-rw-r--r--src/frontend/index.html96
-rw-r--r--src/frontend/package.json1
-rw-r--r--src/frontend/public/manifest.webmanifest164
-rw-r--r--src/frontend/public/maps/spritesheet/sprite.json16
-rw-r--r--src/frontend/public/maps/spritesheet/sprite@2x.json16
-rw-r--r--src/frontend/public/maps/styles/carto-dark.json59
-rw-r--r--src/frontend/public/maps/styles/carto-light.json61
-rw-r--r--src/frontend/public/stops.json6338
-rw-r--r--src/frontend/public/sw.js65
-rw-r--r--src/frontend/react-router.config.ts4
-rw-r--r--src/frontend/vite.config.ts16
39 files changed, 2743 insertions, 6275 deletions
diff --git a/package-lock.json b/package-lock.json
index 07872b2..0d0fabb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3727,6 +3727,34 @@
"node": ">= 0.6"
}
},
+ "node_modules/framer-motion": {
+ "version": "12.19.1",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.19.1.tgz",
+ "integrity": "sha512-nq9hwWAEKf4gzprbOZzKugLV5OVKF7zrNDY6UOVu+4D3ZgIkg8L9Jy6AMrpBM06fhbKJ6LEG6UY5+t7Eq6wNlg==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "motion-dom": "^12.19.0",
+ "motion-utils": "^12.19.0",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
@@ -4844,6 +4872,50 @@
"node": ">= 0.8"
}
},
+ "node_modules/motion": {
+ "version": "12.19.1",
+ "resolved": "https://registry.npmjs.org/motion/-/motion-12.19.1.tgz",
+ "integrity": "sha512-OhoHWrht+zwDPccr2wGltJdwgz2elFBBt/sLei2g0hwICvy2hOBFUkA4Ylup3VnDgz+vUtecf694EV7bJK4XjA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "framer-motion": "^12.19.1",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/motion-dom": {
+ "version": "12.19.0",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.19.0.tgz",
+ "integrity": "sha512-m96uqq8VbwxFLU0mtmlsIVe8NGGSdpBvBSHbnnOJQxniPaabvVdGgxSamhuDwBsRhwX7xPxdICgVJlOpzn/5bw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "motion-utils": "^12.19.0"
+ }
+ },
+ "node_modules/motion-utils": {
+ "version": "12.19.0",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.19.0.tgz",
+ "integrity": "sha512-BuFTHINYmV07pdWs6lj6aI63vr2N4dg0vR+td0rtrdpWOhBzIkEklZyLcvKBoEtwSqx8Jg06vUB5RS0xDiUybw==",
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -5488,6 +5560,19 @@
}
}
},
+ "node_modules/react-modal-sheet": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/react-modal-sheet/-/react-modal-sheet-4.4.0.tgz",
+ "integrity": "sha512-ub42vR7iwjdM/2Zl6uZoH5M5Dcb6KTuVaOQ+uQCIlo10SdlYAhksb6u3eIFSLohFrX5q03rgFnR6Y0PKhjjl/Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "motion": ">=11",
+ "react": ">=16"
+ }
+ },
"node_modules/react-refresh": {
"version": "0.14.2",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
@@ -6317,7 +6402,6 @@
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "dev": true,
"license": "0BSD"
},
"node_modules/type-check": {
@@ -6861,6 +6945,7 @@
"react-dom": "^19.1.0",
"react-leaflet": "^5.0.0",
"react-leaflet-markercluster": "^5.0.0-rc.0",
+ "react-modal-sheet": "^4.4.0",
"react-router": "^7.6.0"
},
"devDependencies": {
diff --git a/src/frontend/app/AppContext.tsx b/src/frontend/app/AppContext.tsx
index d8db66d..e6d8971 100644
--- a/src/frontend/app/AppContext.tsx
+++ b/src/frontend/app/AppContext.tsx
@@ -1,10 +1,16 @@
/* eslint-disable react-refresh/only-export-components */
-import { createContext, useContext, useEffect, useState, type ReactNode } from 'react';
-import { type LngLatLike } from 'maplibre-gl';
+import {
+ createContext,
+ useContext,
+ useEffect,
+ useState,
+ type ReactNode,
+} from "react";
+import { type LngLatLike } from "maplibre-gl";
-type Theme = 'light' | 'dark';
-type TableStyle = 'regular'|'grouped';
-type MapPositionMode = 'gps' | 'last';
+type Theme = "light" | "dark";
+type TableStyle = "regular" | "grouped";
+type MapPositionMode = "gps" | "last";
interface MapState {
center: LngLatLike;
@@ -42,56 +48,62 @@ const AppContext = createContext<AppContextProps | undefined>(undefined);
export const AppProvider = ({ children }: { children: ReactNode }) => {
//#region Theme
const [theme, setTheme] = useState<Theme>(() => {
- const savedTheme = localStorage.getItem('theme');
+ const savedTheme = localStorage.getItem("theme");
if (savedTheme) {
return savedTheme as Theme;
}
- const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
- return prefersDark ? 'dark' : 'light';
+ const prefersDark =
+ window.matchMedia &&
+ window.matchMedia("(prefers-color-scheme: dark)").matches;
+ return prefersDark ? "dark" : "light";
});
const toggleTheme = () => {
- setTheme((prevTheme) => (prevTheme === 'light' ? 'dark' : 'light'));
+ setTheme((prevTheme) => (prevTheme === "light" ? "dark" : "light"));
};
useEffect(() => {
- document.documentElement.setAttribute('data-theme', theme);
- localStorage.setItem('theme', theme);
+ document.documentElement.setAttribute("data-theme", theme);
+ localStorage.setItem("theme", theme);
}, [theme]);
//#endregion
//#region Table Style
const [tableStyle, setTableStyle] = useState<TableStyle>(() => {
- const savedTableStyle = localStorage.getItem('tableStyle');
+ const savedTableStyle = localStorage.getItem("tableStyle");
if (savedTableStyle) {
return savedTableStyle as TableStyle;
}
- return 'regular';
+ return "regular";
});
const toggleTableStyle = () => {
- setTableStyle((prevTableStyle) => (prevTableStyle === 'regular' ? 'grouped' : 'regular'));
- }
+ setTableStyle((prevTableStyle) =>
+ prevTableStyle === "regular" ? "grouped" : "regular",
+ );
+ };
useEffect(() => {
- localStorage.setItem('tableStyle', tableStyle);
+ localStorage.setItem("tableStyle", tableStyle);
}, [tableStyle]);
//#endregion
//#region Map Position Mode
- const [mapPositionMode, setMapPositionMode] = useState<MapPositionMode>(() => {
- const saved = localStorage.getItem('mapPositionMode');
- return saved === 'last' ? 'last' : 'gps';
- });
+ const [mapPositionMode, setMapPositionMode] = useState<MapPositionMode>(
+ () => {
+ const saved = localStorage.getItem("mapPositionMode");
+ return saved === "last" ? "last" : "gps";
+ },
+ );
useEffect(() => {
- localStorage.setItem('mapPositionMode', mapPositionMode);
+ localStorage.setItem("mapPositionMode", mapPositionMode);
}, [mapPositionMode]);
//#endregion
//#region Map State
const [mapState, setMapState] = useState<MapState>(() => {
- const savedMapState = localStorage.getItem('mapState');
+ const savedMapState = localStorage.getItem("mapState");
if (savedMapState) {
try {
const parsed = JSON.parse(savedMapState);
@@ -99,56 +111,56 @@ export const AppProvider = ({ children }: { children: ReactNode }) => {
center: parsed.center || DEFAULT_CENTER,
zoom: parsed.zoom || DEFAULT_ZOOM,
userLocation: parsed.userLocation || null,
- hasLocationPermission: parsed.hasLocationPermission || false
+ hasLocationPermission: parsed.hasLocationPermission || false,
};
} catch (e) {
- console.error('Error parsing saved map state', e);
+ console.error("Error parsing saved map state", e);
}
}
return {
center: DEFAULT_CENTER,
zoom: DEFAULT_ZOOM,
userLocation: null,
- hasLocationPermission: false
+ hasLocationPermission: false,
};
});
const setMapCenter = (center: LngLatLike) => {
- setMapState(prev => {
+ setMapState((prev) => {
const newState = { ...prev, center };
- localStorage.setItem('mapState', JSON.stringify(newState));
+ localStorage.setItem("mapState", JSON.stringify(newState));
return newState;
});
};
const setMapZoom = (zoom: number) => {
- setMapState(prev => {
+ setMapState((prev) => {
const newState = { ...prev, zoom };
- localStorage.setItem('mapState', JSON.stringify(newState));
+ localStorage.setItem("mapState", JSON.stringify(newState));
return newState;
});
};
const setUserLocation = (userLocation: LngLatLike | null) => {
- setMapState(prev => {
+ setMapState((prev) => {
const newState = { ...prev, userLocation };
- localStorage.setItem('mapState', JSON.stringify(newState));
+ localStorage.setItem("mapState", JSON.stringify(newState));
return newState;
});
};
const setLocationPermission = (hasLocationPermission: boolean) => {
- setMapState(prev => {
+ setMapState((prev) => {
const newState = { ...prev, hasLocationPermission };
- localStorage.setItem('mapState', JSON.stringify(newState));
+ localStorage.setItem("mapState", JSON.stringify(newState));
return newState;
});
};
const updateMapState = (center: LngLatLike, zoom: number) => {
- setMapState(prev => {
+ setMapState((prev) => {
const newState = { ...prev, center, zoom };
- localStorage.setItem('mapState', JSON.stringify(newState));
+ localStorage.setItem("mapState", JSON.stringify(newState));
return newState;
});
};
@@ -164,31 +176,33 @@ export const AppProvider = ({ children }: { children: ReactNode }) => {
setUserLocation([latitude, longitude]);
},
(error) => {
- console.error('Error getting location:', error);
+ console.error("Error getting location:", error);
setLocationPermission(false);
- }
+ },
);
}
}
}, [mapState.hasLocationPermission, mapState.userLocation]);
return (
- <AppContext.Provider value={{
- theme,
- setTheme,
- toggleTheme,
- tableStyle,
- setTableStyle,
- toggleTableStyle,
- mapState,
- setMapCenter,
- setMapZoom,
- setUserLocation,
- setLocationPermission,
- updateMapState,
- mapPositionMode,
- setMapPositionMode
- }}>
+ <AppContext.Provider
+ value={{
+ theme,
+ setTheme,
+ toggleTheme,
+ tableStyle,
+ setTableStyle,
+ toggleTableStyle,
+ mapState,
+ setMapCenter,
+ setMapZoom,
+ setUserLocation,
+ setLocationPermission,
+ updateMapState,
+ mapPositionMode,
+ setMapPositionMode,
+ }}
+ >
{children}
</AppContext.Provider>
);
@@ -197,7 +211,7 @@ export const AppProvider = ({ children }: { children: ReactNode }) => {
export const useApp = () => {
const context = useContext(AppContext);
if (!context) {
- throw new Error('useApp must be used within a AppProvider');
+ throw new Error("useApp must be used within a AppProvider");
}
return context;
};
diff --git a/src/frontend/app/ErrorBoundary.tsx b/src/frontend/app/ErrorBoundary.tsx
index 5c877b7..c11a82b 100644
--- a/src/frontend/app/ErrorBoundary.tsx
+++ b/src/frontend/app/ErrorBoundary.tsx
@@ -1,4 +1,4 @@
-import React, { Component, type ReactNode } from 'react';
+import React, { Component, type ReactNode } from "react";
interface ErrorBoundaryProps {
children: ReactNode;
@@ -14,14 +14,14 @@ class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
super(props);
this.state = {
hasError: false,
- error: null
+ error: null,
};
}
static getDerivedStateFromError(error: Error): ErrorBoundaryState {
return {
hasError: true,
- error
+ error,
};
}
@@ -31,12 +31,12 @@ class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
render() {
if (this.state.hasError) {
- return <>
- <h1>Something went wrong.</h1>
- <pre>
- {this.state.error?.stack}
- </pre>
- </>;
+ return (
+ <>
+ <h1>Something went wrong.</h1>
+ <pre>{this.state.error?.stack}</pre>
+ </>
+ );
}
return this.props.children;
diff --git a/src/frontend/app/components/GroupedTable.tsx b/src/frontend/app/components/GroupedTable.tsx
index 3a16d89..47c2d31 100644
--- a/src/frontend/app/components/GroupedTable.tsx
+++ b/src/frontend/app/components/GroupedTable.tsx
@@ -2,73 +2,79 @@ import { type StopDetails } from "../routes/estimates-$id";
import LineIcon from "./LineIcon";
interface GroupedTable {
- data: StopDetails;
- dataDate: Date | null;
+ data: StopDetails;
+ dataDate: Date | null;
}
export const GroupedTable: React.FC<GroupedTable> = ({ data, dataDate }) => {
- const formatDistance = (meters: number) => {
- if (meters > 1024) {
- return `${(meters / 1000).toFixed(1)} km`;
- } else {
- return `${meters} m`;
- }
+ const formatDistance = (meters: number) => {
+ if (meters > 1024) {
+ return `${(meters / 1000).toFixed(1)} km`;
+ } else {
+ return `${meters} m`;
}
+ };
- const groupedEstimates = data.estimates.reduce((acc, estimate) => {
- if (!acc[estimate.line]) {
- acc[estimate.line] = [];
- }
- acc[estimate.line].push(estimate);
- return acc;
- }, {} as Record<string, typeof data.estimates>);
+ const groupedEstimates = data.estimates.reduce(
+ (acc, estimate) => {
+ if (!acc[estimate.line]) {
+ acc[estimate.line] = [];
+ }
+ acc[estimate.line].push(estimate);
+ return acc;
+ },
+ {} as Record<string, typeof data.estimates>,
+ );
- const sortedLines = Object.keys(groupedEstimates).sort((a, b) => {
- const firstArrivalA = groupedEstimates[a][0].minutes;
- const firstArrivalB = groupedEstimates[b][0].minutes;
- return firstArrivalA - firstArrivalB;
- });
+ const sortedLines = Object.keys(groupedEstimates).sort((a, b) => {
+ const firstArrivalA = groupedEstimates[a][0].minutes;
+ const firstArrivalB = groupedEstimates[b][0].minutes;
+ return firstArrivalA - firstArrivalB;
+ });
- return <table className="table">
- <caption>Estimaciones de llegadas a las {dataDate?.toLocaleTimeString()}</caption>
+ return (
+ <table className="table">
+ <caption>
+ Estimaciones de llegadas a las {dataDate?.toLocaleTimeString()}
+ </caption>
- <thead>
- <tr>
- <th>Línea</th>
- <th>Ruta</th>
- <th>Llegada</th>
- <th>Distancia</th>
- </tr>
- </thead>
-
- <tbody>
- {sortedLines.map((line) => (
- groupedEstimates[line].map((estimate, idx) => (
- <tr key={`${line}-${idx}`}>
- {idx === 0 && (
- <td rowSpan={groupedEstimates[line].length}>
- <LineIcon line={line} />
- </td>
- )}
- <td>{estimate.route}</td>
- <td>{`${estimate.minutes} min`}</td>
- <td>
- {estimate.meters > -1
- ? formatDistance(estimate.meters)
- : "No disponible"
- }
- </td>
- </tr>
- ))
- ))}
- </tbody>
+ <thead>
+ <tr>
+ <th>Línea</th>
+ <th>Ruta</th>
+ <th>Llegada</th>
+ <th>Distancia</th>
+ </tr>
+ </thead>
- {data?.estimates.length === 0 && (
- <tfoot>
- <tr>
- <td colSpan={4}>No hay estimaciones disponibles</td>
- </tr>
- </tfoot>
+ <tbody>
+ {sortedLines.map((line) =>
+ groupedEstimates[line].map((estimate, idx) => (
+ <tr key={`${line}-${idx}`}>
+ {idx === 0 && (
+ <td rowSpan={groupedEstimates[line].length}>
+ <LineIcon line={line} />
+ </td>
+ )}
+ <td>{estimate.route}</td>
+ <td>{`${estimate.minutes} min`}</td>
+ <td>
+ {estimate.meters > -1
+ ? formatDistance(estimate.meters)
+ : "No disponible"}
+ </td>
+ </tr>
+ )),
)}
+ </tbody>
+
+ {data?.estimates.length === 0 && (
+ <tfoot>
+ <tr>
+ <td colSpan={4}>No hay estimaciones disponibles</td>
+ </tr>
+ </tfoot>
+ )}
</table>
-}
+ );
+};
diff --git a/src/frontend/app/components/LineIcon.css b/src/frontend/app/components/LineIcon.css
index e7e8949..4b39351 100644
--- a/src/frontend/app/components/LineIcon.css
+++ b/src/frontend/app/components/LineIcon.css
@@ -55,7 +55,8 @@
font-weight: 600;
text-transform: uppercase;
color: inherit;
- /* Prevent color change on hover */
+ background-color: white;
+ border-radius: 0.25rem 0.25rem 0 0;
}
.line-c1 {
@@ -236,4 +237,4 @@
.line-u2 {
border-color: var(--line-u2);
-} \ No newline at end of file
+}
diff --git a/src/frontend/app/components/LineIcon.tsx b/src/frontend/app/components/LineIcon.tsx
index 291b444..3d613e6 100644
--- a/src/frontend/app/components/LineIcon.tsx
+++ b/src/frontend/app/components/LineIcon.tsx
@@ -1,5 +1,5 @@
-import React from 'react';
-import './LineIcon.css';
+import React from "react";
+import "./LineIcon.css";
interface LineIconProps {
line: string;
diff --git a/src/frontend/app/components/NavBar.tsx b/src/frontend/app/components/NavBar.tsx
index eba7196..6a06e63 100644
--- a/src/frontend/app/components/NavBar.tsx
+++ b/src/frontend/app/components/NavBar.tsx
@@ -9,14 +9,14 @@ function isWithinVigo(lngLat: LngLatLike): boolean {
let lng: number, lat: number;
if (Array.isArray(lngLat)) {
[lng, lat] = lngLat;
- } else if ('lng' in lngLat && 'lat' in lngLat) {
+ } else if ("lng" in lngLat && "lat" in lngLat) {
lng = lngLat.lng;
lat = lngLat.lat;
} else {
return false;
}
// Rough bounding box for Vigo
- return lat >= 42.18 && lat <= 42.30 && lng >= -8.78 && lng <= -8.65;
+ return lat >= 42.18 && lat <= 42.3 && lng >= -8.78 && lng <= -8.65;
}
export default function NavBar() {
@@ -25,20 +25,20 @@ export default function NavBar() {
const navItems = [
{
- name: t('navbar.stops', 'Paradas'),
+ name: t("navbar.stops", "Paradas"),
icon: MapPin,
- path: '/stops'
+ path: "/stops",
},
{
- name: t('navbar.map', 'Mapa'),
+ name: t("navbar.map", "Mapa"),
icon: Map,
- path: '/map',
+ path: "/map",
callback: () => {
- if (mapPositionMode !== 'gps') {
+ if (mapPositionMode !== "gps") {
return;
}
- if (!('geolocation' in navigator)) {
+ if (!("geolocation" in navigator)) {
return;
}
@@ -50,20 +50,20 @@ export default function NavBar() {
updateMapState(coords, 16);
}
},
- () => { }
+ () => {},
);
- }
+ },
},
{
- name: t('navbar.settings', 'Ajustes'),
+ name: t("navbar.settings", "Ajustes"),
icon: Settings,
- path: '/settings'
- }
+ path: "/settings",
+ },
];
return (
<nav className="navigation-bar">
- {navItems.map(item => {
+ {navItems.map((item) => {
const Icon = item.icon;
const isActive = location.pathname.startsWith(item.path);
@@ -71,7 +71,7 @@ export default function NavBar() {
<Link
key={item.name}
to={item.path}
- className={`navigation-bar__link ${isActive ? 'active' : ''}`}
+ className={`navigation-bar__link ${isActive ? "active" : ""}`}
onClick={item.callback ? item.callback : undefined}
title={item.name}
aria-label={item.name}
diff --git a/src/frontend/app/components/RegularTable.tsx b/src/frontend/app/components/RegularTable.tsx
index e5b3782..8b01410 100644
--- a/src/frontend/app/components/RegularTable.tsx
+++ b/src/frontend/app/components/RegularTable.tsx
@@ -3,70 +3,85 @@ import { type StopDetails } from "../routes/estimates-$id";
import LineIcon from "./LineIcon";
interface RegularTableProps {
- data: StopDetails;
- dataDate: Date | null;
+ data: StopDetails;
+ dataDate: Date | null;
}
-export const RegularTable: React.FC<RegularTableProps> = ({ data, dataDate }) => {
- const { t } = useTranslation();
+export const RegularTable: React.FC<RegularTableProps> = ({
+ data,
+ dataDate,
+}) => {
+ const { t } = useTranslation();
- const absoluteArrivalTime = (minutes: number) => {
- const now = new Date()
- const arrival = new Date(now.getTime() + minutes * 60000)
- return Intl.DateTimeFormat(navigator.language, {
- hour: '2-digit',
- minute: '2-digit'
- }).format(arrival)
- }
+ const absoluteArrivalTime = (minutes: number) => {
+ const now = new Date();
+ const arrival = new Date(now.getTime() + minutes * 60000);
+ return Intl.DateTimeFormat(
+ typeof navigator !== "undefined" ? navigator.language : "en",
+ {
+ hour: "2-digit",
+ minute: "2-digit",
+ }
+ ).format(arrival);
+ };
- const formatDistance = (meters: number) => {
- if (meters > 1024) {
- return `${(meters / 1000).toFixed(1)} km`;
- } else {
- return `${meters} ${t('estimates.meters', 'm')}`;
- }
+ const formatDistance = (meters: number) => {
+ if (meters > 1024) {
+ return `${(meters / 1000).toFixed(1)} km`;
+ } else {
+ return `${meters} ${t("estimates.meters", "m")}`;
}
+ };
- return <table className="table">
- <caption>{t('estimates.caption', 'Estimaciones de llegadas a las {{time}}', { time: dataDate?.toLocaleTimeString() })}</caption>
+ return (
+ <table className="table">
+ <caption>
+ {t("estimates.caption", "Estimaciones de llegadas a las {{time}}", {
+ time: dataDate?.toLocaleTimeString(),
+ })}
+ </caption>
- <thead>
- <tr>
- <th>{t('estimates.line', 'Línea')}</th>
- <th>{t('estimates.route', 'Ruta')}</th>
- <th>{t('estimates.arrival', 'Llegada')}</th>
- <th>{t('estimates.distance', 'Distancia')}</th>
- </tr>
- </thead>
+ <thead>
+ <tr>
+ <th>{t("estimates.line", "Línea")}</th>
+ <th>{t("estimates.route", "Ruta")}</th>
+ <th>{t("estimates.arrival", "Llegada")}</th>
+ <th>{t("estimates.distance", "Distancia")}</th>
+ </tr>
+ </thead>
- <tbody>
- {data.estimates
- .sort((a, b) => a.minutes - b.minutes)
- .map((estimate, idx) => (
- <tr key={idx}>
- <td><LineIcon line={estimate.line} /></td>
- <td>{estimate.route}</td>
- <td>
- {estimate.minutes > 15
- ? absoluteArrivalTime(estimate.minutes)
- : `${estimate.minutes} ${t('estimates.minutes', 'min')}`}
- </td>
- <td>
- {estimate.meters > -1
- ? formatDistance(estimate.meters)
- : t('estimates.not_available', 'No disponible')
- }
- </td>
- </tr>
- ))}
- </tbody>
+ <tbody>
+ {data.estimates
+ .sort((a, b) => a.minutes - b.minutes)
+ .map((estimate, idx) => (
+ <tr key={idx}>
+ <td>
+ <LineIcon line={estimate.line} />
+ </td>
+ <td>{estimate.route}</td>
+ <td>
+ {estimate.minutes > 15
+ ? absoluteArrivalTime(estimate.minutes)
+ : `${estimate.minutes} ${t("estimates.minutes", "min")}`}
+ </td>
+ <td>
+ {estimate.meters > -1
+ ? formatDistance(estimate.meters)
+ : t("estimates.not_available", "No disponible")}
+ </td>
+ </tr>
+ ))}
+ </tbody>
- {data?.estimates.length === 0 && (
- <tfoot>
- <tr>
- <td colSpan={4}>{t('estimates.none', 'No hay estimaciones disponibles')}</td>
- </tr>
- </tfoot>
- )}
+ {data?.estimates.length === 0 && (
+ <tfoot>
+ <tr>
+ <td colSpan={4}>
+ {t("estimates.none", "No hay estimaciones disponibles")}
+ </td>
+ </tr>
+ </tfoot>
+ )}
</table>
-}
+ );
+};
diff --git a/src/frontend/app/components/StopItem.css b/src/frontend/app/components/StopItem.css
index 9feb2d1..54ab136 100644
--- a/src/frontend/app/components/StopItem.css
+++ b/src/frontend/app/components/StopItem.css
@@ -51,4 +51,4 @@
top: 0;
color: #0078d4;
font-weight: bold;
-} \ No newline at end of file
+}
diff --git a/src/frontend/app/components/StopItem.tsx b/src/frontend/app/components/StopItem.tsx
index 29370b7..b781eb9 100644
--- a/src/frontend/app/components/StopItem.tsx
+++ b/src/frontend/app/components/StopItem.tsx
@@ -1,22 +1,21 @@
-import React from 'react';
-import { Link } from 'react-router';
-import StopDataProvider, { type Stop } from '../data/StopDataProvider';
-import LineIcon from './LineIcon';
+import React from "react";
+import { Link } from "react-router";
+import StopDataProvider, { type Stop } from "../data/StopDataProvider";
+import LineIcon from "./LineIcon";
interface StopItemProps {
stop: Stop;
}
const StopItem: React.FC<StopItemProps> = ({ stop }) => {
-
return (
<li className="list-item">
<Link className="list-item-link" to={`/estimates/${stop.stopId}`}>
- {stop.favourite && <span className="favourite-icon">★</span>} ({stop.stopId}) {StopDataProvider.getDisplayName(stop)}
+ {stop.favourite && <span className="favourite-icon">★</span>} (
+ {stop.stopId}) {StopDataProvider.getDisplayName(stop)}
<div className="line-icons">
- {stop.lines?.map(line => <LineIcon key={line} line={line} />)}
+ {stop.lines?.map((line) => <LineIcon key={line} line={line} />)}
</div>
-
</Link>
</li>
);
diff --git a/src/frontend/app/components/StopSheet.css b/src/frontend/app/components/StopSheet.css
new file mode 100644
index 0000000..3f7621e
--- /dev/null
+++ b/src/frontend/app/components/StopSheet.css
@@ -0,0 +1,146 @@
+/* Stop Sheet Styles */
+.stop-sheet-content {
+ padding: 16px;
+ display: flex;
+ flex-direction: column;
+ overflow: hidden;
+}
+
+.stop-sheet-header {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ margin-bottom: 16px;
+}
+
+.stop-sheet-title {
+ font-size: 1.5rem;
+ font-weight: 600;
+ color: var(--text-color);
+ margin: 0;
+}
+
+.stop-sheet-id {
+ font-size: 1rem;
+ color: var(--subtitle-color);
+}
+
+.stop-sheet-loading {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 32px;
+ color: var(--subtitle-color);
+ font-size: 1rem;
+}
+
+.stop-sheet-estimates {
+ flex: 1;
+ overflow-y: auto;
+ min-height: 0;
+}
+
+.stop-sheet-subtitle {
+ font-size: 1.1rem;
+ font-weight: 500;
+ color: var(--text-color);
+ margin: 0 0 12px 0;
+}
+
+.stop-sheet-no-estimates {
+ text-align: center;
+ padding: 32px 16px;
+ color: var(--subtitle-color);
+ font-size: 0.95rem;
+}
+
+.stop-sheet-estimates-list {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+}
+
+.stop-sheet-estimate-item {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ padding: 12px;
+ background-color: var(--message-background-color);
+ border-radius: 8px;
+ border: 1px solid var(--border-color);
+}
+
+.stop-sheet-estimate-line {
+ flex-shrink: 0;
+}
+
+.stop-sheet-estimate-details {
+ flex: 1;
+ min-width: 0;
+}
+
+.stop-sheet-estimate-route {
+ font-weight: 500;
+ color: var(--text-color);
+ font-size: 0.95rem;
+ margin-bottom: 2px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.stop-sheet-estimate-time {
+ font-size: 0.85rem;
+ color: var(--subtitle-color);
+}
+
+.stop-sheet-estimate-distance {
+ color: var(--subtitle-color);
+}
+
+.stop-sheet-view-all {
+ display: block;
+ padding: 12px 16px;
+ background-color: var(--button-background-color);
+ color: white;
+ text-decoration: none;
+ text-align: center;
+ border-radius: 8px;
+ font-weight: 500;
+ transition: background-color 0.2s ease;
+
+ margin-block-start: 1rem;
+ margin-inline-start: auto;
+}
+
+.stop-sheet-view-all:hover {
+ background-color: var(--button-hover-background-color);
+ text-decoration: none;
+}
+
+/* Override react-modal-sheet styles for better integration */
+[data-rsbs-overlay] {
+ background-color: rgba(0, 0, 0, 0.3);
+}
+
+[data-rsbs-header] {
+ background-color: var(--background-color);
+ border-bottom: 1px solid var(--border-color);
+}
+
+[data-rsbs-header]:before {
+ background-color: var(--subtitle-color);
+}
+
+[data-rsbs-root] [data-rsbs-overlay] {
+ border-top-left-radius: 16px;
+ border-top-right-radius: 16px;
+}
+
+[data-rsbs-root] [data-rsbs-content] {
+ background-color: var(--background-color);
+ border-top-left-radius: 16px;
+ border-top-right-radius: 16px;
+ max-height: 95vh;
+ overflow: hidden;
+}
diff --git a/src/frontend/app/components/StopSheet.tsx b/src/frontend/app/components/StopSheet.tsx
new file mode 100644
index 0000000..8075e9d
--- /dev/null
+++ b/src/frontend/app/components/StopSheet.tsx
@@ -0,0 +1,154 @@
+import React, { useEffect, useState } from "react";
+import { Sheet } from "react-modal-sheet";
+import { Link } from "react-router";
+import { useTranslation } from "react-i18next";
+import LineIcon from "./LineIcon";
+import { type StopDetails } from "../routes/estimates-$id";
+import "./StopSheet.css";
+
+interface StopSheetProps {
+ isOpen: boolean;
+ onClose: () => void;
+ stopId: number;
+ stopName: string;
+}
+
+const loadStopData = async (stopId: number): Promise<StopDetails> => {
+ const resp = await fetch(`/api/GetStopEstimates?id=${stopId}`, {
+ headers: {
+ Accept: "application/json",
+ },
+ });
+ return await resp.json();
+};
+
+export const StopSheet: React.FC<StopSheetProps> = ({
+ isOpen,
+ onClose,
+ stopId,
+ stopName,
+}) => {
+ const { t } = useTranslation();
+ const [data, setData] = useState<StopDetails | null>(null);
+ const [loading, setLoading] = useState(false);
+
+ useEffect(() => {
+ if (isOpen && stopId) {
+ setLoading(true);
+ setData(null);
+ loadStopData(stopId)
+ .then((stopData) => {
+ setData(stopData);
+ })
+ .catch((error) => {
+ console.error("Failed to load stop data:", error);
+ })
+ .finally(() => {
+ setLoading(false);
+ });
+ }
+ }, [isOpen, stopId]);
+
+ const formatTime = (minutes: number) => {
+ if (minutes > 15) {
+ const now = new Date();
+ const arrival = new Date(now.getTime() + minutes * 60000);
+ return Intl.DateTimeFormat(
+ typeof navigator !== "undefined" ? navigator.language : "en",
+ {
+ hour: "2-digit",
+ minute: "2-digit",
+ }
+ ).format(arrival);
+ } else {
+ return `${minutes} ${t("estimates.minutes", "min")}`;
+ }
+ };
+
+ const formatDistance = (meters: number) => {
+ if (meters > 1024) {
+ return `${(meters / 1000).toFixed(1)} km`;
+ } else {
+ return `${meters} ${t("estimates.meters", "m")}`;
+ }
+ };
+
+ // Show only the next 4 arrivals
+ const limitedEstimates =
+ data?.estimates.sort((a, b) => a.minutes - b.minutes).slice(0, 4) || [];
+
+ return (
+ <Sheet
+ isOpen={isOpen}
+ onClose={onClose}
+ detent="content-height"
+ >
+ <Sheet.Container>
+ <Sheet.Header />
+ <Sheet.Content>
+ <div className="stop-sheet-content">
+ <div className="stop-sheet-header">
+ <h2 className="stop-sheet-title">{stopName}</h2>
+ <span className="stop-sheet-id">({stopId})</span>
+ </div>
+
+ {loading && (
+ <div className="stop-sheet-loading">
+ {t("common.loading", "Loading...")}
+ </div>
+ )}
+
+ {data && !loading && (
+ <>
+ <div className="stop-sheet-estimates">
+ <h3 className="stop-sheet-subtitle">
+ {t("estimates.next_arrivals", "Next arrivals")}
+ </h3>
+
+ {limitedEstimates.length === 0 ? (
+ <div className="stop-sheet-no-estimates">
+ {t("estimates.none", "No hay estimaciones disponibles")}
+ </div>
+ ) : (
+ <div className="stop-sheet-estimates-list">
+ {limitedEstimates.map((estimate, idx) => (
+ <div key={idx} className="stop-sheet-estimate-item">
+ <div className="stop-sheet-estimate-line">
+ <LineIcon line={estimate.line} />
+ </div>
+ <div className="stop-sheet-estimate-details">
+ <div className="stop-sheet-estimate-route">
+ {estimate.route}
+ </div>
+ <div className="stop-sheet-estimate-time">
+ {formatTime(estimate.minutes)}
+ {estimate.meters > -1 && (
+ <span className="stop-sheet-estimate-distance">
+ {" • "}
+ {formatDistance(estimate.meters)}
+ </span>
+ )}
+ </div>
+ </div>
+ </div>
+ ))}
+ </div>
+ )}
+ </div>
+
+ <Link
+ to={`/estimates/${stopId}`}
+ className="stop-sheet-view-all"
+ onClick={onClose}
+ >
+ {t("map.view_all_estimates", "Ver todas las estimaciones")}
+ </Link>
+ </>
+ )}
+ </div>
+ </Sheet.Content>
+ </Sheet.Container>
+ <Sheet.Backdrop />
+ </Sheet>
+ );
+};
diff --git a/src/frontend/app/data/StopDataProvider.ts b/src/frontend/app/data/StopDataProvider.ts
index 0c1e46e..efb0414 100644
--- a/src/frontend/app/data/StopDataProvider.ts
+++ b/src/frontend/app/data/StopDataProvider.ts
@@ -1,20 +1,20 @@
export interface CachedStopList {
- timestamp: number;
- data: Stop[];
+ timestamp: number;
+ data: Stop[];
}
export type StopName = {
- original: string;
- intersect?: string;
-}
+ original: string;
+ intersect?: string;
+};
export interface Stop {
- stopId: number;
- name: StopName;
- latitude?: number;
- longitude?: number;
- lines: string[];
- favourite?: boolean;
+ stopId: number;
+ name: StopName;
+ latitude?: number;
+ longitude?: number;
+ lines: string[];
+ favourite?: boolean;
}
// In-memory cache and lookup map
@@ -25,136 +25,139 @@ let customNames: Record<number, string> = {};
// Initialize cachedStops and customNames once
async function initStops() {
- if (!cachedStops) {
- const response = await fetch('/stops.json');
- const stops = await response.json() as Stop[];
- // build array and map
- stopsMap = {};
- cachedStops = stops.map(stop => {
- const entry = { ...stop, favourite: false } as Stop;
- stopsMap[stop.stopId] = entry;
- return entry;
- });
- // load custom names
- const rawCustom = localStorage.getItem('customStopNames');
- if (rawCustom) customNames = JSON.parse(rawCustom) as Record<number, string>;
- }
+ if (!cachedStops) {
+ const response = await fetch("/stops.json");
+ const stops = (await response.json()) as Stop[];
+ // build array and map
+ stopsMap = {};
+ cachedStops = stops.map((stop) => {
+ const entry = { ...stop, favourite: false } as Stop;
+ stopsMap[stop.stopId] = entry;
+ return entry;
+ });
+ // load custom names
+ const rawCustom = localStorage.getItem("customStopNames");
+ if (rawCustom)
+ customNames = JSON.parse(rawCustom) as Record<number, string>;
+ }
}
async function getStops(): Promise<Stop[]> {
- await initStops();
- // update favourites
- const rawFav = localStorage.getItem('favouriteStops');
- const favouriteStops = rawFav ? JSON.parse(rawFav) as number[] : [];
- cachedStops!.forEach(stop => stop.favourite = favouriteStops.includes(stop.stopId));
- return cachedStops!;
+ await initStops();
+ // update favourites
+ const rawFav = localStorage.getItem("favouriteStops");
+ const favouriteStops = rawFav ? (JSON.parse(rawFav) as number[]) : [];
+ cachedStops!.forEach(
+ (stop) => (stop.favourite = favouriteStops.includes(stop.stopId)),
+ );
+ return cachedStops!;
}
// New: get single stop by id
async function getStopById(stopId: number): Promise<Stop | undefined> {
- await initStops();
- const stop = stopsMap[stopId];
- if (stop) {
- const rawFav = localStorage.getItem('favouriteStops');
- const favouriteStops = rawFav ? JSON.parse(rawFav) as number[] : [];
- stop.favourite = favouriteStops.includes(stopId);
- }
- return stop;
+ await initStops();
+ const stop = stopsMap[stopId];
+ if (stop) {
+ const rawFav = localStorage.getItem("favouriteStops");
+ const favouriteStops = rawFav ? (JSON.parse(rawFav) as number[]) : [];
+ stop.favourite = favouriteStops.includes(stopId);
+ }
+ return stop;
}
// Updated display name to include custom names
function getDisplayName(stop: Stop): string {
- if (customNames[stop.stopId]) return customNames[stop.stopId];
- const nameObj = stop.name;
- return nameObj.intersect || nameObj.original;
+ if (customNames[stop.stopId]) return customNames[stop.stopId];
+ const nameObj = stop.name;
+ return nameObj.intersect || nameObj.original;
}
// New: set or remove custom names
function setCustomName(stopId: number, label: string) {
- customNames[stopId] = label;
- localStorage.setItem('customStopNames', JSON.stringify(customNames));
+ customNames[stopId] = label;
+ localStorage.setItem("customStopNames", JSON.stringify(customNames));
}
function removeCustomName(stopId: number) {
- delete customNames[stopId];
- localStorage.setItem('customStopNames', JSON.stringify(customNames));
+ delete customNames[stopId];
+ localStorage.setItem("customStopNames", JSON.stringify(customNames));
}
// New: get custom label for a stop
function getCustomName(stopId: number): string | undefined {
- return customNames[stopId];
+ return customNames[stopId];
}
function addFavourite(stopId: number) {
- const rawFavouriteStops = localStorage.getItem('favouriteStops');
- let favouriteStops: number[] = [];
- if (rawFavouriteStops) {
- favouriteStops = JSON.parse(rawFavouriteStops) as number[];
- }
+ const rawFavouriteStops = localStorage.getItem("favouriteStops");
+ let favouriteStops: number[] = [];
+ if (rawFavouriteStops) {
+ favouriteStops = JSON.parse(rawFavouriteStops) as number[];
+ }
- if (!favouriteStops.includes(stopId)) {
- favouriteStops.push(stopId);
- localStorage.setItem('favouriteStops', JSON.stringify(favouriteStops));
- }
+ if (!favouriteStops.includes(stopId)) {
+ favouriteStops.push(stopId);
+ localStorage.setItem("favouriteStops", JSON.stringify(favouriteStops));
+ }
}
function removeFavourite(stopId: number) {
- const rawFavouriteStops = localStorage.getItem('favouriteStops');
- let favouriteStops: number[] = [];
- if (rawFavouriteStops) {
- favouriteStops = JSON.parse(rawFavouriteStops) as number[];
- }
+ const rawFavouriteStops = localStorage.getItem("favouriteStops");
+ let favouriteStops: number[] = [];
+ if (rawFavouriteStops) {
+ favouriteStops = JSON.parse(rawFavouriteStops) as number[];
+ }
- const newFavouriteStops = favouriteStops.filter(id => id !== stopId);
- localStorage.setItem('favouriteStops', JSON.stringify(newFavouriteStops));
+ const newFavouriteStops = favouriteStops.filter((id) => id !== stopId);
+ localStorage.setItem("favouriteStops", JSON.stringify(newFavouriteStops));
}
function isFavourite(stopId: number): boolean {
- const rawFavouriteStops = localStorage.getItem('favouriteStops');
- if (rawFavouriteStops) {
- const favouriteStops = JSON.parse(rawFavouriteStops) as number[];
- return favouriteStops.includes(stopId);
- }
- return false;
+ const rawFavouriteStops = localStorage.getItem("favouriteStops");
+ if (rawFavouriteStops) {
+ const favouriteStops = JSON.parse(rawFavouriteStops) as number[];
+ return favouriteStops.includes(stopId);
+ }
+ return false;
}
const RECENT_STOPS_LIMIT = 10;
function pushRecent(stopId: number) {
- const rawRecentStops = localStorage.getItem('recentStops');
- let recentStops: Set<number> = new Set();
- if (rawRecentStops) {
- recentStops = new Set(JSON.parse(rawRecentStops) as number[]);
- }
+ const rawRecentStops = localStorage.getItem("recentStops");
+ let recentStops: Set<number> = new Set();
+ if (rawRecentStops) {
+ recentStops = new Set(JSON.parse(rawRecentStops) as number[]);
+ }
- recentStops.add(stopId);
- if (recentStops.size > RECENT_STOPS_LIMIT) {
- const iterator = recentStops.values();
- const val = iterator.next().value as number;
- recentStops.delete(val);
- }
+ recentStops.add(stopId);
+ if (recentStops.size > RECENT_STOPS_LIMIT) {
+ const iterator = recentStops.values();
+ const val = iterator.next().value as number;
+ recentStops.delete(val);
+ }
- localStorage.setItem('recentStops', JSON.stringify(Array.from(recentStops)));
+ localStorage.setItem("recentStops", JSON.stringify(Array.from(recentStops)));
}
function getRecent(): number[] {
- const rawRecentStops = localStorage.getItem('recentStops');
- if (rawRecentStops) {
- return JSON.parse(rawRecentStops) as number[];
- }
- return [];
+ const rawRecentStops = localStorage.getItem("recentStops");
+ if (rawRecentStops) {
+ return JSON.parse(rawRecentStops) as number[];
+ }
+ return [];
}
export default {
- getStops,
- getStopById,
- getCustomName,
- getDisplayName,
- setCustomName,
- removeCustomName,
- addFavourite,
- removeFavourite,
- isFavourite,
- pushRecent,
- getRecent
+ getStops,
+ getStopById,
+ getCustomName,
+ getDisplayName,
+ setCustomName,
+ removeCustomName,
+ addFavourite,
+ removeFavourite,
+ isFavourite,
+ pushRecent,
+ getRecent,
};
diff --git a/src/frontend/app/i18n/index.ts b/src/frontend/app/i18n/index.ts
index a7ba6aa..492a9a9 100644
--- a/src/frontend/app/i18n/index.ts
+++ b/src/frontend/app/i18n/index.ts
@@ -1,15 +1,15 @@
-import i18n from 'i18next';
-import { initReactI18next } from 'react-i18next';
-import LanguageDetector from 'i18next-browser-languagedetector';
-import esES from './locales/es-ES.json';
-import glES from './locales/gl-ES.json';
-import enGB from './locales/en-GB.json';
+import i18n from "i18next";
+import { initReactI18next } from "react-i18next";
+import LanguageDetector from "i18next-browser-languagedetector";
+import esES from "./locales/es-ES.json";
+import glES from "./locales/gl-ES.json";
+import enGB from "./locales/en-GB.json";
// Add more languages as needed
const resources = {
- 'es-ES': { translation: esES },
- 'gl-ES': { translation: glES },
- 'en-GB': { translation: enGB },
+ "es-ES": { translation: esES },
+ "gl-ES": { translation: glES },
+ "en-GB": { translation: enGB },
};
i18n
@@ -17,14 +17,14 @@ i18n
.use(initReactI18next)
.init({
resources,
- fallbackLng: 'es-ES',
+ fallbackLng: "es-ES",
interpolation: {
escapeValue: false,
},
- supportedLngs: ['es-ES', 'gl-ES', 'en-GB'],
+ supportedLngs: ["es-ES", "gl-ES", "en-GB"],
detection: {
- order: ['querystring', 'cookie', 'localStorage', 'navigator', 'htmlTag'],
- caches: ['localStorage', 'cookie'],
+ order: ["querystring", "cookie", "localStorage", "navigator", "htmlTag"],
+ caches: ["localStorage", "cookie"],
},
});
diff --git a/src/frontend/app/i18n/locales/en-GB.json b/src/frontend/app/i18n/locales/en-GB.json
index cd0780c..264290b 100644
--- a/src/frontend/app/i18n/locales/en-GB.json
+++ b/src/frontend/app/i18n/locales/en-GB.json
@@ -43,11 +43,13 @@
"arrival": "Arrival",
"distance": "Distance",
"not_available": "Not available",
- "none": "No estimates available"
+ "none": "No estimates available",
+ "next_arrivals": "Next arrivals"
},
"map": {
"popup_title": "Stop",
- "lines": "Lines"
+ "lines": "Lines",
+ "view_all_estimates": "View all estimates"
},
"common": {
"loading": "Loading...",
diff --git a/src/frontend/app/i18n/locales/es-ES.json b/src/frontend/app/i18n/locales/es-ES.json
index 2f2bb86..d7d78ad 100644
--- a/src/frontend/app/i18n/locales/es-ES.json
+++ b/src/frontend/app/i18n/locales/es-ES.json
@@ -43,11 +43,13 @@
"arrival": "Llegada",
"distance": "Distancia",
"not_available": "No disponible",
- "none": "No hay estimaciones disponibles"
+ "none": "No hay estimaciones disponibles",
+ "next_arrivals": "Próximas llegadas"
},
"map": {
"popup_title": "Parada",
- "lines": "Líneas"
+ "lines": "Líneas",
+ "view_all_estimates": "Ver todas las estimaciones"
},
"common": {
"loading": "Cargando...",
diff --git a/src/frontend/app/i18n/locales/gl-ES.json b/src/frontend/app/i18n/locales/gl-ES.json
index d2558e5..3012638 100644
--- a/src/frontend/app/i18n/locales/gl-ES.json
+++ b/src/frontend/app/i18n/locales/gl-ES.json
@@ -43,11 +43,13 @@
"arrival": "Chegada",
"distance": "Distancia",
"not_available": "Non dispoñible",
- "none": "Non hai estimacións dispoñibles"
+ "none": "Non hai estimacións dispoñibles",
+ "next_arrivals": "Próximas chegadas"
},
"map": {
"popup_title": "Parada",
- "lines": "Liñas"
+ "lines": "Liñas",
+ "view_all_estimates": "Ver todas as estimacións"
},
"common": {
"loading": "Cargando...",
diff --git a/src/frontend/app/maps/styleloader.ts b/src/frontend/app/maps/styleloader.ts
index f00aacc..cf285a5 100644
--- a/src/frontend/app/maps/styleloader.ts
+++ b/src/frontend/app/maps/styleloader.ts
@@ -1,49 +1,58 @@
import type { StyleSpecification } from "react-map-gl/maplibre";
-export async function loadStyle(styleName: string, colorScheme: string): Promise<StyleSpecification> {
- const stylePath = `/maps/styles/${styleName}-${colorScheme}.json`;
- const resp = await fetch(stylePath);
+export async function loadStyle(
+ styleName: string,
+ colorScheme: string,
+): Promise<StyleSpecification> {
+ const stylePath = `/maps/styles/${styleName}-${colorScheme}.json`;
+ const resp = await fetch(stylePath);
- if (!resp.ok) {
- throw new Error(`Failed to load style: ${stylePath}`);
- }
+ if (!resp.ok) {
+ throw new Error(`Failed to load style: ${stylePath}`);
+ }
- const style = await resp.json();
+ const style = await resp.json();
- const baseUrl = window.location.origin;
- const spritePath = style.sprite;
+ const baseUrl = window.location.origin;
+ const spritePath = style.sprite;
- // Handle both string and array cases for spritePath
- if (Array.isArray(spritePath)) {
- // For array format, update each sprite object's URL to be absolute
- style.sprite = spritePath.map(spriteObj => {
- const isAbsoluteUrl = spriteObj.url.startsWith("http://") || spriteObj.url.startsWith("https://");
- if (isAbsoluteUrl) {
- return spriteObj;
- }
+ // Handle both string and array cases for spritePath
+ if (Array.isArray(spritePath)) {
+ // For array format, update each sprite object's URL to be absolute
+ style.sprite = spritePath.map((spriteObj) => {
+ const isAbsoluteUrl =
+ spriteObj.url.startsWith("http://") ||
+ spriteObj.url.startsWith("https://");
+ if (isAbsoluteUrl) {
+ return spriteObj;
+ }
- return {
- ...spriteObj,
- url: `${baseUrl}${spriteObj.url}`
- };
- });
- } else if (typeof spritePath === "string") {
- if (!spritePath.startsWith("http://") && !spritePath.startsWith("https://")) {
- style.sprite = `${baseUrl}${spritePath}`;
- }
+ return {
+ ...spriteObj,
+ url: `${baseUrl}${spriteObj.url}`,
+ };
+ });
+ } else if (typeof spritePath === "string") {
+ if (
+ !spritePath.startsWith("http://") &&
+ !spritePath.startsWith("https://")
+ ) {
+ style.sprite = `${baseUrl}${spritePath}`;
}
+ }
- // Detect on each source if it the 'tiles' URLs are relative and convert them to absolute URLs
- for (const sourceKey in style.sources) {
- const source = style.sources[sourceKey];
- for (const tileKey in source.tiles) {
- const tileUrl = source.tiles[tileKey];
- const isAbsoluteUrl = tileUrl.startsWith("http://") || tileUrl.startsWith("https://");
- if (!isAbsoluteUrl) {
- source.tiles[tileKey] = `${baseUrl}${tileUrl}`;
- }
- }
+ // Detect on each source if it the 'tiles' URLs are relative and convert them to absolute URLs
+ for (const sourceKey in style.sources) {
+ const source = style.sources[sourceKey];
+ for (const tileKey in source.tiles) {
+ const tileUrl = source.tiles[tileKey];
+ const isAbsoluteUrl =
+ tileUrl.startsWith("http://") || tileUrl.startsWith("https://");
+ if (!isAbsoluteUrl) {
+ source.tiles[tileKey] = `${baseUrl}${tileUrl}`;
+ }
}
+ }
- return style as StyleSpecification;
+ return style as StyleSpecification;
}
diff --git a/src/frontend/app/root.css b/src/frontend/app/root.css
index a5024df..da3ab67 100644
--- a/src/frontend/app/root.css
+++ b/src/frontend/app/root.css
@@ -10,10 +10,10 @@
--star-color: #ffcc00;
--message-background-color: #f8f9fa;
- font-family: 'Roboto Variable', Roboto, Arial, sans-serif;
+ font-family: "Roboto Variable", Roboto, Arial, sans-serif;
}
-[data-theme='dark'] {
+[data-theme="dark"] {
--colour-scheme: dark;
--background-color: #121212;
--text-color: #ffffff;
@@ -65,8 +65,8 @@ body {
align-items: center;
text-decoration: none;
color: var(--text-color);
- padding: .25rem 0;
- border-radius: .5rem;
+ padding: 0.25rem 0;
+ border-radius: 0.5rem;
}
.navigation-bar__link svg {
diff --git a/src/frontend/app/root.tsx b/src/frontend/app/root.tsx
index 8ffbe86..55c6c16 100644
--- a/src/frontend/app/root.tsx
+++ b/src/frontend/app/root.tsx
@@ -5,7 +5,7 @@ import {
Meta,
Outlet,
Scripts,
- ScrollRestoration
+ ScrollRestoration,
} from "react-router";
import type { Route } from "./+types/root";
@@ -24,13 +24,14 @@ maplibregl.addProtocol("pmtiles", pmtiles.tile);
import "./i18n";
-if ('serviceWorker' in navigator) {
- navigator.serviceWorker.register('/sw.js')
+if ("serviceWorker" in navigator) {
+ navigator.serviceWorker
+ .register("/sw.js")
.then((registration) => {
- console.log('Service Worker registered with scope:', registration.scope);
+ console.log("Service Worker registered with scope:", registration.scope);
})
.catch((error) => {
- console.error('Service Worker registration failed:', error);
+ console.error("Service Worker registration failed:", error);
});
}
@@ -54,15 +55,27 @@ export function Layout({ children }: { children: React.ReactNode }) {
<link rel="canonical" href="https://urbanovigo.costas.dev/" />
- <meta name="description" content="Aplicación web para encontrar paradas y tiempos de llegada de los autobuses urbanos de Vigo, España." />
- <meta name="keywords" content="Vigo, autobús, urbano, parada, tiempo, llegada, transporte, público, España" />
+ <meta
+ name="description"
+ content="Aplicación web para encontrar paradas y tiempos de llegada de los autobuses urbanos de Vigo, España."
+ />
+ <meta
+ name="keywords"
+ content="Vigo, autobús, urbano, parada, tiempo, llegada, transporte, público, España"
+ />
<meta name="author" content="Ariel Costas Guerrero" />
<meta property="og:title" content="UrbanoVigo Web" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://urbanovigo.costas.dev/" />
- <meta property="og:image" content="https://urbanovigo.costas.dev/logo-512.jpg" />
- <meta property="og:description" content="Aplicación web para encontrar paradas y tiempos de llegada de los autobuses urbanos de Vigo, España." />
+ <meta
+ property="og:image"
+ content="https://urbanovigo.costas.dev/logo-512.jpg"
+ />
+ <meta
+ property="og:description"
+ content="Aplicación web para encontrar paradas y tiempos de llegada de los autobuses urbanos de Vigo, España."
+ />
<link rel="manifest" href="/manifest.webmanifest" />
@@ -82,20 +95,20 @@ export function Layout({ children }: { children: React.ReactNode }) {
);
}
- // Helper: check if coordinates are within Vigo bounds
- function isWithinVigo(lngLat: LngLatLike): boolean {
- let lng: number, lat: number;
- if (Array.isArray(lngLat)) {
- [lng, lat] = lngLat;
- } else if ('lng' in lngLat && 'lat' in lngLat) {
- lng = lngLat.lng;
- lat = lngLat.lat;
- } else {
- return false;
- }
- // Rough bounding box for Vigo
- return lat >= 42.18 && lat <= 42.30 && lng >= -8.78 && lng <= -8.65;
+// Helper: check if coordinates are within Vigo bounds
+function isWithinVigo(lngLat: LngLatLike): boolean {
+ let lng: number, lat: number;
+ if (Array.isArray(lngLat)) {
+ [lng, lat] = lngLat;
+ } else if ("lng" in lngLat && "lat" in lngLat) {
+ lng = lngLat.lng;
+ lat = lngLat.lat;
+ } else {
+ return false;
}
+ // Rough bounding box for Vigo
+ return lat >= 42.18 && lat <= 42.3 && lng >= -8.78 && lng <= -8.65;
+}
import NavBar from "./components/NavBar";
@@ -109,9 +122,6 @@ export default function App() {
<NavBar />
</footer>
</AppProvider>
-
-
-
);
}
diff --git a/src/frontend/app/routes.tsx b/src/frontend/app/routes.tsx
index 1bca5e8..9dd8a66 100644
--- a/src/frontend/app/routes.tsx
+++ b/src/frontend/app/routes.tsx
@@ -5,5 +5,5 @@ export default [
route("/stops", "routes/stoplist.tsx"),
route("/map", "routes/map.tsx"),
route("/estimates/:id", "routes/estimates-$id.tsx"),
- route("/settings", "routes/settings.tsx")
+ route("/settings", "routes/settings.tsx"),
] satisfies RouteConfig;
diff --git a/src/frontend/app/routes/estimates-$id.css b/src/frontend/app/routes/estimates-$id.css
index 86ca09b..3905f3e 100644
--- a/src/frontend/app/routes/estimates-$id.css
+++ b/src/frontend/app/routes/estimates-$id.css
@@ -102,4 +102,4 @@
.edit-icon:hover {
color: var(--star-color);
-} \ No newline at end of file
+}
diff --git a/src/frontend/app/routes/estimates-$id.tsx b/src/frontend/app/routes/estimates-$id.tsx
index e0e4fff..f2ef83a 100644
--- a/src/frontend/app/routes/estimates-$id.tsx
+++ b/src/frontend/app/routes/estimates-$id.tsx
@@ -1,7 +1,7 @@
import { type JSX, useEffect, useState } from "react";
import { useParams } from "react-router";
import StopDataProvider from "../data/StopDataProvider";
-import { Star, Edit2 } from 'lucide-react';
+import { Star, Edit2 } from "lucide-react";
import "./estimates-$id.css";
import { RegularTable } from "../components/RegularTable";
import { useApp } from "../AppContext";
@@ -9,97 +9,99 @@ import { GroupedTable } from "../components/GroupedTable";
import { useTranslation } from "react-i18next";
export interface StopDetails {
- stop: {
- id: number;
- name: string;
- latitude: number;
- longitude: number;
- }
- estimates: {
- line: string;
- route: string;
- minutes: number;
- meters: number;
- }[]
+ stop: {
+ id: number;
+ name: string;
+ latitude: number;
+ longitude: number;
+ };
+ estimates: {
+ line: string;
+ route: string;
+ minutes: number;
+ meters: number;
+ }[];
}
const loadData = async (stopId: string) => {
- const resp = await fetch(`/api/GetStopEstimates?id=${stopId}`, {
- headers: {
- 'Accept': 'application/json',
- }
- });
- return await resp.json();
+ const resp = await fetch(`/api/GetStopEstimates?id=${stopId}`, {
+ headers: {
+ Accept: "application/json",
+ },
+ });
+ return await resp.json();
};
export default function Estimates() {
- const { t } = useTranslation();
- const params = useParams();
- const stopIdNum = parseInt(params.id ?? "");
- const [customName, setCustomName] = useState<string | undefined>(undefined);
- const [data, setData] = useState<StopDetails | null>(null);
- const [dataDate, setDataDate] = useState<Date | null>(null);
- const [favourited, setFavourited] = useState(false);
- const { tableStyle } = useApp();
+ const { t } = useTranslation();
+ const params = useParams();
+ const stopIdNum = parseInt(params.id ?? "");
+ const [customName, setCustomName] = useState<string | undefined>(undefined);
+ const [data, setData] = useState<StopDetails | null>(null);
+ const [dataDate, setDataDate] = useState<Date | null>(null);
+ const [favourited, setFavourited] = useState(false);
+ const { tableStyle } = useApp();
- useEffect(() => {
- loadData(params.id!)
- .then((body: StopDetails) => {
- setData(body);
- setDataDate(new Date());
- setCustomName(StopDataProvider.getCustomName(stopIdNum));
- })
+ useEffect(() => {
+ loadData(params.id!).then((body: StopDetails) => {
+ setData(body);
+ setDataDate(new Date());
+ setCustomName(StopDataProvider.getCustomName(stopIdNum));
+ });
+ StopDataProvider.pushRecent(parseInt(params.id ?? ""));
- StopDataProvider.pushRecent(parseInt(params.id ?? ""));
+ setFavourited(StopDataProvider.isFavourite(parseInt(params.id ?? "")));
+ }, [params.id]);
- setFavourited(
- StopDataProvider.isFavourite(parseInt(params.id ?? ""))
- );
- }, [params.id]);
+ const toggleFavourite = () => {
+ if (favourited) {
+ StopDataProvider.removeFavourite(stopIdNum);
+ setFavourited(false);
+ } else {
+ StopDataProvider.addFavourite(stopIdNum);
+ setFavourited(true);
+ }
+ };
+ const handleRename = () => {
+ const current = customName ?? data?.stop.name;
+ const input = window.prompt("Custom name for this stop:", current);
+ if (input === null) return; // cancelled
+ const trimmed = input.trim();
+ if (trimmed === "") {
+ StopDataProvider.removeCustomName(stopIdNum);
+ setCustomName(undefined);
+ } else {
+ StopDataProvider.setCustomName(stopIdNum, trimmed);
+ setCustomName(trimmed);
+ }
+ };
- const toggleFavourite = () => {
- if (favourited) {
- StopDataProvider.removeFavourite(stopIdNum);
- setFavourited(false);
- } else {
- StopDataProvider.addFavourite(stopIdNum);
- setFavourited(true);
- }
- }
+ if (data === null)
+ return <h1 className="page-title">{t("common.loading")}</h1>;
- const handleRename = () => {
- const current = customName ?? data?.stop.name;
- const input = window.prompt('Custom name for this stop:', current);
- if (input === null) return; // cancelled
- const trimmed = input.trim();
- if (trimmed === '') {
- StopDataProvider.removeCustomName(stopIdNum);
- setCustomName(undefined);
- } else {
- StopDataProvider.setCustomName(stopIdNum, trimmed);
- setCustomName(trimmed);
- }
- };
+ return (
+ <div className="page-container">
+ <div className="estimates-header">
+ <h1 className="page-title">
+ <Star
+ className={`star-icon ${favourited ? "active" : ""}`}
+ onClick={toggleFavourite}
+ />
+ <Edit2 className="edit-icon" onClick={handleRename} />
+ {customName ?? data.stop.name}{" "}
+ <span className="estimates-stop-id">({data.stop.id})</span>
+ </h1>
+ </div>
- if (data === null) return <h1 className="page-title">{t('common.loading')}</h1>
-
- return (
- <div className="page-container">
- <div className="estimates-header">
- <h1 className="page-title">
- <Star className={`star-icon ${favourited ? 'active' : ''}`} onClick={toggleFavourite} />
- <Edit2 className="edit-icon" onClick={handleRename} />
- {(customName ?? data.stop.name)} <span className="estimates-stop-id">({data.stop.id})</span>
- </h1>
- </div>
-
- <div className="table-responsive">
- {tableStyle === 'grouped' ?
- <GroupedTable data={data} dataDate={dataDate} /> :
- <RegularTable data={data} dataDate={dataDate} />}
- </div>
- </div>
- )
+ <div className="table-responsive">
+ {tableStyle === "grouped" ? (
+ <GroupedTable data={data} dataDate={dataDate} />
+ ) : (
+ <RegularTable data={data} dataDate={dataDate} />
+ )}
+ </div>
+ </div>
+ );
}
diff --git a/src/frontend/app/routes/index.tsx b/src/frontend/app/routes/index.tsx
index 7c8ab40..252abec 100644
--- a/src/frontend/app/routes/index.tsx
+++ b/src/frontend/app/routes/index.tsx
@@ -1,5 +1,5 @@
import { Navigate, redirect, type LoaderFunction } from "react-router";
export default function Index() {
- return <Navigate to={"/stops"} replace />;
+ return <Navigate to={"/stops"} replace />;
}
diff --git a/src/frontend/app/routes/map.css b/src/frontend/app/routes/map.css
index 115df46..0b3ebe5 100644
--- a/src/frontend/app/routes/map.css
+++ b/src/frontend/app/routes/map.css
@@ -1,86 +1,86 @@
/* Map page specific styles */
.map-container {
- height: calc(100dvh - 140px);
- margin: -16px;
- margin-bottom: 1rem;
- position: relative;
+ height: calc(100dvh - 140px);
+ margin: -16px;
+ margin-bottom: 1rem;
+ position: relative;
}
/* Fullscreen map styles */
.fullscreen-container {
- position: absolute;
- top: 0;
- left: 0;
- width: 100vw;
- height: 100dvh;
- padding: 0;
- margin: 0;
- max-width: none;
- overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100dvh;
+ padding: 0;
+ margin: 0;
+ max-width: none;
+ overflow: hidden;
}
.fullscreen-map {
- width: 100%;
- height: 100%;
+ width: 100%;
+ height: 100%;
}
.fullscreen-loading {
- display: flex;
- justify-content: center;
- align-items: center;
- height: 100dvh;
- width: 100vw;
- font-size: 1.8rem;
- font-weight: 600;
- color: var(--text-color);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100dvh;
+ width: 100vw;
+ font-size: 1.8rem;
+ font-weight: 600;
+ color: var(--text-color);
}
/* Map marker and popup styles */
.stop-marker {
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
- transition: all 0.2s ease-in-out;
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
+ transition: all 0.2s ease-in-out;
}
.stop-marker:hover {
- transform: scale(1.2);
+ transform: scale(1.2);
}
.maplibregl-popup {
- max-width: 250px;
+ max-width: 250px;
}
.maplibregl-popup-content {
- padding: 12px;
- border-radius: 8px;
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+ padding: 12px;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
.popup-line-icons {
- display: flex;
- flex-wrap: wrap;
- margin: 6px 0;
- gap: 5px;
+ display: flex;
+ flex-wrap: wrap;
+ margin: 6px 0;
+ gap: 5px;
}
.popup-line {
- display: inline-block;
- background-color: var(--button-background-color);
- color: white;
- padding: 2px 6px;
- margin-right: 4px;
- border-radius: 4px;
- font-size: 0.8rem;
- font-weight: 500;
+ display: inline-block;
+ background-color: var(--button-background-color);
+ color: white;
+ padding: 2px 6px;
+ margin-right: 4px;
+ border-radius: 4px;
+ font-size: 0.8rem;
+ font-weight: 500;
}
.popup-link {
- display: block;
- margin-top: 8px;
- color: var(--button-background-color);
- text-decoration: none;
- font-weight: 500;
+ display: block;
+ margin-top: 8px;
+ color: var(--button-background-color);
+ text-decoration: none;
+ font-weight: 500;
}
.popup-link:hover {
- text-decoration: underline;
+ text-decoration: underline;
}
diff --git a/src/frontend/app/routes/map.tsx b/src/frontend/app/routes/map.tsx
index ca095e2..5887b9c 100644
--- a/src/frontend/app/routes/map.tsx
+++ b/src/frontend/app/routes/map.tsx
@@ -1,13 +1,21 @@
import StopDataProvider from "../data/StopDataProvider";
-import './map.css';
+import "./map.css";
-import { useEffect, useRef, useState } from 'react';
+import { useEffect, useRef, useState } from "react";
import { useApp } from "../AppContext";
-import Map, { AttributionControl, GeolocateControl, Layer, NavigationControl, Popup, Source, type MapRef, type MapLayerMouseEvent, type StyleSpecification } from "react-map-gl/maplibre";
+import Map, {
+ AttributionControl,
+ GeolocateControl,
+ Layer,
+ NavigationControl,
+ Source,
+ type MapRef,
+ type MapLayerMouseEvent,
+ type StyleSpecification,
+} from "react-map-gl/maplibre";
import { loadStyle } from "app/maps/styleloader";
-import type { Feature as GeoJsonFeature, Point } from 'geojson';
-import LineIcon from "~/components/LineIcon";
-import { Link } from "react-router";
+import type { Feature as GeoJsonFeature, Point } from "geojson";
+import { StopSheet } from "~/components/StopSheet";
import { useTranslation } from "react-i18next";
// Default minimal fallback style before dynamic loading
@@ -16,154 +24,154 @@ const defaultStyle: StyleSpecification = {
glyphs: `${window.location.origin}/maps/fonts/{fontstack}/{range}.pbf`,
sprite: `${window.location.origin}/maps/spritesheet/sprite`,
sources: {},
- layers: []
+ layers: [],
};
// Componente principal del mapa
export default function StopMap() {
- const { t } = useTranslation();
- const [stops, setStops] = useState<GeoJsonFeature<Point, { stopId: number; name: string; lines: string[] }>[]>([]);
- const [popupInfo, setPopupInfo] = useState<any>(null);
- const { mapState, updateMapState, theme } = useApp();
- const mapRef = useRef<MapRef>(null);
- const [mapStyleKey, setMapStyleKey] = useState<string>("light");
+ const { t } = useTranslation();
+ const [stops, setStops] = useState<
+ GeoJsonFeature<Point, { stopId: number; name: string; lines: string[] }>[]
+ >([]);
+ const [selectedStop, setSelectedStop] = useState<{
+ stopId: number;
+ name: string;
+ } | null>(null);
+ const [isSheetOpen, setIsSheetOpen] = useState(false);
+ const { mapState, updateMapState, theme } = useApp();
+ const mapRef = useRef<MapRef>(null);
+ const [mapStyleKey, setMapStyleKey] = useState<string>("light");
- // Style state for Map component
- const [mapStyle, setMapStyle] = useState<StyleSpecification>(defaultStyle);
+ // Style state for Map component
+ const [mapStyle, setMapStyle] = useState<StyleSpecification>(defaultStyle);
- // Handle click events on clusters and individual stops
- const onMapClick = (e: MapLayerMouseEvent) => {
- const features = e.features;
- if (!features || features.length === 0) return;
- const feature = features[0];
- const props: any = feature.properties;
+ // Handle click events on clusters and individual stops
+ const onMapClick = (e: MapLayerMouseEvent) => {
+ const features = e.features;
+ if (!features || features.length === 0) return;
+ const feature = features[0];
+ const props: any = feature.properties;
- handlePointClick(feature);
- };
+ handlePointClick(feature);
+ };
- useEffect(() => {
- StopDataProvider.getStops().then(data => {
- const features: GeoJsonFeature<Point, { stopId: number; name: string; lines: string[] }>[] = data.map(s => ({
- type: "Feature",
- geometry: { type: "Point", coordinates: [s.longitude as number, s.latitude as number] },
- properties: { stopId: s.stopId, name: s.name.original, lines: s.lines }
- }));
- setStops(features);
- });
- }, []);
+ useEffect(() => {
+ StopDataProvider.getStops().then((data) => {
+ const features: GeoJsonFeature<
+ Point,
+ { stopId: number; name: string; lines: string[] }
+ >[] = data.map((s) => ({
+ type: "Feature",
+ geometry: {
+ type: "Point",
+ coordinates: [s.longitude as number, s.latitude as number],
+ },
+ properties: { stopId: s.stopId, name: s.name.original, lines: s.lines },
+ }));
+ setStops(features);
+ });
+ }, []);
- useEffect(() => {
- const styleName = "carto";
- loadStyle(styleName, theme)
- .then(style => setMapStyle(style))
- .catch(error => console.error("Failed to load map style:", error));
- }, [mapStyleKey, theme]);
+ useEffect(() => {
+ const styleName = "carto";
+ loadStyle(styleName, theme)
+ .then((style) => setMapStyle(style))
+ .catch((error) => console.error("Failed to load map style:", error));
+ }, [mapStyleKey, theme]);
- useEffect(() => {
- const handleMapChange = () => {
- if (!mapRef.current) return;
- const map = mapRef.current.getMap();
- if (!map) return;
- const center = map.getCenter();
- const zoom = map.getZoom();
- updateMapState([center.lat, center.lng], zoom);
- };
+ useEffect(() => {
+ const handleMapChange = () => {
+ if (!mapRef.current) return;
+ const map = mapRef.current.getMap();
+ if (!map) return;
+ const center = map.getCenter();
+ const zoom = map.getZoom();
+ updateMapState([center.lat, center.lng], zoom);
+ };
- if (mapRef.current) {
- const map = mapRef.current.getMap();
- if (map) {
- map.on('moveend', handleMapChange);
- }
- }
+ if (mapRef.current) {
+ const map = mapRef.current.getMap();
+ if (map) {
+ map.on("moveend", handleMapChange);
+ }
+ }
- return () => {
- if (mapRef.current) {
- const map = mapRef.current.getMap();
- if (map) {
- map.off('moveend', handleMapChange);
- }
- }
- };
- }, [mapRef.current]);
+ return () => {
+ if (mapRef.current) {
+ const map = mapRef.current.getMap();
+ if (map) {
+ map.off("moveend", handleMapChange);
+ }
+ }
+ };
+ }, [mapRef.current]);
- const getLatitude = (center: any) => Array.isArray(center) ? center[0] : center.lat;
- const getLongitude = (center: any) => Array.isArray(center) ? center[1] : center.lng;
+ const getLatitude = (center: any) =>
+ Array.isArray(center) ? center[0] : center.lat;
+ const getLongitude = (center: any) =>
+ Array.isArray(center) ? center[1] : center.lng;
- const handlePointClick = (feature: any) => {
- const props: any = feature.properties;
- // fetch full stop to get lines array
- StopDataProvider.getStopById(props.stopId).then(stop => {
- if (!stop) return;
- setPopupInfo({
- geometry: feature.geometry,
- properties: {
- stopId: stop.stopId,
- name: stop.name.original,
- lines: stop.lines
- }
- });
- });
- };
+ const handlePointClick = (feature: any) => {
+ const props: any = feature.properties;
+ // fetch full stop to get lines array
+ StopDataProvider.getStopById(props.stopId).then((stop) => {
+ if (!stop) return;
+ setSelectedStop({
+ stopId: stop.stopId,
+ name: stop.name.original,
+ });
+ setIsSheetOpen(true);
+ });
+ };
- return (
- <Map
- mapStyle={mapStyle}
- style={{ width: '100%', height: '100%' }}
- interactiveLayerIds={["stops"]}
- onClick={onMapClick}
- minZoom={11}
- scrollZoom
- pitch={0}
- roll={0}
- ref={mapRef}
- initialViewState={{
- latitude: getLatitude(mapState.center),
- longitude: getLongitude(mapState.center),
- zoom: mapState.zoom,
- }}
- attributionControl={false}
- >
- <NavigationControl position="top-right" />
- <GeolocateControl position="top-right" trackUserLocation={true} />
- <AttributionControl position="bottom-right" compact={false} />
+ return (
+ <Map
+ mapStyle={mapStyle}
+ style={{ width: "100%", height: "100%" }}
+ interactiveLayerIds={["stops"]}
+ onClick={onMapClick}
+ minZoom={11}
+ scrollZoom
+ pitch={0}
+ roll={0}
+ ref={mapRef}
+ initialViewState={{
+ latitude: getLatitude(mapState.center),
+ longitude: getLongitude(mapState.center),
+ zoom: mapState.zoom,
+ }}
+ attributionControl={false}
+ >
+ <NavigationControl position="top-right" />
+ <GeolocateControl position="top-right" trackUserLocation={true} />
+ <AttributionControl position="bottom-right" compact={false} />
- <Source
- id="stops-source"
- type="geojson"
- data={{ type: "FeatureCollection", features: stops }}
- />
+ <Source
+ id="stops-source"
+ type="geojson"
+ data={{ type: "FeatureCollection", features: stops }}
+ />
- <Layer
- id="stops"
- type="symbol"
- source="stops-source"
- layout={{
- "icon-image": "stop",
- "icon-size": ["interpolate", ["linear"], ["zoom"], 11, 0.4, 16, 0.8],
- "icon-allow-overlap": true,
- "icon-ignore-placement": true,
- }}
- />
+ <Layer
+ id="stops"
+ type="symbol"
+ source="stops-source"
+ layout={{
+ "icon-image": "stop",
+ "icon-size": ["interpolate", ["linear"], ["zoom"], 11, 0.4, 16, 0.8],
+ "icon-allow-overlap": true,
+ "icon-ignore-placement": true,
+ }}
+ />
- {popupInfo && (
- <Popup
- latitude={popupInfo.geometry.coordinates[1]}
- longitude={popupInfo.geometry.coordinates[0]}
- onClose={() => setPopupInfo(null)}
- >
- <div>
- <h3>{popupInfo.properties.name}</h3>
- <div>
- {popupInfo.properties.lines.map((line: string) => (
- <LineIcon line={line} key={line} />
- ))}
- </div>
- <Link to={`/estimates/${popupInfo.properties.stopId}`} className="popup-link">
- Ver parada
- </Link>
- </div>
- </Popup>
- )}
- </Map>
- );
+ {selectedStop && (
+ <StopSheet
+ isOpen={isSheetOpen}
+ onClose={() => setIsSheetOpen(false)}
+ stopId={selectedStop.stopId}
+ stopName={selectedStop.name}
+ />
+ )}
+ </Map>
+ );
}
diff --git a/src/frontend/app/routes/settings.tsx b/src/frontend/app/routes/settings.tsx
index e657c03..c08b2c9 100644
--- a/src/frontend/app/routes/settings.tsx
+++ b/src/frontend/app/routes/settings.tsx
@@ -3,74 +3,130 @@ import "./settings.css";
import { useTranslation } from "react-i18next";
export default function Settings() {
- const { t, i18n } = useTranslation();
- const { theme, setTheme, tableStyle, setTableStyle, mapPositionMode, setMapPositionMode } = useApp();
+ const { t, i18n } = useTranslation();
+ const {
+ theme,
+ setTheme,
+ tableStyle,
+ setTableStyle,
+ mapPositionMode,
+ setMapPositionMode,
+ } = useApp();
- return (
- <div className="page-container">
- <h1 className="page-title">{t('about.title')}</h1>
- <p className="about-description">
- {t('about.description')}
- </p>
- <section className="settings-section">
- <h2>{t('about.settings')}</h2>
- <div className="settings-content-inline">
- <label htmlFor="theme" className="form-label-inline">{t('about.theme')}</label>
- <select id="theme" className="form-select-inline" value={theme} onChange={(e) => setTheme(e.target.value as "light" | "dark")}>
- <option value="light">{t('about.theme_light')}</option>
- <option value="dark">{t('about.theme_dark')}</option>
- </select>
- </div>
- <div className="settings-content-inline">
- <label htmlFor="tableStyle" className="form-label-inline">{t('about.table_style')}</label>
- <select id="tableStyle" className="form-select-inline" value={tableStyle} onChange={(e) => setTableStyle(e.target.value as "regular" | "grouped")}>
- <option value="regular">{t('about.table_style_regular')}</option>
- <option value="grouped">{t('about.table_style_grouped')}</option>
- </select>
- </div>
- <div className="settings-content-inline">
- <label htmlFor="mapPositionMode" className="form-label-inline">{t('about.map_position_mode')}</label>
- <select id="mapPositionMode" className="form-select-inline" value={mapPositionMode} onChange={e => setMapPositionMode(e.target.value as 'gps' | 'last')}>
- <option value="gps">{t('about.map_position_gps')}</option>
- <option value="last">{t('about.map_position_last')}</option>
- </select>
- </div>
- <div className="settings-content-inline">
- <label htmlFor="language" className="form-label-inline">Idioma:</label>
- <select
- id="language"
- className="form-select-inline"
- value={i18n.language}
- onChange={e => i18n.changeLanguage(e.target.value)}
- >
- <option value="es-ES">Español</option>
- <option value="gl-ES">Galego</option>
- <option value="en-GB">English</option>
- </select>
- </div>
- <details className="form-details">
- <summary>{t('about.details_summary')}</summary>
- <p>{t('about.details_table')}</p>
- <dl>
- <dt>{t('about.table_style_regular')}</dt>
- <dd>{t('about.details_regular')}</dd>
- <dt>{t('about.table_style_grouped')}</dt>
- <dd>{t('about.details_grouped')}</dd>
- </dl>
- </details>
- </section>
- <h2>{t('about.credits')}</h2>
- <p>
- <a href="https://github.com/arielcostas/urbanovigo-web" className="about-link" rel="nofollow noreferrer noopener">
- {t('about.github')}
- </a> -
- {t('about.developed_by')} <a href="https://www.costas.dev" className="about-link" rel="nofollow noreferrer noopener">
- Ariel Costas
- </a>
- </p>
- <p>
- {t('about.data_source_prefix')} <a href="https://datos.vigo.org" className="about-link" rel="nofollow noreferrer noopener">datos.vigo.org</a> {t('about.data_source_middle')} <a href="https://opendefinition.org/licenses/odc-by/" className="about-link" rel="nofollow noreferrer noopener">Open Data Commons Attribution License</a>
- </p>
+ return (
+ <div className="page-container">
+ <h1 className="page-title">{t("about.title")}</h1>
+ <p className="about-description">{t("about.description")}</p>
+ <section className="settings-section">
+ <h2>{t("about.settings")}</h2>
+ <div className="settings-content-inline">
+ <label htmlFor="theme" className="form-label-inline">
+ {t("about.theme")}
+ </label>
+ <select
+ id="theme"
+ className="form-select-inline"
+ value={theme}
+ onChange={(e) => setTheme(e.target.value as "light" | "dark")}
+ >
+ <option value="light">{t("about.theme_light")}</option>
+ <option value="dark">{t("about.theme_dark")}</option>
+ </select>
</div>
- )
+ <div className="settings-content-inline">
+ <label htmlFor="tableStyle" className="form-label-inline">
+ {t("about.table_style")}
+ </label>
+ <select
+ id="tableStyle"
+ className="form-select-inline"
+ value={tableStyle}
+ onChange={(e) =>
+ setTableStyle(e.target.value as "regular" | "grouped")
+ }
+ >
+ <option value="regular">{t("about.table_style_regular")}</option>
+ <option value="grouped">{t("about.table_style_grouped")}</option>
+ </select>
+ </div>
+ <div className="settings-content-inline">
+ <label htmlFor="mapPositionMode" className="form-label-inline">
+ {t("about.map_position_mode")}
+ </label>
+ <select
+ id="mapPositionMode"
+ className="form-select-inline"
+ value={mapPositionMode}
+ onChange={(e) =>
+ setMapPositionMode(e.target.value as "gps" | "last")
+ }
+ >
+ <option value="gps">{t("about.map_position_gps")}</option>
+ <option value="last">{t("about.map_position_last")}</option>
+ </select>
+ </div>
+ <div className="settings-content-inline">
+ <label htmlFor="language" className="form-label-inline">
+ Idioma:
+ </label>
+ <select
+ id="language"
+ className="form-select-inline"
+ value={i18n.language}
+ onChange={(e) => i18n.changeLanguage(e.target.value)}
+ >
+ <option value="es-ES">Español</option>
+ <option value="gl-ES">Galego</option>
+ <option value="en-GB">English</option>
+ </select>
+ </div>
+ <details className="form-details">
+ <summary>{t("about.details_summary")}</summary>
+ <p>{t("about.details_table")}</p>
+ <dl>
+ <dt>{t("about.table_style_regular")}</dt>
+ <dd>{t("about.details_regular")}</dd>
+ <dt>{t("about.table_style_grouped")}</dt>
+ <dd>{t("about.details_grouped")}</dd>
+ </dl>
+ </details>
+ </section>
+ <h2>{t("about.credits")}</h2>
+ <p>
+ <a
+ href="https://github.com/arielcostas/urbanovigo-web"
+ className="about-link"
+ rel="nofollow noreferrer noopener"
+ >
+ {t("about.github")}
+ </a>{" "}
+ -{t("about.developed_by")}{" "}
+ <a
+ href="https://www.costas.dev"
+ className="about-link"
+ rel="nofollow noreferrer noopener"
+ >
+ Ariel Costas
+ </a>
+ </p>
+ <p>
+ {t("about.data_source_prefix")}{" "}
+ <a
+ href="https://datos.vigo.org"
+ className="about-link"
+ rel="nofollow noreferrer noopener"
+ >
+ datos.vigo.org
+ </a>{" "}
+ {t("about.data_source_middle")}{" "}
+ <a
+ href="https://opendefinition.org/licenses/odc-by/"
+ className="about-link"
+ rel="nofollow noreferrer noopener"
+ >
+ Open Data Commons Attribution License
+ </a>
+ </p>
+ </div>
+ );
}
diff --git a/src/frontend/app/routes/stoplist.tsx b/src/frontend/app/routes/stoplist.tsx
index 9404b39..58cdab4 100644
--- a/src/frontend/app/routes/stoplist.tsx
+++ b/src/frontend/app/routes/stoplist.tsx
@@ -2,125 +2,143 @@ import { useEffect, useMemo, useRef, useState } from "react";
import StopDataProvider, { type Stop } from "../data/StopDataProvider";
import StopItem from "../components/StopItem";
import Fuse from "fuse.js";
-import './stoplist.css';
+import "./stoplist.css";
import { useTranslation } from "react-i18next";
export default function StopList() {
- const { t } = useTranslation();
- const [data, setData] = useState<Stop[] | null>(null)
- const [searchResults, setSearchResults] = useState<Stop[] | null>(null);
- const searchTimeout = useRef<NodeJS.Timeout | null>(null);
+ const { t } = useTranslation();
+ const [data, setData] = useState<Stop[] | null>(null);
+ const [searchResults, setSearchResults] = useState<Stop[] | null>(null);
+ const searchTimeout = useRef<NodeJS.Timeout | null>(null);
- const randomPlaceholder = useMemo(() => t('stoplist.search_placeholder'), [t]);
- const fuse = useMemo(() => new Fuse(data || [], { threshold: 0.3, keys: ['name.original'] }), [data]);
+ const randomPlaceholder = useMemo(
+ () => t("stoplist.search_placeholder"),
+ [t],
+ );
+ const fuse = useMemo(
+ () => new Fuse(data || [], { threshold: 0.3, keys: ["name.original"] }),
+ [data],
+ );
- useEffect(() => {
- StopDataProvider.getStops().then((stops: Stop[]) => setData(stops))
- }, []);
+ useEffect(() => {
+ StopDataProvider.getStops().then((stops: Stop[]) => setData(stops));
+ }, []);
- const handleStopSearch = (event: React.ChangeEvent<HTMLInputElement>) => {
- const stopName = event.target.value || "";
+ const handleStopSearch = (event: React.ChangeEvent<HTMLInputElement>) => {
+ const stopName = event.target.value || "";
- if (searchTimeout.current) {
- clearTimeout(searchTimeout.current);
- }
+ if (searchTimeout.current) {
+ clearTimeout(searchTimeout.current);
+ }
- searchTimeout.current = setTimeout(() => {
- if (stopName.length === 0) {
- setSearchResults(null);
- return;
- }
+ searchTimeout.current = setTimeout(() => {
+ if (stopName.length === 0) {
+ setSearchResults(null);
+ return;
+ }
- if (!data) {
- console.error("No data available for search");
- return;
- }
+ if (!data) {
+ console.error("No data available for search");
+ return;
+ }
- const results = fuse.search(stopName);
- const items = results.map(result => result.item);
- setSearchResults(items);
- }, 300);
- }
+ const results = fuse.search(stopName);
+ const items = results.map((result) => result.item);
+ setSearchResults(items);
+ }, 300);
+ };
- const favouritedStops = useMemo(() => {
- return data?.filter(stop => stop.favourite) ?? []
- }, [data])
+ const favouritedStops = useMemo(() => {
+ return data?.filter((stop) => stop.favourite) ?? [];
+ }, [data]);
- const recentStops = useMemo(() => {
- // no recent items if data not loaded
- if (!data) return null;
- const recentIds = StopDataProvider.getRecent();
- if (recentIds.length === 0) return null;
- // map and filter out missing entries
- const stopsList = recentIds
- .map(id => data.find(stop => stop.stopId === id))
- .filter((s): s is Stop => Boolean(s));
- return stopsList.reverse();
- }, [data]);
+ const recentStops = useMemo(() => {
+ // no recent items if data not loaded
+ if (!data) return null;
+ const recentIds = StopDataProvider.getRecent();
+ if (recentIds.length === 0) return null;
+ // map and filter out missing entries
+ const stopsList = recentIds
+ .map((id) => data.find((stop) => stop.stopId === id))
+ .filter((s): s is Stop => Boolean(s));
+ return stopsList.reverse();
+ }, [data]);
- if (data === null) return <h1 className="page-title">{t('common.loading')}</h1>
+ if (data === null)
+ return <h1 className="page-title">{t("common.loading")}</h1>;
- return (
- <div className="page-container">
- <h1 className="page-title">UrbanoVigo Web</h1>
+ return (
+ <div className="page-container">
+ <h1 className="page-title">UrbanoVigo Web</h1>
- <form className="search-form">
- <div className="form-group">
- <label className="form-label" htmlFor="stopName">
- {t('stoplist.search_label', 'Buscar paradas')}
- </label>
- <input className="form-input" type="text" placeholder={randomPlaceholder} id="stopName" onChange={handleStopSearch} />
- </div>
- </form>
+ <form className="search-form">
+ <div className="form-group">
+ <label className="form-label" htmlFor="stopName">
+ {t("stoplist.search_label", "Buscar paradas")}
+ </label>
+ <input
+ className="form-input"
+ type="text"
+ placeholder={randomPlaceholder}
+ id="stopName"
+ onChange={handleStopSearch}
+ />
+ </div>
+ </form>
- {searchResults && searchResults.length > 0 && (
- <div className="list-container">
- <h2 className="page-subtitle">{t('stoplist.search_results', 'Resultados de la búsqueda')}</h2>
- <ul className="list">
- {searchResults.map((stop: Stop) => (
- <StopItem key={stop.stopId} stop={stop} />
- ))}
- </ul>
- </div>
- )}
+ {searchResults && searchResults.length > 0 && (
+ <div className="list-container">
+ <h2 className="page-subtitle">
+ {t("stoplist.search_results", "Resultados de la búsqueda")}
+ </h2>
+ <ul className="list">
+ {searchResults.map((stop: Stop) => (
+ <StopItem key={stop.stopId} stop={stop} />
+ ))}
+ </ul>
+ </div>
+ )}
- <div className="list-container">
- <h2 className="page-subtitle">{t('stoplist.favourites')}</h2>
+ <div className="list-container">
+ <h2 className="page-subtitle">{t("stoplist.favourites")}</h2>
- {favouritedStops?.length === 0 && (
- <p className="message">
- {t('stoplist.no_favourites', 'Accede a una parada y márcala como favorita para verla aquí.')}
- </p>
- )}
+ {favouritedStops?.length === 0 && (
+ <p className="message">
+ {t(
+ "stoplist.no_favourites",
+ "Accede a una parada y márcala como favorita para verla aquí.",
+ )}
+ </p>
+ )}
- <ul className="list">
- {favouritedStops?.sort((a, b) => a.stopId - b.stopId).map((stop: Stop) => (
- <StopItem key={stop.stopId} stop={stop} />
- ))}
- </ul>
- </div>
+ <ul className="list">
+ {favouritedStops
+ ?.sort((a, b) => a.stopId - b.stopId)
+ .map((stop: Stop) => <StopItem key={stop.stopId} stop={stop} />)}
+ </ul>
+ </div>
- {recentStops && recentStops.length > 0 && (
- <div className="list-container">
- <h2 className="page-subtitle">{t('stoplist.recents')}</h2>
+ {recentStops && recentStops.length > 0 && (
+ <div className="list-container">
+ <h2 className="page-subtitle">{t("stoplist.recents")}</h2>
- <ul className="list">
- {recentStops.map((stop: Stop) => (
- <StopItem key={stop.stopId} stop={stop} />
- ))}
- </ul>
- </div>
- )}
+ <ul className="list">
+ {recentStops.map((stop: Stop) => (
+ <StopItem key={stop.stopId} stop={stop} />
+ ))}
+ </ul>
+ </div>
+ )}
- <div className="list-container">
- <h2 className="page-subtitle">{t('stoplist.all_stops', 'Paradas')}</h2>
+ <div className="list-container">
+ <h2 className="page-subtitle">{t("stoplist.all_stops", "Paradas")}</h2>
- <ul className="list">
- {data?.sort((a, b) => a.stopId - b.stopId).map((stop: Stop) => (
- <StopItem key={stop.stopId} stop={stop} />
- ))}
- </ul>
- </div>
- </div>
- )
+ <ul className="list">
+ {data
+ ?.sort((a, b) => a.stopId - b.stopId)
+ .map((stop: Stop) => <StopItem key={stop.stopId} stop={stop} />)}
+ </ul>
+ </div>
+ </div>
+ );
}
diff --git a/src/frontend/index.html b/src/frontend/index.html
index 4812ce5..f208550 100644
--- a/src/frontend/index.html
+++ b/src/frontend/index.html
@@ -1,55 +1,65 @@
<!doctype html>
<html lang="es">
+ <head>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <meta charset="UTF-8" />
-<head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta charset="UTF-8" />
+ <title>UrbanoVigo Web</title>
- <title>UrbanoVigo Web</title>
+ <link rel="icon" type="image/jpg" href="/logo-512.jpg" />
+ <link rel="icon" href="/favicon.ico" sizes="64x64" />
+ <link rel="apple-touch-icon" href="/logo-512.jpg" sizes="512x512" />
+ <meta name="theme-color" content="#007bff" />
- <link rel="icon" type="image/jpg" href="/logo-512.jpg" />
- <link rel="icon" href="/favicon.ico" sizes="64x64" />
- <link rel="apple-touch-icon" href="/logo-512.jpg" sizes="512x512" />
- <meta name="theme-color" content="#007bff" />
+ <link rel="canonical" href="https://urbanovigo.costas.dev/" />
- <link rel="canonical" href="https://urbanovigo.costas.dev/" />
+ <meta
+ name="description"
+ content="Aplicación web para encontrar paradas y tiempos de llegada de los autobuses urbanos de Vigo, España."
+ />
+ <meta
+ name="keywords"
+ content="Vigo, autobús, urbano, parada, tiempo, llegada, transporte, público, España"
+ />
+ <meta name="author" content="Ariel Costas Guerrero" />
- <meta name="description" content="Aplicación web para encontrar paradas y tiempos de llegada de los autobuses urbanos de Vigo, España." />
- <meta name="keywords" content="Vigo, autobús, urbano, parada, tiempo, llegada, transporte, público, España" />
- <meta name="author" content="Ariel Costas Guerrero" />
+ <meta property="og:title" content="UrbanoVigo Web" />
+ <meta property="og:type" content="website" />
+ <meta property="og:url" content="https://urbanovigo.costas.dev/" />
+ <meta
+ property="og:image"
+ content="https://urbanovigo.costas.dev/logo-512.jpg"
+ />
+ <meta
+ property="og:description"
+ content="Aplicación web para encontrar paradas y tiempos de llegada de los autobuses urbanos de Vigo, España."
+ />
- <meta property="og:title" content="UrbanoVigo Web" />
- <meta property="og:type" content="website" />
- <meta property="og:url" content="https://urbanovigo.costas.dev/" />
- <meta property="og:image" content="https://urbanovigo.costas.dev/logo-512.jpg" />
- <meta property="og:description" content="Aplicación web para encontrar paradas y tiempos de llegada de los autobuses urbanos de Vigo, España." />
+ <link rel="manifest" href="/manifest.webmanifest" />
- <link rel="manifest" href="/manifest.webmanifest" />
+ <meta name="robots" content="noindex, nofollow" />
+ <meta name="googlebot" content="noindex, nofollow" />
- <meta name="robots" content="noindex, nofollow" />
- <meta name="googlebot" content="noindex, nofollow" />
+ <style>
+ body {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ }
+ </style>
+ </head>
- <style>
- body {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
- }
- </style>
-</head>
+ <body>
+ <div id="root"></div>
+ <script type="module" src="/src/main.tsx"></script>
-<body>
- <div id="root"></div>
- <script type="module" src="/src/main.tsx"></script>
-
- <script>
- if ('serviceWorker' in navigator) {
- navigator.serviceWorker.register('/sw.js');
- navigator.serviceWorker.ready.then(registration => {
- registration.update();
- });
- }
- </script>
-</body>
-
-</html> \ No newline at end of file
+ <script>
+ if ("serviceWorker" in navigator) {
+ navigator.serviceWorker.register("/sw.js");
+ navigator.serviceWorker.ready.then((registration) => {
+ registration.update();
+ });
+ }
+ </script>
+ </body>
+</html>
diff --git a/src/frontend/package.json b/src/frontend/package.json
index b9b68b5..6463dd9 100644
--- a/src/frontend/package.json
+++ b/src/frontend/package.json
@@ -23,6 +23,7 @@
"react-dom": "^19.1.0",
"react-leaflet": "^5.0.0",
"react-leaflet-markercluster": "^5.0.0-rc.0",
+ "react-modal-sheet": "^4.4.0",
"react-router": "^7.6.0"
},
"devDependencies": {
diff --git a/src/frontend/public/manifest.webmanifest b/src/frontend/public/manifest.webmanifest
index 59fbab1..5dd08fa 100644
--- a/src/frontend/public/manifest.webmanifest
+++ b/src/frontend/public/manifest.webmanifest
@@ -1,84 +1,84 @@
{
- "$schema": "https://raw.githubusercontent.com/SchemaStore/schemastore/refs/heads/master/src/schemas/json/web-manifest.json",
- "id": "https://busurbano.costas.dev/",
- "name": "UrbanoVigo Web",
- "description": "Aplicación web para encontrar paradas y tiempos de llegada de los autobuses urbanos de Vigo, España.",
- "short_name": "UrbanoVigo",
- "start_url": "/",
- "display": "standalone",
- "orientation": "portrait-primary",
- "lang": "es",
- "background_color": "#ffffff",
- "theme_color": "#007bff",
- "icons": [
- {
- "src": "/logo-512.jpg",
- "sizes": "512x512",
- "type": "image/jpg",
- "purpose": "any maskable"
- },
- {
- "src": "/logo-256.jpg",
- "sizes": "256x256",
- "type": "image/jpg",
- "purpose": "any maskable"
- },
- {
- "src": "/logo-256.png",
- "sizes": "256x256",
- "type": "image/png",
- "purpose": "any maskable"
- },
- {
- "src": "/favicon.ico",
- "sizes": "64x64",
- "type": "image/x-icon",
- "purpose": "any maskable"
- }
- ],
- "screenshots": [
- {
- "src": "/screenshots/stoplist-narrow.png",
- "sizes": "1440x2960",
- "type": "image/png",
- "form_factor": "narrow",
- "label": "Lista de paradas"
- },
- {
- "src": "/screenshots/map-narrow.png",
- "sizes": "1440x2960",
- "type": "image/png",
- "form_factor": "narrow",
- "label": "Mapa de paradas"
- },
- {
- "src": "/screenshots/estimates-narrow.png",
- "sizes": "1440x2960",
- "type": "image/png",
- "form_factor": "narrow",
- "label": "Estimaciones de llegada a parada"
- },
+ "$schema": "https://raw.githubusercontent.com/SchemaStore/schemastore/refs/heads/master/src/schemas/json/web-manifest.json",
+ "id": "https://busurbano.costas.dev/",
+ "name": "UrbanoVigo Web",
+ "description": "Aplicación web para encontrar paradas y tiempos de llegada de los autobuses urbanos de Vigo, España.",
+ "short_name": "UrbanoVigo",
+ "start_url": "/",
+ "display": "standalone",
+ "orientation": "portrait-primary",
+ "lang": "es",
+ "background_color": "#ffffff",
+ "theme_color": "#007bff",
+ "icons": [
+ {
+ "src": "/logo-512.jpg",
+ "sizes": "512x512",
+ "type": "image/jpg",
+ "purpose": "any maskable"
+ },
+ {
+ "src": "/logo-256.jpg",
+ "sizes": "256x256",
+ "type": "image/jpg",
+ "purpose": "any maskable"
+ },
+ {
+ "src": "/logo-256.png",
+ "sizes": "256x256",
+ "type": "image/png",
+ "purpose": "any maskable"
+ },
+ {
+ "src": "/favicon.ico",
+ "sizes": "64x64",
+ "type": "image/x-icon",
+ "purpose": "any maskable"
+ }
+ ],
+ "screenshots": [
+ {
+ "src": "/screenshots/stoplist-narrow.png",
+ "sizes": "1440x2960",
+ "type": "image/png",
+ "form_factor": "narrow",
+ "label": "Lista de paradas"
+ },
+ {
+ "src": "/screenshots/map-narrow.png",
+ "sizes": "1440x2960",
+ "type": "image/png",
+ "form_factor": "narrow",
+ "label": "Mapa de paradas"
+ },
+ {
+ "src": "/screenshots/estimates-narrow.png",
+ "sizes": "1440x2960",
+ "type": "image/png",
+ "form_factor": "narrow",
+ "label": "Estimaciones de llegada a parada"
+ },
- {
- "src": "/screenshots/stoplist-wide.jpeg",
- "sizes": "1788x891",
- "type": "image/jpeg",
- "form_factor": "wide",
- "label": "Lista de paradas"
- },
- {
- "src": "/screenshots/map-wide.jpeg",
- "sizes": "1788x891",
- "type": "image/jpeg",
- "form_factor": "wide",
- "label": "Mapa de paradas"
- },
- {
- "src": "/screenshots/estimates-wide.jpeg",
- "sizes": "1788x891",
- "type": "image/jpeg",
- "form_factor": "wide",
- "label": "Estimaciones de llegada a parada"
- }
- ]
-} \ No newline at end of file
+ {
+ "src": "/screenshots/stoplist-wide.jpeg",
+ "sizes": "1788x891",
+ "type": "image/jpeg",
+ "form_factor": "wide",
+ "label": "Lista de paradas"
+ },
+ {
+ "src": "/screenshots/map-wide.jpeg",
+ "sizes": "1788x891",
+ "type": "image/jpeg",
+ "form_factor": "wide",
+ "label": "Mapa de paradas"
+ },
+ {
+ "src": "/screenshots/estimates-wide.jpeg",
+ "sizes": "1788x891",
+ "type": "image/jpeg",
+ "form_factor": "wide",
+ "label": "Estimaciones de llegada a parada"
+ }
+ ]
+}
diff --git a/src/frontend/public/maps/spritesheet/sprite.json b/src/frontend/public/maps/spritesheet/sprite.json
index 96b0971..044886e 100644
--- a/src/frontend/public/maps/spritesheet/sprite.json
+++ b/src/frontend/public/maps/spritesheet/sprite.json
@@ -1,10 +1,10 @@
{
- "stop": {
- "id": "stop",
- "x": 0,
- "y": 0,
- "width": 32,
- "height": 32,
- "pixelRatio": 1
- }
+ "stop": {
+ "id": "stop",
+ "x": 0,
+ "y": 0,
+ "width": 32,
+ "height": 32,
+ "pixelRatio": 1
+ }
}
diff --git a/src/frontend/public/maps/spritesheet/sprite@2x.json b/src/frontend/public/maps/spritesheet/sprite@2x.json
index 37a2fbe..2a58c5f 100644
--- a/src/frontend/public/maps/spritesheet/sprite@2x.json
+++ b/src/frontend/public/maps/spritesheet/sprite@2x.json
@@ -1,10 +1,10 @@
{
- "stop": {
- "id": "stop",
- "x": 0,
- "y": 0,
- "width": 64,
- "height": 64,
- "pixelRatio": 2
- }
+ "stop": {
+ "id": "stop",
+ "x": 0,
+ "y": 0,
+ "width": 64,
+ "height": 64,
+ "pixelRatio": 2
+ }
}
diff --git a/src/frontend/public/maps/styles/carto-dark.json b/src/frontend/public/maps/styles/carto-dark.json
index b3af6e7..dbaa515 100644
--- a/src/frontend/public/maps/styles/carto-dark.json
+++ b/src/frontend/public/maps/styles/carto-dark.json
@@ -1,33 +1,32 @@
{
- "version": 8,
- "name": "Light",
- "sources": {
- "carto": {
- "type": "raster",
- "tiles": ["https://d.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png"],
- "attribution": "&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors, &copy; <a href=\"https://carto.com/attributions\">CARTO</a>",
- "tileSize": 256,
- "maxzoom": 22,
- "minzoom": 0
- }
+ "version": 8,
+ "name": "Light",
+ "sources": {
+ "carto": {
+ "type": "raster",
+ "tiles": ["https://d.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png"],
+ "attribution": "&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors, &copy; <a href=\"https://carto.com/attributions\">CARTO</a>",
+ "tileSize": 256,
+ "maxzoom": 22,
+ "minzoom": 0
+ }
+ },
+ "layers": [
+ {
+ "id": "background",
+ "type": "background",
+ "paint": {
+ "background-color": "#f0f0f0"
+ }
},
- "layers": [
- {
- "id": "background",
- "type": "background",
- "paint": {
- "background-color": "#f0f0f0"
- }
- },
- {
- "id": "raster",
- "type": "raster",
- "source": "carto",
- "minzoom": 0,
- "maxzoom": 22
- }
-
- ],
- "sprite": "/maps/spritesheet/sprite",
- "glyphs": "/maps/fonts/{fontstack}/{range}.pbf"
+ {
+ "id": "raster",
+ "type": "raster",
+ "source": "carto",
+ "minzoom": 0,
+ "maxzoom": 22
+ }
+ ],
+ "sprite": "/maps/spritesheet/sprite",
+ "glyphs": "/maps/fonts/{fontstack}/{range}.pbf"
}
diff --git a/src/frontend/public/maps/styles/carto-light.json b/src/frontend/public/maps/styles/carto-light.json
index 957386e..563af6d 100644
--- a/src/frontend/public/maps/styles/carto-light.json
+++ b/src/frontend/public/maps/styles/carto-light.json
@@ -1,33 +1,34 @@
{
- "version": 8,
- "name": "Light",
- "sources": {
- "carto": {
- "type": "raster",
- "tiles": ["https://d.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png"],
- "attribution": "&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors, &copy; <a href=\"https://carto.com/attributions\">CARTO</a>",
- "tileSize": 256,
- "maxzoom": 22,
- "minzoom": 0
- }
+ "version": 8,
+ "name": "Light",
+ "sources": {
+ "carto": {
+ "type": "raster",
+ "tiles": [
+ "https://d.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png"
+ ],
+ "attribution": "&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors, &copy; <a href=\"https://carto.com/attributions\">CARTO</a>",
+ "tileSize": 256,
+ "maxzoom": 22,
+ "minzoom": 0
+ }
+ },
+ "layers": [
+ {
+ "id": "background",
+ "type": "background",
+ "paint": {
+ "background-color": "#f0f0f0"
+ }
},
- "layers": [
- {
- "id": "background",
- "type": "background",
- "paint": {
- "background-color": "#f0f0f0"
- }
- },
- {
- "id": "raster",
- "type": "raster",
- "source": "carto",
- "minzoom": 0,
- "maxzoom": 22
- }
-
- ],
- "sprite": "/maps/spritesheet/sprite",
- "glyphs": "/maps/fonts/{fontstack}/{range}.pbf"
+ {
+ "id": "raster",
+ "type": "raster",
+ "source": "carto",
+ "minzoom": 0,
+ "maxzoom": 22
+ }
+ ],
+ "sprite": "/maps/spritesheet/sprite",
+ "glyphs": "/maps/fonts/{fontstack}/{range}.pbf"
}
diff --git a/src/frontend/public/stops.json b/src/frontend/public/stops.json
index 7c0ac8b..4446528 100644
--- a/src/frontend/public/stops.json
+++ b/src/frontend/public/stops.json
@@ -6,9 +6,7 @@
},
"latitude": 42.187593499,
"longitude": -8.741246641,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 40,
@@ -17,9 +15,7 @@
},
"latitude": 42.192126677,
"longitude": -8.72901589,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 50,
@@ -28,9 +24,7 @@
},
"latitude": 42.19287042,
"longitude": -8.727513924,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 70,
@@ -39,10 +33,7 @@
},
"latitude": 42.20020175,
"longitude": -8.700621608,
- "lines": [
- "18A",
- "18B"
- ]
+ "lines": ["18A", "18B"]
},
{
"stopId": 80,
@@ -51,10 +42,7 @@
},
"latitude": 42.200132216,
"longitude": -8.700535777,
- "lines": [
- "18A",
- "18B"
- ]
+ "lines": ["18A", "18B"]
},
{
"stopId": 90,
@@ -63,9 +51,7 @@
},
"latitude": 42.225956918,
"longitude": -8.63286469,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 100,
@@ -74,9 +60,7 @@
},
"latitude": 42.219008975,
"longitude": -8.69606935,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 110,
@@ -85,9 +69,7 @@
},
"latitude": 42.215074591,
"longitude": -8.696738405,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 120,
@@ -96,9 +78,7 @@
},
"latitude": 42.223288295,
"longitude": -8.700954873,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 130,
@@ -107,9 +87,7 @@
},
"latitude": 42.219001694,
"longitude": -8.696198267,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 140,
@@ -118,9 +96,7 @@
},
"latitude": 42.223444913,
"longitude": -8.700801996,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 150,
@@ -129,9 +105,7 @@
},
"latitude": 42.222636676,
"longitude": -8.697201413,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 160,
@@ -140,9 +114,7 @@
},
"latitude": 42.222830286,
"longitude": -8.697231476,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 170,
@@ -151,9 +123,7 @@
},
"latitude": 42.215084316,
"longitude": -8.696854931,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 180,
@@ -162,9 +132,7 @@
},
"latitude": 42.166144986,
"longitude": -8.720162371,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 190,
@@ -173,10 +141,7 @@
},
"latitude": 42.250539537,
"longitude": -8.685179363,
- "lines": [
- "C3i",
- "10"
- ]
+ "lines": ["C3i", "10"]
},
{
"stopId": 195,
@@ -185,10 +150,7 @@
},
"latitude": 42.256624708,
"longitude": -8.677490797,
- "lines": [
- "C3d",
- "10"
- ]
+ "lines": ["C3d", "10"]
},
{
"stopId": 200,
@@ -197,10 +159,7 @@
},
"latitude": 42.252115803,
"longitude": -8.683374373,
- "lines": [
- "C3i",
- "10"
- ]
+ "lines": ["C3i", "10"]
},
{
"stopId": 210,
@@ -209,10 +168,7 @@
},
"latitude": 42.255798748,
"longitude": -8.678507526,
- "lines": [
- "C3i",
- "10"
- ]
+ "lines": ["C3i", "10"]
},
{
"stopId": 220,
@@ -221,10 +177,7 @@
},
"latitude": 42.252694363,
"longitude": -8.68302903,
- "lines": [
- "C3d",
- "10"
- ]
+ "lines": ["C3d", "10"]
},
{
"stopId": 230,
@@ -233,10 +186,7 @@
},
"latitude": 42.248041601,
"longitude": -8.691024475,
- "lines": [
- "C3i",
- "10"
- ]
+ "lines": ["C3i", "10"]
},
{
"stopId": 240,
@@ -245,10 +195,7 @@
},
"latitude": 42.247513476,
"longitude": -8.691874301,
- "lines": [
- "C3d",
- "10"
- ]
+ "lines": ["C3d", "10"]
},
{
"stopId": 250,
@@ -257,10 +204,7 @@
},
"latitude": 42.255252085,
"longitude": -8.679480662,
- "lines": [
- "C3d",
- "10"
- ]
+ "lines": ["C3d", "10"]
},
{
"stopId": 260,
@@ -269,10 +213,7 @@
},
"latitude": 42.250421216,
"longitude": -8.685464716,
- "lines": [
- "C3d",
- "10"
- ]
+ "lines": ["C3d", "10"]
},
{
"stopId": 270,
@@ -281,10 +222,7 @@
},
"latitude": 42.18920151,
"longitude": -8.810340862,
- "lines": [
- "C3d",
- "10"
- ]
+ "lines": ["C3d", "10"]
},
{
"stopId": 280,
@@ -293,10 +231,7 @@
},
"latitude": 42.189490674,
"longitude": -8.808107114,
- "lines": [
- "C3d",
- "10"
- ]
+ "lines": ["C3d", "10"]
},
{
"stopId": 290,
@@ -305,10 +240,7 @@
},
"latitude": 42.190149471,
"longitude": -8.803788225,
- "lines": [
- "C3d",
- "10"
- ]
+ "lines": ["C3d", "10"]
},
{
"stopId": 310,
@@ -317,10 +249,7 @@
},
"latitude": 42.190850463,
"longitude": -8.80358845,
- "lines": [
- "C3d",
- "10"
- ]
+ "lines": ["C3d", "10"]
},
{
"stopId": 320,
@@ -329,10 +258,7 @@
},
"latitude": 42.189221331,
"longitude": -8.811730246,
- "lines": [
- "C3d",
- "10"
- ]
+ "lines": ["C3d", "10"]
},
{
"stopId": 330,
@@ -341,10 +267,7 @@
},
"latitude": 42.187213169,
"longitude": -8.813069201,
- "lines": [
- "C3d",
- "10"
- ]
+ "lines": ["C3d", "10"]
},
{
"stopId": 340,
@@ -353,10 +276,7 @@
},
"latitude": 42.238036494,
"longitude": -8.700921187,
- "lines": [
- "4A",
- "H3"
- ]
+ "lines": ["4A", "H3"]
},
{
"stopId": 350,
@@ -365,10 +285,7 @@
},
"latitude": 42.240488915,
"longitude": -8.700357923,
- "lines": [
- "4A",
- "H3"
- ]
+ "lines": ["4A", "H3"]
},
{
"stopId": 360,
@@ -377,10 +294,7 @@
},
"latitude": 42.24013184,
"longitude": -8.700947033,
- "lines": [
- "4A",
- "H3"
- ]
+ "lines": ["4A", "H3"]
},
{
"stopId": 370,
@@ -389,10 +303,7 @@
},
"latitude": 42.242101304,
"longitude": -8.698394546,
- "lines": [
- "4A",
- "H3"
- ]
+ "lines": ["4A", "H3"]
},
{
"stopId": 380,
@@ -401,10 +312,7 @@
},
"latitude": 42.242091376,
"longitude": -8.698668131,
- "lines": [
- "4A",
- "H3"
- ]
+ "lines": ["4A", "H3"]
},
{
"stopId": 390,
@@ -413,10 +321,7 @@
},
"latitude": 42.233174046,
"longitude": -8.702380309,
- "lines": [
- "4A",
- "H3"
- ]
+ "lines": ["4A", "H3"]
},
{
"stopId": 400,
@@ -425,10 +330,7 @@
},
"latitude": 42.235598195,
"longitude": -8.701426538,
- "lines": [
- "4A",
- "H3"
- ]
+ "lines": ["4A", "H3"]
},
{
"stopId": 410,
@@ -437,10 +339,7 @@
},
"latitude": 42.235524387,
"longitude": -8.701248417,
- "lines": [
- "4A",
- "H3"
- ]
+ "lines": ["4A", "H3"]
},
{
"stopId": 420,
@@ -449,10 +348,7 @@
},
"latitude": 42.238092485,
"longitude": -8.701156245,
- "lines": [
- "4A",
- "H3"
- ]
+ "lines": ["4A", "H3"]
},
{
"stopId": 430,
@@ -461,15 +357,7 @@
},
"latitude": 42.239341996,
"longitude": -8.720234413,
- "lines": [
- "A",
- "6",
- "9B",
- "18A",
- "24",
- "28",
- "H1"
- ]
+ "lines": ["A", "6", "9B", "18A", "24", "28", "H1"]
},
{
"stopId": 530,
@@ -478,9 +366,7 @@
},
"latitude": 42.193562859,
"longitude": -8.78173994,
- "lines": [
- "12A"
- ]
+ "lines": ["12A"]
},
{
"stopId": 540,
@@ -489,9 +375,7 @@
},
"latitude": 42.189424424,
"longitude": -8.790733064,
- "lines": [
- "12A"
- ]
+ "lines": ["12A"]
},
{
"stopId": 560,
@@ -500,9 +384,7 @@
},
"latitude": 42.181015915,
"longitude": -8.807696921,
- "lines": [
- "10"
- ]
+ "lines": ["10"]
},
{
"stopId": 570,
@@ -511,9 +393,7 @@
},
"latitude": 42.195225102,
"longitude": -8.775226375,
- "lines": [
- "12A"
- ]
+ "lines": ["12A"]
},
{
"stopId": 572,
@@ -522,12 +402,7 @@
},
"latitude": 42.214058797,
"longitude": -8.672946954,
- "lines": [
- "12B",
- "15B",
- "15C",
- "U2"
- ]
+ "lines": ["12B", "15B", "15C", "U2"]
},
{
"stopId": 580,
@@ -536,9 +411,7 @@
},
"latitude": 42.195766012,
"longitude": -8.773648966,
- "lines": [
- "12A"
- ]
+ "lines": ["12A"]
},
{
"stopId": 600,
@@ -547,11 +420,7 @@
},
"latitude": 42.189927171,
"longitude": -8.800634184,
- "lines": [
- "C3d",
- "10",
- "12A"
- ]
+ "lines": ["C3d", "10", "12A"]
},
{
"stopId": 620,
@@ -560,9 +429,7 @@
},
"latitude": 42.1935678,
"longitude": -8.781529566,
- "lines": [
- "12A"
- ]
+ "lines": ["12A"]
},
{
"stopId": 630,
@@ -571,9 +438,7 @@
},
"latitude": 42.189304527,
"longitude": -8.79068363,
- "lines": [
- "12A"
- ]
+ "lines": ["12A"]
},
{
"stopId": 650,
@@ -582,11 +447,7 @@
},
"latitude": 42.181065441,
"longitude": -8.807509871,
- "lines": [
- "C3d",
- "10",
- "12A"
- ]
+ "lines": ["C3d", "10", "12A"]
},
{
"stopId": 660,
@@ -595,12 +456,7 @@
},
"latitude": 42.211494566,
"longitude": -8.736022397,
- "lines": [
- "7",
- "12B",
- "17",
- "H1"
- ]
+ "lines": ["7", "12B", "17", "H1"]
},
{
"stopId": 680,
@@ -609,9 +465,7 @@
},
"latitude": 42.229005723,
"longitude": -8.634356866,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 690,
@@ -620,10 +474,7 @@
},
"latitude": 42.233064093,
"longitude": -8.642742935,
- "lines": [
- "A",
- "25"
- ]
+ "lines": ["A", "25"]
},
{
"stopId": 700,
@@ -632,9 +483,7 @@
},
"latitude": 42.228674047,
"longitude": -8.633340309,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 710,
@@ -643,14 +492,7 @@
},
"latitude": 42.232478958,
"longitude": -8.701988706,
- "lines": [
- "A",
- "4A",
- "9B",
- "24",
- "27",
- "28"
- ]
+ "lines": ["A", "4A", "9B", "24", "27", "28"]
},
{
"stopId": 720,
@@ -659,11 +501,7 @@
},
"latitude": 42.235739016,
"longitude": -8.684254232,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 730,
@@ -672,11 +510,7 @@
},
"latitude": 42.231109162,
"longitude": -8.690501398,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 740,
@@ -685,11 +519,7 @@
},
"latitude": 42.233560754,
"longitude": -8.686937524,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 750,
@@ -698,11 +528,7 @@
},
"latitude": 42.233103986,
"longitude": -8.68716283,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 760,
@@ -711,11 +537,7 @@
},
"latitude": 42.236775611,
"longitude": -8.683736566,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 770,
@@ -724,11 +546,7 @@
},
"latitude": 42.238939528,
"longitude": -8.681422497,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 780,
@@ -737,11 +555,7 @@
},
"latitude": 42.238554288,
"longitude": -8.680663432,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 790,
@@ -750,11 +564,7 @@
},
"latitude": 42.237426811,
"longitude": -8.675474476,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 800,
@@ -763,11 +573,7 @@
},
"latitude": 42.237801674,
"longitude": -8.676524783,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 810,
@@ -776,11 +582,7 @@
},
"latitude": 42.235521261,
"longitude": -8.67465521,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 820,
@@ -789,10 +591,7 @@
},
"latitude": 42.234766626,
"longitude": -8.671305131,
- "lines": [
- "A",
- "9B"
- ]
+ "lines": ["A", "9B"]
},
{
"stopId": 830,
@@ -801,11 +600,7 @@
},
"latitude": 42.234673289,
"longitude": -8.671348046,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 840,
@@ -814,14 +609,7 @@
},
"latitude": 42.234904325,
"longitude": -8.699245802,
- "lines": [
- "A",
- "4A",
- "9B",
- "24",
- "27",
- "28"
- ]
+ "lines": ["A", "4A", "9B", "24", "27", "28"]
},
{
"stopId": 850,
@@ -830,10 +618,7 @@
},
"latitude": 42.23630176,
"longitude": -8.665791599,
- "lines": [
- "A",
- "9B"
- ]
+ "lines": ["A", "9B"]
},
{
"stopId": 860,
@@ -842,11 +627,7 @@
},
"latitude": 42.235612667,
"longitude": -8.666529207,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 870,
@@ -855,10 +636,7 @@
},
"latitude": 42.23543058,
"longitude": -8.66197943,
- "lines": [
- "A",
- "9B"
- ]
+ "lines": ["A", "9B"]
},
{
"stopId": 880,
@@ -867,11 +645,7 @@
},
"latitude": 42.23544051,
"longitude": -8.662354939,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 890,
@@ -880,9 +654,7 @@
},
"latitude": 42.232066419,
"longitude": -8.653842977,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 900,
@@ -891,9 +663,7 @@
},
"latitude": 42.233527998,
"longitude": -8.648237616,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 910,
@@ -902,14 +672,7 @@
},
"latitude": 42.234679919,
"longitude": -8.699623994,
- "lines": [
- "A",
- "4A",
- "9B",
- "24",
- "27",
- "28"
- ]
+ "lines": ["A", "4A", "9B", "24", "27", "28"]
},
{
"stopId": 920,
@@ -918,9 +681,7 @@
},
"latitude": 42.233499069,
"longitude": -8.643325214,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 930,
@@ -929,9 +690,7 @@
},
"latitude": 42.231979036,
"longitude": -8.65372496,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 940,
@@ -940,9 +699,7 @@
},
"latitude": 42.230493878,
"longitude": -8.638023273,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 950,
@@ -951,10 +708,7 @@
},
"latitude": 42.233626818,
"longitude": -8.647811163,
- "lines": [
- "A",
- "25"
- ]
+ "lines": ["A", "25"]
},
{
"stopId": 960,
@@ -963,9 +717,7 @@
},
"latitude": 42.230918888,
"longitude": -8.638532893,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 970,
@@ -974,11 +726,7 @@
},
"latitude": 42.232787318,
"longitude": -8.693473285,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 980,
@@ -987,11 +735,7 @@
},
"latitude": 42.221170087,
"longitude": -8.763656977,
- "lines": [
- "10",
- "15B",
- "15C"
- ]
+ "lines": ["10", "15B", "15C"]
},
{
"stopId": 990,
@@ -1000,11 +744,7 @@
},
"latitude": 42.222451366,
"longitude": -8.769134894,
- "lines": [
- "10",
- "15B",
- "15C"
- ]
+ "lines": ["10", "15B", "15C"]
},
{
"stopId": 1000,
@@ -1013,11 +753,7 @@
},
"latitude": 42.221220508,
"longitude": -8.767194468,
- "lines": [
- "10",
- "15B",
- "15C"
- ]
+ "lines": ["10", "15B", "15C"]
},
{
"stopId": 1010,
@@ -1026,12 +762,7 @@
},
"latitude": 42.221479642,
"longitude": -8.767482698,
- "lines": [
- "10",
- "15B",
- "15C",
- "N1"
- ]
+ "lines": ["10", "15B", "15C", "N1"]
},
{
"stopId": 1020,
@@ -1040,12 +771,7 @@
},
"latitude": 42.222764778,
"longitude": -8.769405842,
- "lines": [
- "10",
- "15B",
- "15C",
- "N1"
- ]
+ "lines": ["10", "15B", "15C", "N1"]
},
{
"stopId": 1030,
@@ -1054,11 +780,7 @@
},
"latitude": 42.223219677,
"longitude": -8.754753277,
- "lines": [
- "10",
- "15B",
- "15C"
- ]
+ "lines": ["10", "15B", "15C"]
},
{
"stopId": 1040,
@@ -1067,12 +789,7 @@
},
"latitude": 42.223237503,
"longitude": -8.755707801,
- "lines": [
- "10",
- "15B",
- "15C",
- "N1"
- ]
+ "lines": ["10", "15B", "15C", "N1"]
},
{
"stopId": 1050,
@@ -1081,11 +798,7 @@
},
"latitude": 42.221875354,
"longitude": -8.760935381,
- "lines": [
- "10",
- "15B",
- "15C"
- ]
+ "lines": ["10", "15B", "15C"]
},
{
"stopId": 1060,
@@ -1094,12 +807,7 @@
},
"latitude": 42.221789505,
"longitude": -8.759905458,
- "lines": [
- "10",
- "15B",
- "15C",
- "N1"
- ]
+ "lines": ["10", "15B", "15C", "N1"]
},
{
"stopId": 1070,
@@ -1108,12 +816,7 @@
},
"latitude": 42.221148357,
"longitude": -8.764660969,
- "lines": [
- "10",
- "15B",
- "15C",
- "N1"
- ]
+ "lines": ["10", "15B", "15C", "N1"]
},
{
"stopId": 1110,
@@ -1122,11 +825,7 @@
},
"latitude": 42.237821273,
"longitude": -8.729666379,
- "lines": [
- "A",
- "5B",
- "6"
- ]
+ "lines": ["A", "5B", "6"]
},
{
"stopId": 1120,
@@ -1135,12 +834,7 @@
},
"latitude": 42.23416729,
"longitude": -8.733331094,
- "lines": [
- "6",
- "9B",
- "15B",
- "28"
- ]
+ "lines": ["6", "9B", "15B", "28"]
},
{
"stopId": 1130,
@@ -1149,12 +843,7 @@
},
"latitude": 42.231238831,
"longitude": -8.735255297,
- "lines": [
- "6",
- "9B",
- "15B",
- "28"
- ]
+ "lines": ["6", "9B", "15B", "28"]
},
{
"stopId": 1140,
@@ -1163,11 +852,7 @@
},
"latitude": 42.225068475,
"longitude": -8.74774586,
- "lines": [
- "6",
- "9B",
- "28"
- ]
+ "lines": ["6", "9B", "28"]
},
{
"stopId": 1150,
@@ -1176,18 +861,7 @@
},
"latitude": 42.237384264,
"longitude": -8.729603006,
- "lines": [
- "C1",
- "C3d",
- "A",
- "5A",
- "9B",
- "10",
- "15B",
- "15C",
- "28",
- "N4"
- ]
+ "lines": ["C1", "C3d", "A", "5A", "9B", "10", "15B", "15C", "28", "N4"]
},
{
"stopId": 1160,
@@ -1196,11 +870,7 @@
},
"latitude": 42.225759663,
"longitude": -8.743239749,
- "lines": [
- "6",
- "9B",
- "28"
- ]
+ "lines": ["6", "9B", "28"]
},
{
"stopId": 1200,
@@ -1209,10 +879,7 @@
},
"latitude": 42.234233798,
"longitude": -8.73312316,
- "lines": [
- "10",
- "15B"
- ]
+ "lines": ["10", "15B"]
},
{
"stopId": 1210,
@@ -1221,10 +888,7 @@
},
"latitude": 42.230811976,
"longitude": -8.735364934,
- "lines": [
- "10",
- "15B"
- ]
+ "lines": ["10", "15B"]
},
{
"stopId": 1220,
@@ -1233,14 +897,7 @@
},
"latitude": 42.247097055,
"longitude": -8.693109251,
- "lines": [
- "5A",
- "10",
- "31",
- "H2",
- "H3",
- "PSA 1"
- ]
+ "lines": ["5A", "10", "31", "H2", "H3", "PSA 1"]
},
{
"stopId": 1230,
@@ -1249,12 +906,7 @@
},
"latitude": 42.247251925,
"longitude": -8.693122662,
- "lines": [
- "5B",
- "10",
- "N1",
- "H3"
- ]
+ "lines": ["5B", "10", "N1", "H3"]
},
{
"stopId": 1240,
@@ -1263,14 +915,7 @@
},
"latitude": 42.249128205,
"longitude": -8.69514773,
- "lines": [
- "5A",
- "10",
- "31",
- "H2",
- "H3",
- "PSA 1"
- ]
+ "lines": ["5A", "10", "31", "H2", "H3", "PSA 1"]
},
{
"stopId": 1250,
@@ -1299,17 +944,7 @@
},
"latitude": 42.219775977,
"longitude": -8.736255523,
- "lines": [
- "C3i",
- "4A",
- "4C",
- "5B",
- "10",
- "11",
- "12A",
- "15A",
- "N1"
- ]
+ "lines": ["C3i", "4A", "4C", "5B", "10", "11", "12A", "15A", "N1"]
},
{
"stopId": 1270,
@@ -1338,16 +973,7 @@
},
"latitude": 42.218523315,
"longitude": -8.74223465,
- "lines": [
- "C3i",
- "4A",
- "4C",
- "10",
- "11",
- "12A",
- "15A",
- "N1"
- ]
+ "lines": ["C3i", "4A", "4C", "10", "11", "12A", "15A", "N1"]
},
{
"stopId": 1290,
@@ -1400,18 +1026,7 @@
},
"latitude": 42.217705528,
"longitude": -8.747753325,
- "lines": [
- "C3i",
- "4A",
- "4C",
- "10",
- "11",
- "12A",
- "15A",
- "23",
- "N1",
- "N4"
- ]
+ "lines": ["C3i", "4A", "4C", "10", "11", "12A", "15A", "23", "N1", "N4"]
},
{
"stopId": 1320,
@@ -1420,13 +1035,7 @@
},
"latitude": 42.217302224,
"longitude": -8.751104752,
- "lines": [
- "C3i",
- "10",
- "12A",
- "23",
- "N1"
- ]
+ "lines": ["C3i", "10", "12A", "23", "N1"]
},
{
"stopId": 1330,
@@ -1435,13 +1044,7 @@
},
"latitude": 42.219553947,
"longitude": -8.732509436,
- "lines": [
- "A",
- "16",
- "23",
- "27",
- "H2"
- ]
+ "lines": ["A", "16", "23", "27", "H2"]
},
{
"stopId": 1340,
@@ -1450,10 +1053,7 @@
},
"latitude": 42.212870645,
"longitude": -8.732131792,
- "lines": [
- "27",
- "H2"
- ]
+ "lines": ["27", "H2"]
},
{
"stopId": 1350,
@@ -1462,12 +1062,7 @@
},
"latitude": 42.208026488,
"longitude": -8.7312098,
- "lines": [
- "7",
- "12B",
- "17",
- "27"
- ]
+ "lines": ["7", "12B", "17", "27"]
},
{
"stopId": 1360,
@@ -1476,14 +1071,7 @@
},
"latitude": 42.219613217,
"longitude": -8.732629194,
- "lines": [
- "7",
- "12B",
- "17",
- "27",
- "H2",
- "PTL"
- ]
+ "lines": ["7", "12B", "17", "27", "H2", "PTL"]
},
{
"stopId": 1380,
@@ -1492,11 +1080,7 @@
},
"latitude": 42.20533568,
"longitude": -8.730078621,
- "lines": [
- "7",
- "12B",
- "17"
- ]
+ "lines": ["7", "12B", "17"]
},
{
"stopId": 1390,
@@ -1505,17 +1089,7 @@
},
"latitude": 42.212735556,
"longitude": -8.732314182,
- "lines": [
- "A",
- "7",
- "12B",
- "17",
- "27",
- "U1",
- "H2",
- "H",
- "PTL"
- ]
+ "lines": ["A", "7", "12B", "17", "27", "U1", "H2", "H", "PTL"]
},
{
"stopId": 1400,
@@ -1524,18 +1098,7 @@
},
"latitude": 42.210706683,
"longitude": -8.732237372,
- "lines": [
- "A",
- "7",
- "12B",
- "17",
- "27",
- "U1",
- "H1",
- "H2",
- "H",
- "PTL"
- ]
+ "lines": ["A", "7", "12B", "17", "27", "U1", "H1", "H2", "H", "PTL"]
},
{
"stopId": 1410,
@@ -1544,13 +1107,7 @@
},
"latitude": 42.218060161,
"longitude": -8.732450427,
- "lines": [
- "A",
- "16",
- "23",
- "27",
- "H2"
- ]
+ "lines": ["A", "16", "23", "27", "H2"]
},
{
"stopId": 1420,
@@ -1559,9 +1116,7 @@
},
"latitude": 42.201440099,
"longitude": -8.726409762,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 1430,
@@ -1570,9 +1125,7 @@
},
"latitude": 42.203408408,
"longitude": -8.728817983,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 1440,
@@ -1581,9 +1134,7 @@
},
"latitude": 42.198480135,
"longitude": -8.723827649,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 1450,
@@ -1592,9 +1143,7 @@
},
"latitude": 42.201044695,
"longitude": -8.726112037,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 1460,
@@ -1603,9 +1152,7 @@
},
"latitude": 42.198867605,
"longitude": -8.72460549,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 1470,
@@ -1614,9 +1161,7 @@
},
"latitude": 42.194996678,
"longitude": -8.72097155,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 1480,
@@ -1625,9 +1170,7 @@
},
"latitude": 42.19015727,
"longitude": -8.72109012,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 1490,
@@ -1636,14 +1179,7 @@
},
"latitude": 42.210613294,
"longitude": -8.732057664,
- "lines": [
- "7",
- "12B",
- "17",
- "27",
- "H1",
- "H2"
- ]
+ "lines": ["7", "12B", "17", "27", "H1", "H2"]
},
{
"stopId": 1500,
@@ -1652,14 +1188,7 @@
},
"latitude": 42.217084821,
"longitude": -8.732530893,
- "lines": [
- "7",
- "12B",
- "17",
- "27",
- "H2",
- "PTL"
- ]
+ "lines": ["7", "12B", "17", "27", "H2", "PTL"]
},
{
"stopId": 1510,
@@ -1668,10 +1197,7 @@
},
"latitude": 42.215203365,
"longitude": -8.670416197,
- "lines": [
- "15B",
- "15C"
- ]
+ "lines": ["15B", "15C"]
},
{
"stopId": 1520,
@@ -1680,10 +1206,7 @@
},
"latitude": 42.215400704,
"longitude": -8.671308533,
- "lines": [
- "15B",
- "15C"
- ]
+ "lines": ["15B", "15C"]
},
{
"stopId": 1530,
@@ -1692,10 +1215,7 @@
},
"latitude": 42.212814417,
"longitude": -8.670537674,
- "lines": [
- "15B",
- "15C"
- ]
+ "lines": ["15B", "15C"]
},
{
"stopId": 1540,
@@ -1704,12 +1224,7 @@
},
"latitude": 42.221677429,
"longitude": -8.66978207,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C"
- ]
+ "lines": ["11", "15A", "15B", "15C"]
},
{
"stopId": 1550,
@@ -1718,12 +1233,7 @@
},
"latitude": 42.221299207,
"longitude": -8.670013709,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C"
- ]
+ "lines": ["11", "15A", "15B", "15C"]
},
{
"stopId": 1560,
@@ -1732,10 +1242,7 @@
},
"latitude": 42.219388605,
"longitude": -8.669172606,
- "lines": [
- "15A",
- "15B"
- ]
+ "lines": ["15A", "15B"]
},
{
"stopId": 1570,
@@ -1744,10 +1251,7 @@
},
"latitude": 42.217957539,
"longitude": -8.669369577,
- "lines": [
- "15B",
- "15C"
- ]
+ "lines": ["15B", "15C"]
},
{
"stopId": 1580,
@@ -1756,10 +1260,7 @@
},
"latitude": 42.218393587,
"longitude": -8.669480106,
- "lines": [
- "15B",
- "15C"
- ]
+ "lines": ["15B", "15C"]
},
{
"stopId": 1590,
@@ -1768,10 +1269,7 @@
},
"latitude": 42.256667905,
"longitude": -8.682575386,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 1600,
@@ -1780,10 +1278,7 @@
},
"latitude": 42.251389209,
"longitude": -8.689369833,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 1610,
@@ -1792,9 +1287,7 @@
},
"latitude": 42.251376198,
"longitude": -8.68920404,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 1620,
@@ -1803,10 +1296,7 @@
},
"latitude": 42.253987165,
"longitude": -8.686196616,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 1630,
@@ -1815,10 +1305,7 @@
},
"latitude": 42.255177674,
"longitude": -8.684734482,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 1640,
@@ -1827,9 +1314,7 @@
},
"latitude": 42.254950083,
"longitude": -8.684862748,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 1650,
@@ -1838,9 +1323,7 @@
},
"latitude": 42.256910715,
"longitude": -8.68201353,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 1660,
@@ -1849,9 +1332,7 @@
},
"latitude": 42.259217959,
"longitude": -8.679666503,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 1670,
@@ -1860,10 +1341,7 @@
},
"latitude": 42.258365967,
"longitude": -8.680508997,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 1680,
@@ -1872,9 +1350,7 @@
},
"latitude": 42.251327471,
"longitude": -8.69260735,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 1690,
@@ -1883,10 +1359,7 @@
},
"latitude": 42.251420909,
"longitude": -8.692153216,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 1710,
@@ -1895,10 +1368,7 @@
},
"latitude": 42.274450823,
"longitude": -8.667138233,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 1720,
@@ -1907,9 +1377,7 @@
},
"latitude": 42.270480988,
"longitude": -8.667726374,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 1730,
@@ -1918,9 +1386,7 @@
},
"latitude": 42.267833798,
"longitude": -8.671345739,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 1740,
@@ -1929,10 +1395,7 @@
},
"latitude": 42.27068743,
"longitude": -8.668057842,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 1750,
@@ -1941,9 +1404,7 @@
},
"latitude": 42.266305919,
"longitude": -8.672818918,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 1760,
@@ -1952,9 +1413,7 @@
},
"latitude": 42.26408966,
"longitude": -8.674082239,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 1770,
@@ -1963,10 +1422,7 @@
},
"latitude": 42.26785896,
"longitude": -8.671440263,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 1780,
@@ -1975,10 +1431,7 @@
},
"latitude": 42.266245291,
"longitude": -8.672965754,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 1790,
@@ -1987,9 +1440,7 @@
},
"latitude": 42.261621089,
"longitude": -8.677207279,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 1800,
@@ -1998,10 +1449,7 @@
},
"latitude": 42.263995234,
"longitude": -8.674224503,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 1810,
@@ -2010,10 +1458,7 @@
},
"latitude": 42.262068498,
"longitude": -8.676736193,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 1820,
@@ -2022,9 +1467,7 @@
},
"latitude": 42.271878394,
"longitude": -8.666356304,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 1830,
@@ -2033,9 +1476,7 @@
},
"latitude": 42.274038501,
"longitude": -8.666949932,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 1840,
@@ -2044,10 +1485,7 @@
},
"latitude": 42.27159436,
"longitude": -8.666389735,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 1850,
@@ -2056,15 +1494,7 @@
},
"latitude": 42.216135691,
"longitude": -8.759632243,
- "lines": [
- "C3d",
- "C3i",
- "4A",
- "4C",
- "12A",
- "15A",
- "23"
- ]
+ "lines": ["C3d", "C3i", "4A", "4C", "12A", "15A", "23"]
},
{
"stopId": 1860,
@@ -2073,15 +1503,7 @@
},
"latitude": 42.216741568,
"longitude": -8.757129742,
- "lines": [
- "C3d",
- "C3i",
- "4A",
- "4C",
- "12A",
- "15A",
- "23"
- ]
+ "lines": ["C3d", "C3i", "4A", "4C", "12A", "15A", "23"]
},
{
"stopId": 1870,
@@ -2090,12 +1512,7 @@
},
"latitude": 42.211235082,
"longitude": -8.773459294,
- "lines": [
- "C3d",
- "C3i",
- "15A",
- "23"
- ]
+ "lines": ["C3d", "C3i", "15A", "23"]
},
{
"stopId": 1880,
@@ -2104,17 +1521,7 @@
},
"latitude": 42.216687933,
"longitude": -8.756794466,
- "lines": [
- "C3d",
- "C3i",
- "4A",
- "4C",
- "12A",
- "15A",
- "23",
- "N1",
- "N4"
- ]
+ "lines": ["C3d", "C3i", "4A", "4C", "12A", "15A", "23", "N1", "N4"]
},
{
"stopId": 1890,
@@ -2123,17 +1530,7 @@
},
"latitude": 42.215913672,
"longitude": -8.759904797,
- "lines": [
- "C3d",
- "C3i",
- "4A",
- "4C",
- "12A",
- "15A",
- "23",
- "N1",
- "N4"
- ]
+ "lines": ["C3d", "C3i", "4A", "4C", "12A", "15A", "23", "N1", "N4"]
},
{
"stopId": 1900,
@@ -2142,16 +1539,7 @@
},
"latitude": 42.211855119,
"longitude": -8.766755158,
- "lines": [
- "C3d",
- "C3i",
- "4A",
- "4C",
- "15A",
- "23",
- "N1",
- "N4"
- ]
+ "lines": ["C3d", "C3i", "4A", "4C", "15A", "23", "N1", "N4"]
},
{
"stopId": 1910,
@@ -2160,13 +1548,7 @@
},
"latitude": 42.211905694,
"longitude": -8.766999036,
- "lines": [
- "C3d",
- "C3i",
- "4C",
- "15A",
- "23"
- ]
+ "lines": ["C3d", "C3i", "4C", "15A", "23"]
},
{
"stopId": 1920,
@@ -2175,16 +1557,7 @@
},
"latitude": 42.211066417,
"longitude": -8.772953743,
- "lines": [
- "C3d",
- "C3i",
- "4A",
- "4C",
- "15A",
- "23",
- "N1",
- "N4"
- ]
+ "lines": ["C3d", "C3i", "4A", "4C", "15A", "23", "N1", "N4"]
},
{
"stopId": 1930,
@@ -2193,12 +1566,7 @@
},
"latitude": 42.21474886,
"longitude": -8.69897918,
- "lines": [
- "12A",
- "12B",
- "13",
- "U2"
- ]
+ "lines": ["12A", "12B", "13", "U2"]
},
{
"stopId": 1940,
@@ -2207,11 +1575,7 @@
},
"latitude": 42.218338954,
"longitude": -8.703817429,
- "lines": [
- "12A",
- "12B",
- "13"
- ]
+ "lines": ["12A", "12B", "13"]
},
{
"stopId": 1950,
@@ -2220,11 +1584,7 @@
},
"latitude": 42.220567154,
"longitude": -8.706419628,
- "lines": [
- "12A",
- "12B",
- "13"
- ]
+ "lines": ["12A", "12B", "13"]
},
{
"stopId": 1960,
@@ -2233,13 +1593,7 @@
},
"latitude": 42.224676782,
"longitude": -8.711832326,
- "lines": [
- "12A",
- "12B",
- "13",
- "U2",
- "H2"
- ]
+ "lines": ["12A", "12B", "13", "U2", "H2"]
},
{
"stopId": 1970,
@@ -2248,11 +1602,7 @@
},
"latitude": 42.223965709,
"longitude": -8.710062068,
- "lines": [
- "12A",
- "12B",
- "13"
- ]
+ "lines": ["12A", "12B", "13"]
},
{
"stopId": 1980,
@@ -2261,12 +1611,7 @@
},
"latitude": 42.214703324,
"longitude": -8.699378397,
- "lines": [
- "12A",
- "12B",
- "13",
- "U2"
- ]
+ "lines": ["12A", "12B", "13", "U2"]
},
{
"stopId": 1990,
@@ -2275,12 +1620,7 @@
},
"latitude": 42.222130198,
"longitude": -8.708300774,
- "lines": [
- "12A",
- "12B",
- "13",
- "U2"
- ]
+ "lines": ["12A", "12B", "13", "U2"]
},
{
"stopId": 2000,
@@ -2289,11 +1629,7 @@
},
"latitude": 42.220728012,
"longitude": -8.70612292,
- "lines": [
- "12A",
- "12B",
- "13"
- ]
+ "lines": ["12A", "12B", "13"]
},
{
"stopId": 2010,
@@ -2302,11 +1638,7 @@
},
"latitude": 42.218213283,
"longitude": -8.703163426,
- "lines": [
- "12A",
- "12B",
- "13"
- ]
+ "lines": ["12A", "12B", "13"]
},
{
"stopId": 2020,
@@ -2315,12 +1647,7 @@
},
"latitude": 42.228518615,
"longitude": -8.719214126,
- "lines": [
- "12A",
- "12B",
- "13",
- "U2"
- ]
+ "lines": ["12A", "12B", "13", "U2"]
},
{
"stopId": 2030,
@@ -2329,12 +1656,7 @@
},
"latitude": 42.226744428,
"longitude": -8.716268699,
- "lines": [
- "12A",
- "12B",
- "13",
- "H2"
- ]
+ "lines": ["12A", "12B", "13", "H2"]
},
{
"stopId": 2040,
@@ -2343,11 +1665,7 @@
},
"latitude": 42.226835791,
"longitude": -8.715823453,
- "lines": [
- "12A",
- "12B",
- "13"
- ]
+ "lines": ["12A", "12B", "13"]
},
{
"stopId": 2060,
@@ -2356,9 +1674,7 @@
},
"latitude": 42.259945558,
"longitude": -8.672608434,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 2070,
@@ -2367,9 +1683,7 @@
},
"latitude": 42.259481393,
"longitude": -8.67292487,
- "lines": [
- "C3i"
- ]
+ "lines": ["C3i"]
},
{
"stopId": 2080,
@@ -2378,9 +1692,7 @@
},
"latitude": 42.266569717,
"longitude": -8.667160768,
- "lines": [
- "C3i"
- ]
+ "lines": ["C3i"]
},
{
"stopId": 2090,
@@ -2389,9 +1701,7 @@
},
"latitude": 42.272074281,
"longitude": -8.664593691,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 2100,
@@ -2400,9 +1710,7 @@
},
"latitude": 42.263186001,
"longitude": -8.668939094,
- "lines": [
- "C3i"
- ]
+ "lines": ["C3i"]
},
{
"stopId": 2110,
@@ -2411,9 +1719,7 @@
},
"latitude": 42.263286688,
"longitude": -8.668985036,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 2130,
@@ -2422,9 +1728,7 @@
},
"latitude": 42.266758811,
"longitude": -8.667247828,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 2140,
@@ -2433,12 +1737,7 @@
},
"latitude": 42.213799707,
"longitude": -8.774374426,
- "lines": [
- "10",
- "15B",
- "15C",
- "TUR"
- ]
+ "lines": ["10", "15B", "15C", "TUR"]
},
{
"stopId": 2150,
@@ -2447,11 +1746,7 @@
},
"latitude": 42.221416498,
"longitude": -8.773724153,
- "lines": [
- "10",
- "15B",
- "15C"
- ]
+ "lines": ["10", "15B", "15C"]
},
{
"stopId": 2160,
@@ -2460,11 +1755,7 @@
},
"latitude": 42.215907608,
"longitude": -8.774702031,
- "lines": [
- "10",
- "15B",
- "15C"
- ]
+ "lines": ["10", "15B", "15C"]
},
{
"stopId": 2170,
@@ -2473,12 +1764,7 @@
},
"latitude": 42.210171416,
"longitude": -8.774585056,
- "lines": [
- "C3d",
- "4A",
- "4C",
- "10"
- ]
+ "lines": ["C3d", "4A", "4C", "10"]
},
{
"stopId": 2180,
@@ -2487,12 +1773,7 @@
},
"latitude": 42.206809895,
"longitude": -8.776206766,
- "lines": [
- "C3d",
- "4A",
- "4C",
- "10"
- ]
+ "lines": ["C3d", "4A", "4C", "10"]
},
{
"stopId": 2190,
@@ -2501,12 +1782,7 @@
},
"latitude": 42.205147646,
"longitude": -8.77674534,
- "lines": [
- "C3d",
- "4A",
- "4C",
- "10"
- ]
+ "lines": ["C3d", "4A", "4C", "10"]
},
{
"stopId": 2200,
@@ -2515,9 +1791,7 @@
},
"latitude": 42.22271748,
"longitude": -8.656176614,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 2210,
@@ -2526,9 +1800,7 @@
},
"latitude": 42.222538699,
"longitude": -8.656616496,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 2220,
@@ -2537,9 +1809,7 @@
},
"latitude": 42.220338634,
"longitude": -8.668666271,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 2230,
@@ -2548,9 +1818,7 @@
},
"latitude": 42.222347963,
"longitude": -8.662841482,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 2240,
@@ -2559,9 +1827,7 @@
},
"latitude": 42.222432209,
"longitude": -8.662773458,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 2250,
@@ -2570,9 +1836,7 @@
},
"latitude": 42.220826115,
"longitude": -8.659651094,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 2260,
@@ -2581,9 +1845,7 @@
},
"latitude": 42.220504663,
"longitude": -8.668053014,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 2270,
@@ -2592,9 +1854,7 @@
},
"latitude": 42.22113201,
"longitude": -8.658591621,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 2280,
@@ -2603,11 +1863,7 @@
},
"latitude": 42.21650849,
"longitude": -8.719175368,
- "lines": [
- "18A",
- "18B",
- "18H"
- ]
+ "lines": ["18A", "18B", "18H"]
},
{
"stopId": 2290,
@@ -2616,11 +1872,7 @@
},
"latitude": 42.216415126,
"longitude": -8.719355076,
- "lines": [
- "18A",
- "18B",
- "18H"
- ]
+ "lines": ["18A", "18B", "18H"]
},
{
"stopId": 2300,
@@ -2629,9 +1881,7 @@
},
"latitude": 42.22078735,
"longitude": -8.722722261,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 2310,
@@ -2640,11 +1890,7 @@
},
"latitude": 42.173398721,
"longitude": -8.811050666,
- "lines": [
- "C3d",
- "10",
- "12A"
- ]
+ "lines": ["C3d", "10", "12A"]
},
{
"stopId": 2320,
@@ -2653,9 +1899,7 @@
},
"latitude": 42.172541892,
"longitude": -8.809133287,
- "lines": [
- "10"
- ]
+ "lines": ["10"]
},
{
"stopId": 2330,
@@ -2664,9 +1908,7 @@
},
"latitude": 42.173316968,
"longitude": -8.81100291,
- "lines": [
- "10"
- ]
+ "lines": ["10"]
},
{
"stopId": 2340,
@@ -2675,11 +1917,7 @@
},
"latitude": 42.167981444,
"longitude": -8.806504239,
- "lines": [
- "C3d",
- "10",
- "12A"
- ]
+ "lines": ["C3d", "10", "12A"]
},
{
"stopId": 2350,
@@ -2688,11 +1926,7 @@
},
"latitude": 42.169850316,
"longitude": -8.808861828,
- "lines": [
- "C3d",
- "10",
- "12A"
- ]
+ "lines": ["C3d", "10", "12A"]
},
{
"stopId": 2360,
@@ -2701,9 +1935,7 @@
},
"latitude": 42.167825345,
"longitude": -8.806386831,
- "lines": [
- "10"
- ]
+ "lines": ["10"]
},
{
"stopId": 2370,
@@ -2712,11 +1944,7 @@
},
"latitude": 42.172705652,
"longitude": -8.809114415,
- "lines": [
- "C3d",
- "10",
- "12A"
- ]
+ "lines": ["C3d", "10", "12A"]
},
{
"stopId": 2380,
@@ -2725,9 +1953,7 @@
},
"latitude": 42.169719111,
"longitude": -8.808832324,
- "lines": [
- "10"
- ]
+ "lines": ["10"]
},
{
"stopId": 2390,
@@ -2736,9 +1962,7 @@
},
"latitude": 42.224020371,
"longitude": -8.716787891,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 2410,
@@ -2747,9 +1971,7 @@
},
"latitude": 42.209020914,
"longitude": -8.702331689,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 2420,
@@ -2758,9 +1980,7 @@
},
"latitude": 42.208468606,
"longitude": -8.702143934,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 2430,
@@ -2769,9 +1989,7 @@
},
"latitude": 42.223917068,
"longitude": -8.726168827,
- "lines": [
- "C1"
- ]
+ "lines": ["C1"]
},
{
"stopId": 2440,
@@ -2780,9 +1998,7 @@
},
"latitude": 42.228315534,
"longitude": -8.721741958,
- "lines": [
- "C1"
- ]
+ "lines": ["C1"]
},
{
"stopId": 2450,
@@ -2791,9 +2007,7 @@
},
"latitude": 42.226024692,
"longitude": -8.723390804,
- "lines": [
- "C1"
- ]
+ "lines": ["C1"]
},
{
"stopId": 2460,
@@ -2802,9 +2016,7 @@
},
"latitude": 42.203300943,
"longitude": -8.696320858,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 2490,
@@ -2813,10 +2025,7 @@
},
"latitude": 42.194635725,
"longitude": -8.699504032,
- "lines": [
- "6",
- "27"
- ]
+ "lines": ["6", "27"]
},
{
"stopId": 2500,
@@ -2825,9 +2034,7 @@
},
"latitude": 42.191950062,
"longitude": -8.707193511,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 2510,
@@ -2836,9 +2043,7 @@
},
"latitude": 42.191323803,
"longitude": -8.721049887,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 2520,
@@ -2847,10 +2052,7 @@
},
"latitude": 42.204563665,
"longitude": -8.687025359,
- "lines": [
- "6",
- "14"
- ]
+ "lines": ["6", "14"]
},
{
"stopId": 2540,
@@ -2859,11 +2061,7 @@
},
"latitude": 42.22513153,
"longitude": -8.751597027,
- "lines": [
- "6",
- "9B",
- "28"
- ]
+ "lines": ["6", "9B", "28"]
},
{
"stopId": 2550,
@@ -2872,10 +2070,7 @@
},
"latitude": 42.204086577,
"longitude": -8.704832445,
- "lines": [
- "18A",
- "18B"
- ]
+ "lines": ["18A", "18B"]
},
{
"stopId": 2560,
@@ -2884,10 +2079,7 @@
},
"latitude": 42.204297185,
"longitude": -8.704942415,
- "lines": [
- "18A",
- "18B"
- ]
+ "lines": ["18A", "18B"]
},
{
"stopId": 2570,
@@ -2896,10 +2088,7 @@
},
"latitude": 42.207146083,
"longitude": -8.704526775,
- "lines": [
- "18A",
- "18B"
- ]
+ "lines": ["18A", "18B"]
},
{
"stopId": 2580,
@@ -2908,10 +2097,7 @@
},
"latitude": 42.207235488,
"longitude": -8.704631381,
- "lines": [
- "18A",
- "18B"
- ]
+ "lines": ["18A", "18B"]
},
{
"stopId": 2590,
@@ -2920,9 +2106,7 @@
},
"latitude": 42.232442621,
"longitude": -8.689558541,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 2600,
@@ -2931,10 +2115,7 @@
},
"latitude": 42.235437997,
"longitude": -8.689019794,
- "lines": [
- "27",
- "28"
- ]
+ "lines": ["27", "28"]
},
{
"stopId": 2610,
@@ -2943,9 +2124,7 @@
},
"latitude": 42.233426101,
"longitude": -8.693298639,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 2620,
@@ -2954,9 +2133,7 @@
},
"latitude": 42.235420737,
"longitude": -8.68894034,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 2630,
@@ -2965,10 +2142,7 @@
},
"latitude": 42.233483693,
"longitude": -8.693266452,
- "lines": [
- "27",
- "28"
- ]
+ "lines": ["27", "28"]
},
{
"stopId": 2640,
@@ -2977,10 +2151,7 @@
},
"latitude": 42.232559793,
"longitude": -8.689848219,
- "lines": [
- "27",
- "28"
- ]
+ "lines": ["27", "28"]
},
{
"stopId": 2735,
@@ -2989,10 +2160,7 @@
},
"latitude": 42.235033314,
"longitude": -8.727202198,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 2740,
@@ -3001,9 +2169,7 @@
},
"latitude": 42.207451401,
"longitude": -8.701194432,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 2750,
@@ -3012,9 +2178,7 @@
},
"latitude": 42.20671834,
"longitude": -8.699160127,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 2760,
@@ -3023,9 +2187,7 @@
},
"latitude": 42.208194443,
"longitude": -8.701518979,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 2770,
@@ -3034,9 +2196,7 @@
},
"latitude": 42.20648703,
"longitude": -8.698760561,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 2780,
@@ -3067,15 +2227,7 @@
},
"latitude": 42.230566426,
"longitude": -8.730086804,
- "lines": [
- "4A",
- "4C",
- "11",
- "12B",
- "17",
- "27",
- "N1"
- ]
+ "lines": ["4A", "4C", "11", "12B", "17", "27", "N1"]
},
{
"stopId": 2800,
@@ -3084,15 +2236,7 @@
},
"latitude": 42.230291959,
"longitude": -8.730279255,
- "lines": [
- "4A",
- "4C",
- "7",
- "12B",
- "17",
- "27",
- "PSA 4"
- ]
+ "lines": ["4A", "4C", "7", "12B", "17", "27", "PSA 4"]
},
{
"stopId": 2810,
@@ -3101,15 +2245,7 @@
},
"latitude": 42.227601839,
"longitude": -8.730236339,
- "lines": [
- "4A",
- "4C",
- "7",
- "12B",
- "17",
- "27",
- "PSA 4"
- ]
+ "lines": ["4A", "4C", "7", "12B", "17", "27", "PSA 4"]
},
{
"stopId": 2820,
@@ -3118,15 +2254,7 @@
},
"latitude": 42.227403959,
"longitude": -8.729948584,
- "lines": [
- "4A",
- "4C",
- "11",
- "12B",
- "17",
- "27",
- "N1"
- ]
+ "lines": ["4A", "4C", "11", "12B", "17", "27", "N1"]
},
{
"stopId": 2830,
@@ -3135,13 +2263,7 @@
},
"latitude": 42.22243855,
"longitude": -8.751978552,
- "lines": [
- "C3d",
- "13",
- "15B",
- "15C",
- "H"
- ]
+ "lines": ["C3d", "13", "15B", "15C", "H"]
},
{
"stopId": 2840,
@@ -3150,10 +2272,7 @@
},
"latitude": 42.241698248,
"longitude": -8.665209215,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 2850,
@@ -3162,10 +2281,7 @@
},
"latitude": 42.241676405,
"longitude": -8.665026825,
- "lines": [
- "9B",
- "28"
- ]
+ "lines": ["9B", "28"]
},
{
"stopId": 2870,
@@ -3174,10 +2290,7 @@
},
"latitude": 42.237397409,
"longitude": -8.694169154,
- "lines": [
- "4A",
- "24"
- ]
+ "lines": ["4A", "24"]
},
{
"stopId": 2880,
@@ -3186,10 +2299,7 @@
},
"latitude": 42.239331582,
"longitude": -8.692983618,
- "lines": [
- "4A",
- "24"
- ]
+ "lines": ["4A", "24"]
},
{
"stopId": 2910,
@@ -3198,10 +2308,7 @@
},
"latitude": 42.241655974,
"longitude": -8.692827561,
- "lines": [
- "4A",
- "24"
- ]
+ "lines": ["4A", "24"]
},
{
"stopId": 2920,
@@ -3210,10 +2317,7 @@
},
"latitude": 42.235852081,
"longitude": -8.695592417,
- "lines": [
- "4A",
- "24"
- ]
+ "lines": ["4A", "24"]
},
{
"stopId": 2930,
@@ -3222,10 +2326,7 @@
},
"latitude": 42.235377808,
"longitude": -8.695695331,
- "lines": [
- "4A",
- "24"
- ]
+ "lines": ["4A", "24"]
},
{
"stopId": 2950,
@@ -3234,10 +2335,7 @@
},
"latitude": 42.204307169,
"longitude": -8.729719236,
- "lines": [
- "12B",
- "17"
- ]
+ "lines": ["12B", "17"]
},
{
"stopId": 2960,
@@ -3246,10 +2344,7 @@
},
"latitude": 42.20073699,
"longitude": -8.738895516,
- "lines": [
- "12B",
- "17"
- ]
+ "lines": ["12B", "17"]
},
{
"stopId": 2970,
@@ -3258,10 +2353,7 @@
},
"latitude": 42.201317829,
"longitude": -8.735636365,
- "lines": [
- "12B",
- "17"
- ]
+ "lines": ["12B", "17"]
},
{
"stopId": 2980,
@@ -3270,10 +2362,7 @@
},
"latitude": 42.200758846,
"longitude": -8.739043037,
- "lines": [
- "12B",
- "17"
- ]
+ "lines": ["12B", "17"]
},
{
"stopId": 2990,
@@ -3282,10 +2371,7 @@
},
"latitude": 42.203792573,
"longitude": -8.729630723,
- "lines": [
- "12B",
- "17"
- ]
+ "lines": ["12B", "17"]
},
{
"stopId": 3000,
@@ -3294,10 +2380,7 @@
},
"latitude": 42.201188677,
"longitude": -8.733208966,
- "lines": [
- "12B",
- "17"
- ]
+ "lines": ["12B", "17"]
},
{
"stopId": 3010,
@@ -3306,10 +2389,7 @@
},
"latitude": 42.20121252,
"longitude": -8.735711467,
- "lines": [
- "12B",
- "17"
- ]
+ "lines": ["12B", "17"]
},
{
"stopId": 3020,
@@ -3318,10 +2398,7 @@
},
"latitude": 42.201218481,
"longitude": -8.733509374,
- "lines": [
- "12B",
- "17"
- ]
+ "lines": ["12B", "17"]
},
{
"stopId": 3030,
@@ -3330,9 +2407,7 @@
},
"latitude": 42.194702579,
"longitude": -8.721025195,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 3050,
@@ -3341,9 +2416,7 @@
},
"latitude": 42.192360267,
"longitude": -8.756680959,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 3052,
@@ -3352,9 +2425,7 @@
},
"latitude": 42.216966631,
"longitude": -8.729813845,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 3060,
@@ -3363,9 +2434,7 @@
},
"latitude": 42.224698049,
"longitude": -8.701749123,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3070,
@@ -3374,9 +2443,7 @@
},
"latitude": 42.224816342,
"longitude": -8.701565998,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3080,
@@ -3385,9 +2452,7 @@
},
"latitude": 42.1873653089623,
"longitude": -8.800886236766305,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 3090,
@@ -3396,11 +2461,7 @@
},
"latitude": 42.191019711713736,
"longitude": -8.799628565094565,
- "lines": [
- "C3d",
- "10",
- "11"
- ]
+ "lines": ["C3d", "10", "11"]
},
{
"stopId": 3100,
@@ -3409,10 +2470,7 @@
},
"latitude": 42.184766843,
"longitude": -8.802180879,
- "lines": [
- "11",
- "12A"
- ]
+ "lines": ["11", "12A"]
},
{
"stopId": 3110,
@@ -3421,9 +2479,7 @@
},
"latitude": 42.184416675,
"longitude": -8.802179713,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 3120,
@@ -3432,10 +2488,7 @@
},
"latitude": 42.187488521491225,
"longitude": -8.801226626055183,
- "lines": [
- "11",
- "12A"
- ]
+ "lines": ["11", "12A"]
},
{
"stopId": 3130,
@@ -3444,9 +2497,7 @@
},
"latitude": 42.191024803868736,
"longitude": -8.799397387002196,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 3140,
@@ -3455,9 +2506,7 @@
},
"latitude": 42.15800346,
"longitude": -8.686134691,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 3150,
@@ -3466,9 +2515,7 @@
},
"latitude": 42.157661469,
"longitude": -8.685973759,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 3160,
@@ -3477,10 +2524,7 @@
},
"latitude": 42.206593246,
"longitude": -8.721651793,
- "lines": [
- "18B",
- "18H"
- ]
+ "lines": ["18B", "18H"]
},
{
"stopId": 3170,
@@ -3489,9 +2533,7 @@
},
"latitude": 42.220968446,
"longitude": -8.720400826,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 3180,
@@ -3500,10 +2542,7 @@
},
"latitude": 42.21955863,
"longitude": -8.711410119,
- "lines": [
- "18B",
- "18H"
- ]
+ "lines": ["18B", "18H"]
},
{
"stopId": 3190,
@@ -3512,10 +2551,7 @@
},
"latitude": 42.219681782,
"longitude": -8.711385979,
- "lines": [
- "18B",
- "18H"
- ]
+ "lines": ["18B", "18H"]
},
{
"stopId": 3230,
@@ -3524,16 +2560,7 @@
},
"latitude": 42.236471452,
"longitude": -8.720164905,
- "lines": [
- "A",
- "5A",
- "9B",
- "11",
- "15B",
- "15C",
- "16",
- "17"
- ]
+ "lines": ["A", "5A", "9B", "11", "15B", "15C", "16", "17"]
},
{
"stopId": 3240,
@@ -3542,17 +2569,7 @@
},
"latitude": 42.22214729,
"longitude": -8.734167916,
- "lines": [
- "A",
- "5A",
- "5B",
- "10",
- "11",
- "13",
- "N4",
- "H1",
- "H"
- ]
+ "lines": ["A", "5A", "5B", "10", "11", "13", "N4", "H1", "H"]
},
{
"stopId": 3250,
@@ -3561,13 +2578,7 @@
},
"latitude": 42.222378625,
"longitude": -8.734134247,
- "lines": [
- "C1",
- "A",
- "10",
- "N4",
- "H1"
- ]
+ "lines": ["C1", "A", "10", "N4", "H1"]
},
{
"stopId": 3260,
@@ -3576,9 +2587,7 @@
},
"latitude": 42.226287696,
"longitude": -8.737475832,
- "lines": [
- "15B"
- ]
+ "lines": ["15B"]
},
{
"stopId": 3270,
@@ -3587,10 +2596,7 @@
},
"latitude": 42.226490285,
"longitude": -8.73744901,
- "lines": [
- "10",
- "15B"
- ]
+ "lines": ["10", "15B"]
},
{
"stopId": 3280,
@@ -3599,9 +2605,7 @@
},
"latitude": 42.188898503,
"longitude": -8.776299224,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 3290,
@@ -3610,11 +2614,7 @@
},
"latitude": 42.213397685,
"longitude": -8.72248211,
- "lines": [
- "A",
- "18B",
- "18H"
- ]
+ "lines": ["A", "18B", "18H"]
},
{
"stopId": 3300,
@@ -3623,11 +2623,7 @@
},
"latitude": 42.211751348,
"longitude": -8.721691531,
- "lines": [
- "A",
- "18B",
- "18H"
- ]
+ "lines": ["A", "18B", "18H"]
},
{
"stopId": 3310,
@@ -3636,11 +2632,7 @@
},
"latitude": 42.209233023,
"longitude": -8.720666368,
- "lines": [
- "A",
- "18B",
- "18H"
- ]
+ "lines": ["A", "18B", "18H"]
},
{
"stopId": 3320,
@@ -3649,11 +2641,7 @@
},
"latitude": 42.210154848,
"longitude": -8.720902403,
- "lines": [
- "A",
- "18B",
- "18H"
- ]
+ "lines": ["A", "18B", "18H"]
},
{
"stopId": 3350,
@@ -3662,10 +2650,7 @@
},
"latitude": 42.230911796,
"longitude": -8.722711253,
- "lines": [
- "12A",
- "27"
- ]
+ "lines": ["12A", "27"]
},
{
"stopId": 3360,
@@ -3674,9 +2659,7 @@
},
"latitude": 42.237803518,
"longitude": -8.704409031,
- "lines": [
- "31"
- ]
+ "lines": ["31"]
},
{
"stopId": 3370,
@@ -3685,10 +2668,7 @@
},
"latitude": 42.205676226,
"longitude": -8.693112047,
- "lines": [
- "6",
- "14"
- ]
+ "lines": ["6", "14"]
},
{
"stopId": 3380,
@@ -3697,10 +2677,7 @@
},
"latitude": 42.205623108,
"longitude": -8.693239335,
- "lines": [
- "6",
- "14"
- ]
+ "lines": ["6", "14"]
},
{
"stopId": 3390,
@@ -3709,10 +2686,7 @@
},
"latitude": 42.205296644,
"longitude": -8.692558914,
- "lines": [
- "6",
- "14"
- ]
+ "lines": ["6", "14"]
},
{
"stopId": 3400,
@@ -3721,9 +2695,7 @@
},
"latitude": 42.163584451,
"longitude": -8.716088728,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 3420,
@@ -3732,12 +2704,7 @@
},
"latitude": 42.208071495,
"longitude": -8.731366082,
- "lines": [
- "7",
- "12B",
- "17",
- "27"
- ]
+ "lines": ["7", "12B", "17", "27"]
},
{
"stopId": 3430,
@@ -3746,10 +2713,7 @@
},
"latitude": 42.215621206,
"longitude": -8.67221512,
- "lines": [
- "15B",
- "15C"
- ]
+ "lines": ["15B", "15C"]
},
{
"stopId": 3450,
@@ -3758,10 +2722,7 @@
},
"latitude": 42.194732286,
"longitude": -8.769245322,
- "lines": [
- "11",
- "29"
- ]
+ "lines": ["11", "29"]
},
{
"stopId": 3460,
@@ -3770,10 +2731,7 @@
},
"latitude": 42.203197031,
"longitude": -8.753437723,
- "lines": [
- "11",
- "29"
- ]
+ "lines": ["11", "29"]
},
{
"stopId": 3470,
@@ -3782,10 +2740,7 @@
},
"latitude": 42.193581709,
"longitude": -8.772496159,
- "lines": [
- "11",
- "29"
- ]
+ "lines": ["11", "29"]
},
{
"stopId": 3480,
@@ -3794,10 +2749,7 @@
},
"latitude": 42.196095467,
"longitude": -8.766230519,
- "lines": [
- "11",
- "29"
- ]
+ "lines": ["11", "29"]
},
{
"stopId": 3490,
@@ -3806,10 +2758,7 @@
},
"latitude": 42.193613504,
"longitude": -8.772222574,
- "lines": [
- "11",
- "29"
- ]
+ "lines": ["11", "29"]
},
{
"stopId": 3500,
@@ -3818,10 +2767,7 @@
},
"latitude": 42.194553241,
"longitude": -8.770325583,
- "lines": [
- "11",
- "29"
- ]
+ "lines": ["11", "29"]
},
{
"stopId": 3510,
@@ -3830,10 +2776,7 @@
},
"latitude": 42.202849227,
"longitude": -8.753870291,
- "lines": [
- "11",
- "29"
- ]
+ "lines": ["11", "29"]
},
{
"stopId": 3520,
@@ -3842,10 +2785,7 @@
},
"latitude": 42.200000035,
"longitude": -8.759107913,
- "lines": [
- "11",
- "29"
- ]
+ "lines": ["11", "29"]
},
{
"stopId": 3530,
@@ -3854,10 +2794,7 @@
},
"latitude": 42.199773285,
"longitude": -8.759958845,
- "lines": [
- "11",
- "29"
- ]
+ "lines": ["11", "29"]
},
{
"stopId": 3540,
@@ -3866,10 +2803,7 @@
},
"latitude": 42.19617384,
"longitude": -8.766295392,
- "lines": [
- "11",
- "29"
- ]
+ "lines": ["11", "29"]
},
{
"stopId": 3550,
@@ -3878,9 +2812,7 @@
},
"latitude": 42.19747765,
"longitude": -8.688158543,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3560,
@@ -3889,9 +2821,7 @@
},
"latitude": 42.209126518,
"longitude": -8.695599845,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3570,
@@ -3900,9 +2830,7 @@
},
"latitude": 42.209576972,
"longitude": -8.695580071,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3572,
@@ -3911,9 +2839,7 @@
},
"latitude": 42.208457815,
"longitude": -8.695017358,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 3574,
@@ -3922,9 +2848,7 @@
},
"latitude": 42.208533311,
"longitude": -8.694987854,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 3580,
@@ -3933,10 +2857,7 @@
},
"latitude": 42.204440318,
"longitude": -8.690871804,
- "lines": [
- "6",
- "14"
- ]
+ "lines": ["6", "14"]
},
{
"stopId": 3590,
@@ -3945,10 +2866,7 @@
},
"latitude": 42.204458432,
"longitude": -8.690765895,
- "lines": [
- "6",
- "14"
- ]
+ "lines": ["6", "14"]
},
{
"stopId": 3600,
@@ -3957,9 +2875,7 @@
},
"latitude": 42.21246424,
"longitude": -8.697218847,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3610,
@@ -3968,10 +2884,7 @@
},
"latitude": 42.204446407,
"longitude": -8.68809021,
- "lines": [
- "6",
- "14"
- ]
+ "lines": ["6", "14"]
},
{
"stopId": 3620,
@@ -3980,9 +2893,7 @@
},
"latitude": 42.202562995,
"longitude": -8.685437577,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3630,
@@ -3991,10 +2902,7 @@
},
"latitude": 42.20274418,
"longitude": -8.684443742,
- "lines": [
- "6",
- "14"
- ]
+ "lines": ["6", "14"]
},
{
"stopId": 3640,
@@ -4003,9 +2911,7 @@
},
"latitude": 42.197359418,
"longitude": -8.688113004,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3650,
@@ -4014,9 +2920,7 @@
},
"latitude": 42.199275919,
"longitude": -8.689032944,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3660,
@@ -4025,9 +2929,7 @@
},
"latitude": 42.212227656,
"longitude": -8.697028614,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3670,
@@ -4036,9 +2938,7 @@
},
"latitude": 42.194968863,
"longitude": -8.689201981,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3680,
@@ -4047,9 +2947,7 @@
},
"latitude": 42.211144971,
"longitude": -8.69652789,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3690,
@@ -4058,9 +2956,7 @@
},
"latitude": 42.210947345,
"longitude": -8.69627482,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3700,
@@ -4069,9 +2965,7 @@
},
"latitude": 42.194055385,
"longitude": -8.692079677,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3710,
@@ -4080,9 +2974,7 @@
},
"latitude": 42.193846109,
"longitude": -8.69200489,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3720,
@@ -4091,9 +2983,7 @@
},
"latitude": 42.1948986,
"longitude": -8.689213754,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3730,
@@ -4102,9 +2992,7 @@
},
"latitude": 42.199203404,
"longitude": -8.688880116,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3740,
@@ -4113,12 +3001,7 @@
},
"latitude": 42.197431882,
"longitude": -8.790144971,
- "lines": [
- "C3d",
- "4A",
- "4C",
- "10"
- ]
+ "lines": ["C3d", "4A", "4C", "10"]
},
{
"stopId": 3750,
@@ -4127,10 +3010,7 @@
},
"latitude": 42.193128934,
"longitude": -8.797957944,
- "lines": [
- "10",
- "11"
- ]
+ "lines": ["10", "11"]
},
{
"stopId": 3760,
@@ -4139,10 +3019,7 @@
},
"latitude": 42.1957321,
"longitude": -8.795211362,
- "lines": [
- "10",
- "11"
- ]
+ "lines": ["10", "11"]
},
{
"stopId": 3770,
@@ -4151,11 +3028,7 @@
},
"latitude": 42.1950348,
"longitude": -8.795701844,
- "lines": [
- "C3d",
- "10",
- "11"
- ]
+ "lines": ["C3d", "10", "11"]
},
{
"stopId": 3780,
@@ -4164,11 +3037,7 @@
},
"latitude": 42.193041793,
"longitude": -8.797590453,
- "lines": [
- "C3d",
- "10",
- "11"
- ]
+ "lines": ["C3d", "10", "11"]
},
{
"stopId": 3790,
@@ -4177,12 +3046,7 @@
},
"latitude": 42.201898697,
"longitude": -8.781706742,
- "lines": [
- "C3d",
- "4A",
- "4C",
- "10"
- ]
+ "lines": ["C3d", "4A", "4C", "10"]
},
{
"stopId": 3800,
@@ -4191,10 +3055,7 @@
},
"latitude": 42.199639519,
"longitude": -8.785727373,
- "lines": [
- "4C",
- "10"
- ]
+ "lines": ["4C", "10"]
},
{
"stopId": 3810,
@@ -4203,12 +3064,7 @@
},
"latitude": 42.200106486,
"longitude": -8.785121194,
- "lines": [
- "C3d",
- "4A",
- "4C",
- "10"
- ]
+ "lines": ["C3d", "4A", "4C", "10"]
},
{
"stopId": 3820,
@@ -4217,9 +3073,7 @@
},
"latitude": 42.182659954,
"longitude": -8.699663442,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 3830,
@@ -4228,9 +3082,7 @@
},
"latitude": 42.180635405,
"longitude": -8.696958243,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 3840,
@@ -4239,9 +3091,7 @@
},
"latitude": 42.181019011,
"longitude": -8.696918009,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 3850,
@@ -4250,10 +3100,7 @@
},
"latitude": 42.167933917,
"longitude": -8.692758811,
- "lines": [
- "A",
- "U1"
- ]
+ "lines": ["A", "U1"]
},
{
"stopId": 3860,
@@ -4262,10 +3109,7 @@
},
"latitude": 42.168248021,
"longitude": -8.692608608,
- "lines": [
- "A",
- "U1"
- ]
+ "lines": ["A", "U1"]
},
{
"stopId": 3870,
@@ -4274,9 +3118,7 @@
},
"latitude": 42.182749988,
"longitude": -8.699953254,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 3880,
@@ -4285,9 +3127,7 @@
},
"latitude": 42.194829735,
"longitude": -8.699040324,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3890,
@@ -4296,10 +3136,7 @@
},
"latitude": 42.193625246,
"longitude": -8.7014263,
- "lines": [
- "6",
- "27"
- ]
+ "lines": ["6", "27"]
},
{
"stopId": 3900,
@@ -4308,10 +3145,7 @@
},
"latitude": 42.19232927,
"longitude": -8.704749414,
- "lines": [
- "6",
- "27"
- ]
+ "lines": ["6", "27"]
},
{
"stopId": 3910,
@@ -4320,9 +3154,7 @@
},
"latitude": 42.195404022,
"longitude": -8.695794851,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 3920,
@@ -4331,10 +3163,7 @@
},
"latitude": 42.195725689,
"longitude": -8.697154293,
- "lines": [
- "6",
- "27"
- ]
+ "lines": ["6", "27"]
},
{
"stopId": 3930,
@@ -4343,10 +3172,7 @@
},
"latitude": 42.19287831,
"longitude": -8.703506202,
- "lines": [
- "6",
- "27"
- ]
+ "lines": ["6", "27"]
},
{
"stopId": 3940,
@@ -4355,9 +3181,7 @@
},
"latitude": 42.196165214,
"longitude": -8.759890011,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 3950,
@@ -4366,9 +3190,7 @@
},
"latitude": 42.196014193,
"longitude": -8.759919516,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 3960,
@@ -4377,14 +3199,7 @@
},
"latitude": 42.213984907,
"longitude": -8.682160511,
- "lines": [
- "12A",
- "12B",
- "13",
- "15B",
- "15C",
- "31"
- ]
+ "lines": ["12A", "12B", "13", "15B", "15C", "31"]
},
{
"stopId": 3970,
@@ -4393,12 +3208,7 @@
},
"latitude": 42.215872123,
"longitude": -8.679765298,
- "lines": [
- "12B",
- "15B",
- "15C",
- "U2"
- ]
+ "lines": ["12B", "15B", "15C", "U2"]
},
{
"stopId": 3980,
@@ -4407,14 +3217,7 @@
},
"latitude": 42.21620386,
"longitude": -8.681570425,
- "lines": [
- "12A",
- "12B",
- "13",
- "15B",
- "15C",
- "31"
- ]
+ "lines": ["12A", "12B", "13", "15B", "15C", "31"]
},
{
"stopId": 4000,
@@ -4423,9 +3226,7 @@
},
"latitude": 42.182434997,
"longitude": -8.764713761,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 4010,
@@ -4434,9 +3235,7 @@
},
"latitude": 42.184148566,
"longitude": -8.767237312,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 4020,
@@ -4445,9 +3244,7 @@
},
"latitude": 42.187056187,
"longitude": -8.769605703,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 4030,
@@ -4456,9 +3253,7 @@
},
"latitude": 42.184118753,
"longitude": -8.767049558,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 4040,
@@ -4467,9 +3262,7 @@
},
"latitude": 42.18661248,
"longitude": -8.769574881,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 4050,
@@ -4478,9 +3271,7 @@
},
"latitude": 42.182111026,
"longitude": -8.76479691,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 4060,
@@ -4489,9 +3280,7 @@
},
"latitude": 42.164326088,
"longitude": -8.716892619,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4070,
@@ -4500,9 +3289,7 @@
},
"latitude": 42.162254659,
"longitude": -8.713740793,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4080,
@@ -4511,9 +3298,7 @@
},
"latitude": 42.162252671,
"longitude": -8.71400365,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4090,
@@ -4522,9 +3307,7 @@
},
"latitude": 42.170369621,
"longitude": -8.708506123,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4100,
@@ -4533,9 +3316,7 @@
},
"latitude": 42.16978602,
"longitude": -8.708967287,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4110,
@@ -4544,9 +3325,7 @@
},
"latitude": 42.165331611,
"longitude": -8.714862589,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4120,
@@ -4555,9 +3334,7 @@
},
"latitude": 42.166399713,
"longitude": -8.711237684,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4130,
@@ -4566,9 +3343,7 @@
},
"latitude": 42.16561193,
"longitude": -8.714589004,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4140,
@@ -4577,9 +3352,7 @@
},
"latitude": 42.166208944,
"longitude": -8.711992518,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4150,
@@ -4588,11 +3361,7 @@
},
"latitude": 42.217620909,
"longitude": -8.712429612,
- "lines": [
- "18A",
- "18B",
- "18H"
- ]
+ "lines": ["18A", "18B", "18H"]
},
{
"stopId": 4160,
@@ -4601,9 +3370,7 @@
},
"latitude": 42.217849364,
"longitude": -8.710994711,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 4170,
@@ -4612,11 +3379,7 @@
},
"latitude": 42.217345186,
"longitude": -8.713011334,
- "lines": [
- "18A",
- "18B",
- "18H"
- ]
+ "lines": ["18A", "18B", "18H"]
},
{
"stopId": 4200,
@@ -4625,10 +3388,7 @@
},
"latitude": 42.215236994,
"longitude": -8.707384971,
- "lines": [
- "14",
- "18A"
- ]
+ "lines": ["14", "18A"]
},
{
"stopId": 4210,
@@ -4637,10 +3397,7 @@
},
"latitude": 42.212141078,
"longitude": -8.704563545,
- "lines": [
- "14",
- "18A"
- ]
+ "lines": ["14", "18A"]
},
{
"stopId": 4220,
@@ -4649,10 +3406,7 @@
},
"latitude": 42.213737557,
"longitude": -8.706283115,
- "lines": [
- "14",
- "18A"
- ]
+ "lines": ["14", "18A"]
},
{
"stopId": 4230,
@@ -4661,10 +3415,7 @@
},
"latitude": 42.215373761,
"longitude": -8.707378349,
- "lines": [
- "14",
- "18A"
- ]
+ "lines": ["14", "18A"]
},
{
"stopId": 4240,
@@ -4673,10 +3424,7 @@
},
"latitude": 42.212378349,
"longitude": -8.704729584,
- "lines": [
- "14",
- "18A"
- ]
+ "lines": ["14", "18A"]
},
{
"stopId": 4250,
@@ -4685,10 +3433,7 @@
},
"latitude": 42.213377597,
"longitude": -8.70601168,
- "lines": [
- "14",
- "18A"
- ]
+ "lines": ["14", "18A"]
},
{
"stopId": 4280,
@@ -4697,11 +3442,7 @@
},
"latitude": 42.224507337,
"longitude": -8.713465538,
- "lines": [
- "14",
- "18B",
- "18H"
- ]
+ "lines": ["14", "18B", "18H"]
},
{
"stopId": 4290,
@@ -4710,12 +3451,7 @@
},
"latitude": 42.227785739,
"longitude": -8.719460889,
- "lines": [
- "14",
- "18A",
- "18B",
- "18H"
- ]
+ "lines": ["14", "18A", "18B", "18H"]
},
{
"stopId": 4300,
@@ -4724,11 +3460,7 @@
},
"latitude": 42.22278924,
"longitude": -8.711754289,
- "lines": [
- "14",
- "18B",
- "18H"
- ]
+ "lines": ["14", "18B", "18H"]
},
{
"stopId": 4310,
@@ -4737,11 +3469,7 @@
},
"latitude": 42.222713762,
"longitude": -8.711555806,
- "lines": [
- "14",
- "18B",
- "18H"
- ]
+ "lines": ["14", "18B", "18H"]
},
{
"stopId": 4320,
@@ -4750,11 +3478,7 @@
},
"latitude": 42.227716225,
"longitude": -8.719750568,
- "lines": [
- "14",
- "18B",
- "18H"
- ]
+ "lines": ["14", "18B", "18H"]
},
{
"stopId": 4330,
@@ -4763,12 +3487,7 @@
},
"latitude": 42.226463146,
"longitude": -8.71614062,
- "lines": [
- "14",
- "18A",
- "18B",
- "18H"
- ]
+ "lines": ["14", "18A", "18B", "18H"]
},
{
"stopId": 4340,
@@ -4777,11 +3496,7 @@
},
"latitude": 42.226112503,
"longitude": -8.715718376,
- "lines": [
- "14",
- "18B",
- "18H"
- ]
+ "lines": ["14", "18B", "18H"]
},
{
"stopId": 4350,
@@ -4790,11 +3505,7 @@
},
"latitude": 42.224562952,
"longitude": -8.713390437,
- "lines": [
- "14",
- "18B",
- "18H"
- ]
+ "lines": ["14", "18B", "18H"]
},
{
"stopId": 4440,
@@ -4803,9 +3514,7 @@
},
"latitude": 42.183275038,
"longitude": -8.742437444,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 4450,
@@ -4814,9 +3523,7 @@
},
"latitude": 42.185081179,
"longitude": -8.748029634,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 4460,
@@ -4825,9 +3532,7 @@
},
"latitude": 42.18366712,
"longitude": -8.744402777,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 4490,
@@ -4836,9 +3541,7 @@
},
"latitude": 42.187522648,
"longitude": -8.772977937,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 4500,
@@ -4847,9 +3550,7 @@
},
"latitude": 42.188761213,
"longitude": -8.775973652,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 4510,
@@ -4858,9 +3559,7 @@
},
"latitude": 42.187542924,
"longitude": -8.772887753,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 4520,
@@ -4869,9 +3568,7 @@
},
"latitude": 42.175884385,
"longitude": -8.670789023,
- "lines": [
- "15C"
- ]
+ "lines": ["15C"]
},
{
"stopId": 4530,
@@ -4880,9 +3577,7 @@
},
"latitude": 42.199681015,
"longitude": -8.668860289,
- "lines": [
- "15C"
- ]
+ "lines": ["15C"]
},
{
"stopId": 4540,
@@ -4891,9 +3586,7 @@
},
"latitude": 42.181370416,
"longitude": -8.667861084,
- "lines": [
- "15C"
- ]
+ "lines": ["15C"]
},
{
"stopId": 4550,
@@ -4902,10 +3595,7 @@
},
"latitude": 42.199945182,
"longitude": -8.669085873,
- "lines": [
- "15B",
- "15C"
- ]
+ "lines": ["15B", "15C"]
},
{
"stopId": 4560,
@@ -4914,9 +3604,7 @@
},
"latitude": 42.177017792,
"longitude": -8.721519832,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4570,
@@ -4925,9 +3613,7 @@
},
"latitude": 42.183987864,
"longitude": -8.724154939,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4580,
@@ -4936,9 +3622,7 @@
},
"latitude": 42.180249473,
"longitude": -8.721850007,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4590,
@@ -4947,9 +3631,7 @@
},
"latitude": 42.180670846,
"longitude": -8.721533506,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4600,
@@ -4958,9 +3640,7 @@
},
"latitude": 42.176419487,
"longitude": -8.72197849,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4610,
@@ -4969,9 +3649,7 @@
},
"latitude": 42.172481228,
"longitude": -8.723905842,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4620,
@@ -4980,9 +3658,7 @@
},
"latitude": 42.172330151,
"longitude": -8.723766367,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4630,
@@ -4991,9 +3667,7 @@
},
"latitude": 42.165721529,
"longitude": -8.720146278,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4640,
@@ -5002,9 +3676,7 @@
},
"latitude": 42.18659932,
"longitude": -8.719619913,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4650,
@@ -5013,9 +3685,7 @@
},
"latitude": 42.186641056,
"longitude": -8.719853265,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4660,
@@ -5024,9 +3694,7 @@
},
"latitude": 42.183997801,
"longitude": -8.723857214,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 4670,
@@ -5035,9 +3703,7 @@
},
"latitude": 42.193836069,
"longitude": -8.776441689,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 4680,
@@ -5046,9 +3712,7 @@
},
"latitude": 42.19429691,
"longitude": -8.786574405,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 4690,
@@ -5057,9 +3721,7 @@
},
"latitude": 42.196307191,
"longitude": -8.790777973,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 4700,
@@ -5068,9 +3730,7 @@
},
"latitude": 42.194014721,
"longitude": -8.777055245,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 4710,
@@ -5079,9 +3739,7 @@
},
"latitude": 42.194064592,
"longitude": -8.781224067,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 4720,
@@ -5090,9 +3748,7 @@
},
"latitude": 42.193937416,
"longitude": -8.781634173,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 4730,
@@ -5101,9 +3757,7 @@
},
"latitude": 42.19405266,
"longitude": -8.78551292,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 4740,
@@ -5112,9 +3766,7 @@
},
"latitude": 42.196595321,
"longitude": -8.791019372,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 4750,
@@ -5123,13 +3775,7 @@
},
"latitude": 42.213983883,
"longitude": -8.697464269,
- "lines": [
- "12A",
- "12B",
- "13",
- "U2",
- "H3"
- ]
+ "lines": ["12A", "12B", "13", "U2", "H3"]
},
{
"stopId": 4760,
@@ -5138,13 +3784,7 @@
},
"latitude": 42.216359908,
"longitude": -8.693040769,
- "lines": [
- "12A",
- "12B",
- "13",
- "U2",
- "H3"
- ]
+ "lines": ["12A", "12B", "13", "U2", "H3"]
},
{
"stopId": 4770,
@@ -5153,13 +3793,7 @@
},
"latitude": 42.219822923,
"longitude": -8.684198247,
- "lines": [
- "12A",
- "12B",
- "13",
- "31",
- "U2"
- ]
+ "lines": ["12A", "12B", "13", "31", "U2"]
},
{
"stopId": 4780,
@@ -5168,13 +3802,7 @@
},
"latitude": 42.220845201,
"longitude": -8.680581909,
- "lines": [
- "12A",
- "12B",
- "13",
- "31",
- "U2"
- ]
+ "lines": ["12A", "12B", "13", "31", "U2"]
},
{
"stopId": 4790,
@@ -5183,12 +3811,7 @@
},
"latitude": 42.220436017,
"longitude": -8.683690589,
- "lines": [
- "12A",
- "12B",
- "13",
- "31"
- ]
+ "lines": ["12A", "12B", "13", "31"]
},
{
"stopId": 4800,
@@ -5197,13 +3820,7 @@
},
"latitude": 42.218049288,
"longitude": -8.679899408,
- "lines": [
- "12A",
- "12B",
- "13",
- "31",
- "U2"
- ]
+ "lines": ["12A", "12B", "13", "31", "U2"]
},
{
"stopId": 4810,
@@ -5212,12 +3829,7 @@
},
"latitude": 42.21827574,
"longitude": -8.679588272,
- "lines": [
- "12A",
- "12B",
- "13",
- "31"
- ]
+ "lines": ["12A", "12B", "13", "31"]
},
{
"stopId": 4820,
@@ -5226,12 +3838,7 @@
},
"latitude": 42.216687676,
"longitude": -8.693917852,
- "lines": [
- "12A",
- "12B",
- "13",
- "H3"
- ]
+ "lines": ["12A", "12B", "13", "H3"]
},
{
"stopId": 4830,
@@ -5240,12 +3847,7 @@
},
"latitude": 42.218719793,
"longitude": -8.690012555,
- "lines": [
- "12A",
- "12B",
- "13",
- "H3"
- ]
+ "lines": ["12A", "12B", "13", "H3"]
},
{
"stopId": 4840,
@@ -5254,13 +3856,7 @@
},
"latitude": 42.218745617,
"longitude": -8.689009409,
- "lines": [
- "12A",
- "12B",
- "13",
- "U2",
- "H3"
- ]
+ "lines": ["12A", "12B", "13", "U2", "H3"]
},
{
"stopId": 4850,
@@ -5269,11 +3865,7 @@
},
"latitude": 42.216448197,
"longitude": -8.68163748,
- "lines": [
- "12A",
- "13",
- "31"
- ]
+ "lines": ["12A", "13", "31"]
},
{
"stopId": 4860,
@@ -5282,10 +3874,7 @@
},
"latitude": 42.182744465,
"longitude": -8.70286123,
- "lines": [
- "A",
- "6"
- ]
+ "lines": ["A", "6"]
},
{
"stopId": 4870,
@@ -5294,11 +3883,7 @@
},
"latitude": 42.192029809,
"longitude": -8.712623715,
- "lines": [
- "A",
- "27",
- "H3"
- ]
+ "lines": ["A", "27", "H3"]
},
{
"stopId": 4880,
@@ -5307,10 +3892,7 @@
},
"latitude": 42.188021902,
"longitude": -8.711457595,
- "lines": [
- "A",
- "H3"
- ]
+ "lines": ["A", "H3"]
},
{
"stopId": 4890,
@@ -5319,10 +3901,7 @@
},
"latitude": 42.186610014,
"longitude": -8.710023944,
- "lines": [
- "A",
- "6"
- ]
+ "lines": ["A", "6"]
},
{
"stopId": 4900,
@@ -5331,11 +3910,7 @@
},
"latitude": 42.188304845,
"longitude": -8.711474749,
- "lines": [
- "A",
- "27",
- "H3"
- ]
+ "lines": ["A", "27", "H3"]
},
{
"stopId": 4910,
@@ -5344,10 +3919,7 @@
},
"latitude": 42.19205763,
"longitude": -8.712722956,
- "lines": [
- "A",
- "H3"
- ]
+ "lines": ["A", "H3"]
},
{
"stopId": 4920,
@@ -5356,10 +3928,7 @@
},
"latitude": 42.186610342,
"longitude": -8.709937804,
- "lines": [
- "A",
- "6"
- ]
+ "lines": ["A", "6"]
},
{
"stopId": 4930,
@@ -5368,10 +3937,7 @@
},
"latitude": 42.246018558,
"longitude": -8.669287042,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 4940,
@@ -5380,10 +3946,7 @@
},
"latitude": 42.245450719,
"longitude": -8.672406783,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 4960,
@@ -5392,9 +3955,7 @@
},
"latitude": 42.256210875,
"longitude": -8.696882723,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 4970,
@@ -5403,9 +3964,7 @@
},
"latitude": 42.255883312,
"longitude": -8.696812986,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 4980,
@@ -5414,9 +3973,7 @@
},
"latitude": 42.257539061,
"longitude": -8.697019814,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 5000,
@@ -5425,9 +3982,7 @@
},
"latitude": 42.250121395,
"longitude": -8.696122376,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 5010,
@@ -5436,9 +3991,7 @@
},
"latitude": 42.254169539,
"longitude": -8.697752273,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 5020,
@@ -5447,9 +4000,7 @@
},
"latitude": 42.254104511,
"longitude": -8.697655199,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 5030,
@@ -5458,9 +4009,7 @@
},
"latitude": 42.272502528,
"longitude": -8.664787252,
- "lines": [
- "C3i"
- ]
+ "lines": ["C3i"]
},
{
"stopId": 5040,
@@ -5469,9 +4018,7 @@
},
"latitude": 42.222543586,
"longitude": -8.717809812,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 5060,
@@ -5480,11 +4027,7 @@
},
"latitude": 42.212676247,
"longitude": -8.739585545,
- "lines": [
- "16",
- "23",
- "N4"
- ]
+ "lines": ["16", "23", "N4"]
},
{
"stopId": 5070,
@@ -5493,10 +4036,7 @@
},
"latitude": 42.220535836,
"longitude": -8.74141599,
- "lines": [
- "C3i",
- "5B"
- ]
+ "lines": ["C3i", "5B"]
},
{
"stopId": 5090,
@@ -5505,10 +4045,7 @@
},
"latitude": 42.220359068,
"longitude": -8.738861999,
- "lines": [
- "C3i",
- "5B"
- ]
+ "lines": ["C3i", "5B"]
},
{
"stopId": 5120,
@@ -5517,11 +4054,7 @@
},
"latitude": 42.204935234,
"longitude": -8.722453969,
- "lines": [
- "18B",
- "18H",
- "27"
- ]
+ "lines": ["18B", "18H", "27"]
},
{
"stopId": 5140,
@@ -5530,10 +4063,7 @@
},
"latitude": 42.207336295,
"longitude": -8.72129506,
- "lines": [
- "18B",
- "18H"
- ]
+ "lines": ["18B", "18H"]
},
{
"stopId": 5160,
@@ -5542,11 +4072,7 @@
},
"latitude": 42.204783634,
"longitude": -8.722664062,
- "lines": [
- "18B",
- "18H",
- "27"
- ]
+ "lines": ["18B", "18H", "27"]
},
{
"stopId": 5170,
@@ -5555,10 +4081,7 @@
},
"latitude": 42.227529644,
"longitude": -8.66169041,
- "lines": [
- "15A",
- "25"
- ]
+ "lines": ["15A", "25"]
},
{
"stopId": 5180,
@@ -5567,10 +4090,7 @@
},
"latitude": 42.224562288,
"longitude": -8.66579419,
- "lines": [
- "15A",
- "25"
- ]
+ "lines": ["15A", "25"]
},
{
"stopId": 5190,
@@ -5579,10 +4099,7 @@
},
"latitude": 42.226051942,
"longitude": -8.663629647,
- "lines": [
- "15A",
- "25"
- ]
+ "lines": ["15A", "25"]
},
{
"stopId": 5200,
@@ -5591,10 +4108,7 @@
},
"latitude": 42.227533616,
"longitude": -8.661561664,
- "lines": [
- "15A",
- "25"
- ]
+ "lines": ["15A", "25"]
},
{
"stopId": 5220,
@@ -5603,10 +4117,7 @@
},
"latitude": 42.228984217,
"longitude": -8.658438326,
- "lines": [
- "15A",
- "25"
- ]
+ "lines": ["15A", "25"]
},
{
"stopId": 5230,
@@ -5615,10 +4126,7 @@
},
"latitude": 42.230261894,
"longitude": -8.653683012,
- "lines": [
- "15A",
- "25"
- ]
+ "lines": ["15A", "25"]
},
{
"stopId": 5250,
@@ -5627,10 +4135,7 @@
},
"latitude": 42.223048763,
"longitude": -8.667374011,
- "lines": [
- "15A",
- "25"
- ]
+ "lines": ["15A", "25"]
},
{
"stopId": 5260,
@@ -5639,10 +4144,7 @@
},
"latitude": 42.222838218,
"longitude": -8.667795118,
- "lines": [
- "15A",
- "25"
- ]
+ "lines": ["15A", "25"]
},
{
"stopId": 5270,
@@ -5651,10 +4153,7 @@
},
"latitude": 42.224367639,
"longitude": -8.665989991,
- "lines": [
- "15A",
- "25"
- ]
+ "lines": ["15A", "25"]
},
{
"stopId": 5280,
@@ -5663,10 +4162,7 @@
},
"latitude": 42.225940716,
"longitude": -8.663830813,
- "lines": [
- "15A",
- "25"
- ]
+ "lines": ["15A", "25"]
},
{
"stopId": 5290,
@@ -5675,11 +4171,7 @@
},
"latitude": 42.215060936,
"longitude": -8.741309568,
- "lines": [
- "5A",
- "11",
- "29"
- ]
+ "lines": ["5A", "11", "29"]
},
{
"stopId": 5300,
@@ -5688,11 +4180,7 @@
},
"latitude": 42.214827343,
"longitude": -8.741319027,
- "lines": [
- "5A",
- "11",
- "29"
- ]
+ "lines": ["5A", "11", "29"]
},
{
"stopId": 5310,
@@ -5701,11 +4189,7 @@
},
"latitude": 42.208024308,
"longitude": -8.750412985,
- "lines": [
- "5A",
- "11",
- "29"
- ]
+ "lines": ["5A", "11", "29"]
},
{
"stopId": 5320,
@@ -5714,11 +4198,7 @@
},
"latitude": 42.213244058,
"longitude": -8.743657913,
- "lines": [
- "5A",
- "11",
- "29"
- ]
+ "lines": ["5A", "11", "29"]
},
{
"stopId": 5330,
@@ -5727,11 +4207,7 @@
},
"latitude": 42.220228436,
"longitude": -8.733426296,
- "lines": [
- "5A",
- "11",
- "29"
- ]
+ "lines": ["5A", "11", "29"]
},
{
"stopId": 5340,
@@ -5740,11 +4216,7 @@
},
"latitude": 42.208621114,
"longitude": -8.749572184,
- "lines": [
- "5A",
- "11",
- "29"
- ]
+ "lines": ["5A", "11", "29"]
},
{
"stopId": 5350,
@@ -5753,11 +4225,7 @@
},
"latitude": 42.216779248,
"longitude": -8.738705143,
- "lines": [
- "5A",
- "11",
- "29"
- ]
+ "lines": ["5A", "11", "29"]
},
{
"stopId": 5360,
@@ -5766,11 +4234,7 @@
},
"latitude": 42.212804215,
"longitude": -8.744506761,
- "lines": [
- "5A",
- "11",
- "29"
- ]
+ "lines": ["5A", "11", "29"]
},
{
"stopId": 5370,
@@ -5779,11 +4243,7 @@
},
"latitude": 42.216928527,
"longitude": -8.738268035,
- "lines": [
- "5A",
- "11",
- "29"
- ]
+ "lines": ["5A", "11", "29"]
},
{
"stopId": 5380,
@@ -5792,11 +4252,7 @@
},
"latitude": 42.219743053,
"longitude": -8.734322187,
- "lines": [
- "5A",
- "11",
- "29"
- ]
+ "lines": ["5A", "11", "29"]
},
{
"stopId": 5390,
@@ -5805,9 +4261,7 @@
},
"latitude": 42.179556959,
"longitude": -8.761854527,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 5400,
@@ -5816,13 +4270,7 @@
},
"latitude": 42.213518168,
"longitude": -8.737719785,
- "lines": [
- "7",
- "12B",
- "17",
- "N4",
- "H1"
- ]
+ "lines": ["7", "12B", "17", "N4", "H1"]
},
{
"stopId": 5410,
@@ -5831,17 +4279,7 @@
},
"latitude": 42.219689698,
"longitude": -8.733384686,
- "lines": [
- "A",
- "16",
- "23",
- "N4",
- "U1",
- "H1",
- "H",
- "LZH",
- "PSA 1"
- ]
+ "lines": ["A", "16", "23", "N4", "U1", "H1", "H", "LZH", "PSA 1"]
},
{
"stopId": 5420,
@@ -5850,13 +4288,7 @@
},
"latitude": 42.220297406,
"longitude": -8.732924981,
- "lines": [
- "7",
- "12B",
- "17",
- "N4",
- "H1"
- ]
+ "lines": ["7", "12B", "17", "N4", "H1"]
},
{
"stopId": 5430,
@@ -5865,17 +4297,7 @@
},
"latitude": 42.217381871,
"longitude": -8.734669814,
- "lines": [
- "A",
- "16",
- "23",
- "N4",
- "U1",
- "H1",
- "H",
- "LZH",
- "PSA 1"
- ]
+ "lines": ["A", "16", "23", "N4", "U1", "H1", "H", "LZH", "PSA 1"]
},
{
"stopId": 5440,
@@ -5884,13 +4306,7 @@
},
"latitude": 42.217288508,
"longitude": -8.73454375,
- "lines": [
- "7",
- "12B",
- "17",
- "N4",
- "H1"
- ]
+ "lines": ["7", "12B", "17", "N4", "H1"]
},
{
"stopId": 5450,
@@ -5899,16 +4315,7 @@
},
"latitude": 42.215348678,
"longitude": -8.736273638,
- "lines": [
- "A",
- "16",
- "23",
- "N4",
- "H1",
- "H",
- "LZH",
- "PSA 1"
- ]
+ "lines": ["A", "16", "23", "N4", "H1", "H", "LZH", "PSA 1"]
},
{
"stopId": 5460,
@@ -5917,13 +4324,7 @@
},
"latitude": 42.215301002,
"longitude": -8.736123434,
- "lines": [
- "7",
- "12B",
- "17",
- "N4",
- "H1"
- ]
+ "lines": ["7", "12B", "17", "N4", "H1"]
},
{
"stopId": 5470,
@@ -5932,17 +4333,7 @@
},
"latitude": 42.21315264,
"longitude": -8.738470803,
- "lines": [
- "A",
- "16",
- "23",
- "N4",
- "U1",
- "H1",
- "H",
- "LZH",
- "PSA 1"
- ]
+ "lines": ["A", "16", "23", "N4", "U1", "H1", "H", "LZH", "PSA 1"]
},
{
"stopId": 5480,
@@ -5951,9 +4342,7 @@
},
"latitude": 42.186179757,
"longitude": -8.748888329,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 5490,
@@ -5962,15 +4351,7 @@
},
"latitude": 42.241557555,
"longitude": -8.707094861,
- "lines": [
- "C3d",
- "C3i",
- "5B",
- "10",
- "17",
- "N1",
- "H3"
- ]
+ "lines": ["C3d", "C3i", "5B", "10", "17", "N1", "H3"]
},
{
"stopId": 5500,
@@ -5979,16 +4360,7 @@
},
"latitude": 42.24178025,
"longitude": -8.706720936,
- "lines": [
- "C3d",
- "5B",
- "10",
- "17",
- "31",
- "H2",
- "H3",
- "PSA 1"
- ]
+ "lines": ["C3d", "5B", "10", "17", "31", "H2", "H3", "PSA 1"]
},
{
"stopId": 5510,
@@ -5997,14 +4369,7 @@
},
"latitude": 42.238290358,
"longitude": -8.71014103,
- "lines": [
- "C3d",
- "C3i",
- "5B",
- "10",
- "17",
- "N1"
- ]
+ "lines": ["C3d", "C3i", "5B", "10", "17", "N1"]
},
{
"stopId": 5520,
@@ -6045,14 +4410,7 @@
},
"latitude": 42.23720456,
"longitude": -8.718680736,
- "lines": [
- "C3d",
- "5B",
- "10",
- "17",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "5B", "10", "17", "H2", "PSA 1"]
},
{
"stopId": 5540,
@@ -6061,17 +4419,7 @@
},
"latitude": 42.236759685,
"longitude": -8.716384581,
- "lines": [
- "C3d",
- "A",
- "5B",
- "10",
- "16",
- "17",
- "24",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "A", "5B", "10", "16", "17", "24", "H2", "PSA 1"]
},
{
"stopId": 5560,
@@ -6080,17 +4428,7 @@
},
"latitude": 42.236896919,
"longitude": -8.712902905,
- "lines": [
- "C3d",
- "A",
- "5B",
- "10",
- "16",
- "17",
- "24",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "A", "5B", "10", "16", "17", "24", "H2", "PSA 1"]
},
{
"stopId": 5570,
@@ -6099,14 +4437,7 @@
},
"latitude": 42.237003397,
"longitude": -8.713586994,
- "lines": [
- "C3d",
- "C3i",
- "5B",
- "10",
- "17",
- "N1"
- ]
+ "lines": ["C3d", "C3i", "5B", "10", "17", "N1"]
},
{
"stopId": 5580,
@@ -6115,14 +4446,7 @@
},
"latitude": 42.238267348,
"longitude": -8.709873166,
- "lines": [
- "C3d",
- "5B",
- "10",
- "17",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "5B", "10", "17", "H2", "PSA 1"]
},
{
"stopId": 5590,
@@ -6131,11 +4455,7 @@
},
"latitude": 42.213057463,
"longitude": -8.670479203,
- "lines": [
- "12B",
- "15B",
- "15C"
- ]
+ "lines": ["12B", "15B", "15C"]
},
{
"stopId": 5600,
@@ -6144,17 +4464,7 @@
},
"latitude": 42.225140059,
"longitude": -8.72184818,
- "lines": [
- "C3i",
- "7",
- "11",
- "13",
- "15A",
- "16",
- "23",
- "29",
- "H2"
- ]
+ "lines": ["C3i", "7", "11", "13", "15A", "16", "23", "29", "H2"]
},
{
"stopId": 5610,
@@ -6186,17 +4496,7 @@
},
"latitude": 42.222321607,
"longitude": -8.726440421,
- "lines": [
- "C3d",
- "13",
- "15A",
- "23",
- "29",
- "U1",
- "U2",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "13", "15A", "23", "29", "U1", "U2", "H2", "PSA 1"]
},
{
"stopId": 5630,
@@ -6205,19 +4505,7 @@
},
"latitude": 42.222790356,
"longitude": -8.724940076,
- "lines": [
- "C3i",
- "7",
- "11",
- "13",
- "15A",
- "16",
- "23",
- "29",
- "U1",
- "U2",
- "H2"
- ]
+ "lines": ["C3i", "7", "11", "13", "15A", "16", "23", "29", "U1", "U2", "H2"]
},
{
"stopId": 5640,
@@ -6226,16 +4514,7 @@
},
"latitude": 42.220868033,
"longitude": -8.730264447,
- "lines": [
- "C3d",
- "13",
- "15A",
- "23",
- "29",
- "U2",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "13", "15A", "23", "29", "U2", "H2", "PSA 1"]
},
{
"stopId": 5650,
@@ -6244,17 +4523,7 @@
},
"latitude": 42.220971136,
"longitude": -8.729196245,
- "lines": [
- "C3i",
- "7",
- "11",
- "13",
- "15A",
- "16",
- "23",
- "29",
- "H2"
- ]
+ "lines": ["C3i", "7", "11", "13", "15A", "16", "23", "29", "H2"]
},
{
"stopId": 5660,
@@ -6286,16 +4555,7 @@
},
"latitude": 42.230988893,
"longitude": -8.71867283,
- "lines": [
- "C1",
- "12A",
- "12B",
- "14",
- "18A",
- "18B",
- "18H",
- "TUR"
- ]
+ "lines": ["C1", "12A", "12B", "14", "18A", "18B", "18H", "TUR"]
},
{
"stopId": 5680,
@@ -6304,15 +4564,7 @@
},
"latitude": 42.228173802,
"longitude": -8.720267623,
- "lines": [
- "C3d",
- "13",
- "15A",
- "23",
- "29",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "13", "15A", "23", "29", "H2", "PSA 1"]
},
{
"stopId": 5690,
@@ -6321,17 +4573,7 @@
},
"latitude": 42.226868266,
"longitude": -8.720637433,
- "lines": [
- "C3i",
- "7",
- "11",
- "13",
- "15A",
- "16",
- "23",
- "29",
- "H2"
- ]
+ "lines": ["C3i", "7", "11", "13", "15A", "16", "23", "29", "H2"]
},
{
"stopId": 5700,
@@ -6340,15 +4582,7 @@
},
"latitude": 42.225325884,
"longitude": -8.722106624,
- "lines": [
- "C3d",
- "13",
- "15A",
- "23",
- "29",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "13", "15A", "23", "29", "H2", "PSA 1"]
},
{
"stopId": 5710,
@@ -6357,9 +4591,7 @@
},
"latitude": 42.23003666347398,
"longitude": -8.707266671978003,
- "lines": [
- "31"
- ]
+ "lines": ["31"]
},
{
"stopId": 5720,
@@ -6368,13 +4600,7 @@
},
"latitude": 42.23004933454558,
"longitude": -8.706947409683313,
- "lines": [
- "4C",
- "23",
- "31",
- "H2",
- "PSA 4"
- ]
+ "lines": ["4C", "23", "31", "H2", "PSA 4"]
},
{
"stopId": 5730,
@@ -6383,10 +4609,7 @@
},
"latitude": 42.227850036119314,
"longitude": -8.708105429626789,
- "lines": [
- "31",
- "H2"
- ]
+ "lines": ["31", "H2"]
},
{
"stopId": 5740,
@@ -6395,14 +4618,7 @@
},
"latitude": 42.22783722597372,
"longitude": -8.707849091551859,
- "lines": [
- "4C",
- "23",
- "31",
- "N4",
- "H2",
- "PSA 4"
- ]
+ "lines": ["4C", "23", "31", "N4", "H2", "PSA 4"]
},
{
"stopId": 5750,
@@ -6411,14 +4627,7 @@
},
"latitude": 42.225785485,
"longitude": -8.708786105,
- "lines": [
- "4C",
- "23",
- "31",
- "N4",
- "H2",
- "PSA 4"
- ]
+ "lines": ["4C", "23", "31", "N4", "H2", "PSA 4"]
},
{
"stopId": 5760,
@@ -6427,9 +4636,7 @@
},
"latitude": 42.16929549,
"longitude": -8.723249687,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 5770,
@@ -6438,9 +4645,7 @@
},
"latitude": 42.16911061,
"longitude": -8.723904146,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 5790,
@@ -6449,14 +4654,7 @@
},
"latitude": 42.214534062,
"longitude": -8.684756053,
- "lines": [
- "12A",
- "12B",
- "13",
- "15B",
- "15C",
- "31"
- ]
+ "lines": ["12A", "12B", "13", "15B", "15C", "31"]
},
{
"stopId": 5800,
@@ -6561,10 +4759,7 @@
},
"latitude": 42.201360896,
"longitude": -8.702877394,
- "lines": [
- "18A",
- "18B"
- ]
+ "lines": ["18A", "18B"]
},
{
"stopId": 5850,
@@ -6573,10 +4768,7 @@
},
"latitude": 42.201154253,
"longitude": -8.702343635,
- "lines": [
- "18A",
- "18B"
- ]
+ "lines": ["18A", "18B"]
},
{
"stopId": 5860,
@@ -6585,11 +4777,7 @@
},
"latitude": 42.21669522,
"longitude": -8.715884298,
- "lines": [
- "18A",
- "18B",
- "18H"
- ]
+ "lines": ["18A", "18B", "18H"]
},
{
"stopId": 5870,
@@ -6598,10 +4786,7 @@
},
"latitude": 42.226432697,
"longitude": -8.731262013,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 5880,
@@ -6610,11 +4795,7 @@
},
"latitude": 42.226800566,
"longitude": -8.731799623,
- "lines": [
- "5A",
- "5B",
- "12A"
- ]
+ "lines": ["5A", "5B", "12A"]
},
{
"stopId": 5890,
@@ -6623,10 +4804,7 @@
},
"latitude": 42.222420533,
"longitude": -8.731996938,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 5900,
@@ -6635,11 +4813,7 @@
},
"latitude": 42.202071034,
"longitude": -8.723541884,
- "lines": [
- "18B",
- "18H",
- "27"
- ]
+ "lines": ["18B", "18H", "27"]
},
{
"stopId": 5910,
@@ -6648,11 +4822,7 @@
},
"latitude": 42.196213336,
"longitude": -8.721136467,
- "lines": [
- "18B",
- "18H",
- "27"
- ]
+ "lines": ["18B", "18H", "27"]
},
{
"stopId": 5920,
@@ -6661,11 +4831,7 @@
},
"latitude": 42.196173594,
"longitude": -8.721023814,
- "lines": [
- "18B",
- "18H",
- "27"
- ]
+ "lines": ["18B", "18H", "27"]
},
{
"stopId": 5930,
@@ -6674,11 +4840,7 @@
},
"latitude": 42.202050775,
"longitude": -8.723454133,
- "lines": [
- "18B",
- "18H",
- "27"
- ]
+ "lines": ["18B", "18H", "27"]
},
{
"stopId": 5940,
@@ -6687,11 +4849,7 @@
},
"latitude": 42.198347336,
"longitude": -8.721488003,
- "lines": [
- "18B",
- "18H",
- "27"
- ]
+ "lines": ["18B", "18H", "27"]
},
{
"stopId": 5950,
@@ -6700,9 +4858,7 @@
},
"latitude": 42.207127325,
"longitude": -8.726636888,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 5960,
@@ -6711,9 +4867,7 @@
},
"latitude": 42.206757786,
"longitude": -8.730056705,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 5970,
@@ -6722,9 +4876,7 @@
},
"latitude": 42.206880283,
"longitude": -8.729978952,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 5980,
@@ -6733,9 +4885,7 @@
},
"latitude": 42.207198849,
"longitude": -8.726658346,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 6000,
@@ -6744,10 +4894,7 @@
},
"latitude": 42.220887532,
"longitude": -8.685059571,
- "lines": [
- "31",
- "H3"
- ]
+ "lines": ["31", "H3"]
},
{
"stopId": 6010,
@@ -6756,11 +4903,7 @@
},
"latitude": 42.223077231,
"longitude": -8.675499751,
- "lines": [
- "25",
- "31",
- "H3"
- ]
+ "lines": ["25", "31", "H3"]
},
{
"stopId": 6020,
@@ -6769,11 +4912,7 @@
},
"latitude": 42.223195307,
"longitude": -8.681872932,
- "lines": [
- "25",
- "31",
- "H3"
- ]
+ "lines": ["25", "31", "H3"]
},
{
"stopId": 6030,
@@ -6782,10 +4921,7 @@
},
"latitude": 42.220829925,
"longitude": -8.685158812,
- "lines": [
- "31",
- "H3"
- ]
+ "lines": ["31", "H3"]
},
{
"stopId": 6040,
@@ -6794,11 +4930,7 @@
},
"latitude": 42.22320325,
"longitude": -8.675213007,
- "lines": [
- "25",
- "31",
- "H3"
- ]
+ "lines": ["25", "31", "H3"]
},
{
"stopId": 6050,
@@ -6807,10 +4939,7 @@
},
"latitude": 42.19890849,
"longitude": -8.73623433,
- "lines": [
- "12B",
- "17"
- ]
+ "lines": ["12B", "17"]
},
{
"stopId": 6060,
@@ -6819,9 +4948,7 @@
},
"latitude": 42.196716802,
"longitude": -8.729966982,
- "lines": [
- "12B"
- ]
+ "lines": ["12B"]
},
{
"stopId": 6070,
@@ -6830,9 +4957,7 @@
},
"latitude": 42.199197066,
"longitude": -8.736588816,
- "lines": [
- "12B"
- ]
+ "lines": ["12B"]
},
{
"stopId": 6080,
@@ -6841,10 +4966,7 @@
},
"latitude": 42.197736144,
"longitude": -8.732267294,
- "lines": [
- "12B",
- "17"
- ]
+ "lines": ["12B", "17"]
},
{
"stopId": 6090,
@@ -6853,9 +4975,7 @@
},
"latitude": 42.197626151,
"longitude": -8.732546841,
- "lines": [
- "12B"
- ]
+ "lines": ["12B"]
},
{
"stopId": 6100,
@@ -6864,10 +4984,7 @@
},
"latitude": 42.197066521,
"longitude": -8.730468609,
- "lines": [
- "12B",
- "17"
- ]
+ "lines": ["12B", "17"]
},
{
"stopId": 6110,
@@ -6876,10 +4993,7 @@
},
"latitude": 42.243941636,
"longitude": -8.669169025,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 6130,
@@ -6888,10 +5002,7 @@
},
"latitude": 42.207132591,
"longitude": -8.706967295,
- "lines": [
- "18B",
- "H3"
- ]
+ "lines": ["18B", "H3"]
},
{
"stopId": 6140,
@@ -6900,10 +5011,7 @@
},
"latitude": 42.206925967,
"longitude": -8.707050443,
- "lines": [
- "18B",
- "H3"
- ]
+ "lines": ["18B", "H3"]
},
{
"stopId": 6150,
@@ -6912,9 +5020,7 @@
},
"latitude": 42.160616846,
"longitude": -8.691088401,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 6160,
@@ -6923,9 +5029,7 @@
},
"latitude": 42.160635942,
"longitude": -8.69145083,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 6180,
@@ -6934,10 +5038,7 @@
},
"latitude": 42.21850454,
"longitude": -8.753892634,
- "lines": [
- "C3i",
- "5B"
- ]
+ "lines": ["C3i", "5B"]
},
{
"stopId": 6187,
@@ -6946,10 +5047,7 @@
},
"latitude": 42.215244712,
"longitude": -8.74244225,
- "lines": [
- "23",
- "N4"
- ]
+ "lines": ["23", "N4"]
},
{
"stopId": 6200,
@@ -6958,11 +5056,7 @@
},
"latitude": 42.229298043,
"longitude": -8.699760249,
- "lines": [
- "6",
- "25",
- "31"
- ]
+ "lines": ["6", "25", "31"]
},
{
"stopId": 6210,
@@ -6971,15 +5065,7 @@
},
"latitude": 42.229259529,
"longitude": -8.699964485,
- "lines": [
- "4C",
- "6",
- "23",
- "25",
- "31",
- "N4",
- "PSA 4"
- ]
+ "lines": ["4C", "6", "23", "25", "31", "N4", "PSA 4"]
},
{
"stopId": 6220,
@@ -6988,9 +5074,7 @@
},
"latitude": 42.226116269,
"longitude": -8.703346362,
- "lines": [
- "31"
- ]
+ "lines": ["31"]
},
{
"stopId": 6230,
@@ -6999,9 +5083,7 @@
},
"latitude": 42.224839145,
"longitude": -8.706082215,
- "lines": [
- "31"
- ]
+ "lines": ["31"]
},
{
"stopId": 6240,
@@ -7010,9 +5092,7 @@
},
"latitude": 42.224493844,
"longitude": -8.707734948,
- "lines": [
- "31"
- ]
+ "lines": ["31"]
},
{
"stopId": 6250,
@@ -7021,13 +5101,7 @@
},
"latitude": 42.22667463,
"longitude": -8.702581423,
- "lines": [
- "4C",
- "23",
- "31",
- "N4",
- "PSA 4"
- ]
+ "lines": ["4C", "23", "31", "N4", "PSA 4"]
},
{
"stopId": 6260,
@@ -7036,10 +5110,7 @@
},
"latitude": 42.199568643,
"longitude": -8.741030554,
- "lines": [
- "12B",
- "17"
- ]
+ "lines": ["12B", "17"]
},
{
"stopId": 6280,
@@ -7048,9 +5119,7 @@
},
"latitude": 42.223843943,
"longitude": -8.65334865,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 6290,
@@ -7059,10 +5128,7 @@
},
"latitude": 42.202031781,
"longitude": -8.769502424,
- "lines": [
- "4A",
- "12A"
- ]
+ "lines": ["4A", "12A"]
},
{
"stopId": 6300,
@@ -7096,9 +5162,7 @@
},
"latitude": 42.230800582,
"longitude": -8.725954962,
- "lines": [
- "TUR"
- ]
+ "lines": ["TUR"]
},
{
"stopId": 6360,
@@ -7107,9 +5171,7 @@
},
"latitude": 42.211426266,
"longitude": -8.743166543,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 6370,
@@ -7118,9 +5180,7 @@
},
"latitude": 42.210130966,
"longitude": -8.744872428,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 6380,
@@ -7129,9 +5189,7 @@
},
"latitude": 42.211811672,
"longitude": -8.742420889,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 6390,
@@ -7140,9 +5198,7 @@
},
"latitude": 42.210204472,
"longitude": -8.74559126,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 6415,
@@ -7151,9 +5207,7 @@
},
"latitude": 42.213852214,
"longitude": -8.727322863,
- "lines": [
- "TUR"
- ]
+ "lines": ["TUR"]
},
{
"stopId": 6440,
@@ -7162,9 +5216,7 @@
},
"latitude": 42.222951208,
"longitude": -8.635051581,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 6450,
@@ -7173,12 +5225,7 @@
},
"latitude": 42.224306065,
"longitude": -8.753090783,
- "lines": [
- "C3d",
- "C3i",
- "13",
- "H"
- ]
+ "lines": ["C3d", "C3i", "13", "H"]
},
{
"stopId": 6460,
@@ -7187,10 +5234,7 @@
},
"latitude": 42.224853579,
"longitude": -8.752608542,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 6470,
@@ -7199,10 +5243,7 @@
},
"latitude": 42.228458938,
"longitude": -8.732202674,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 6480,
@@ -7211,10 +5252,7 @@
},
"latitude": 42.229149188,
"longitude": -8.731886908,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 6490,
@@ -7223,10 +5261,7 @@
},
"latitude": 42.233972514,
"longitude": -8.729963004,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 6500,
@@ -7235,10 +5270,7 @@
},
"latitude": 42.233690068,
"longitude": -8.730100174,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 6510,
@@ -7247,10 +5279,7 @@
},
"latitude": 42.230584487,
"longitude": -8.731459155,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 6520,
@@ -7259,10 +5288,7 @@
},
"latitude": 42.232285981,
"longitude": -8.730816324,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 6530,
@@ -7271,9 +5297,7 @@
},
"latitude": 42.222480852,
"longitude": -8.729812967,
- "lines": [
- "C1"
- ]
+ "lines": ["C1"]
},
{
"stopId": 6550,
@@ -7282,16 +5306,7 @@
},
"latitude": 42.229886416,
"longitude": -8.717463365,
- "lines": [
- "C3i",
- "6",
- "11",
- "15A",
- "23",
- "25",
- "28",
- "29"
- ]
+ "lines": ["C3i", "6", "11", "15A", "23", "25", "28", "29"]
},
{
"stopId": 6560,
@@ -7300,16 +5315,7 @@
},
"latitude": 42.23113801,
"longitude": -8.711696824,
- "lines": [
- "C3i",
- "6",
- "11",
- "15A",
- "23",
- "25",
- "27",
- "28"
- ]
+ "lines": ["C3i", "6", "11", "15A", "23", "25", "27", "28"]
},
{
"stopId": 6570,
@@ -7318,17 +5324,7 @@
},
"latitude": 42.231357755,
"longitude": -8.71296778,
- "lines": [
- "C3d",
- "6",
- "15A",
- "23",
- "25",
- "27",
- "28",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "6", "15A", "23", "25", "27", "28", "H2", "PSA 1"]
},
{
"stopId": 6580,
@@ -7337,17 +5333,7 @@
},
"latitude": 42.229860487,
"longitude": -8.717979137,
- "lines": [
- "C3d",
- "6",
- "15A",
- "23",
- "25",
- "27",
- "28",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "6", "15A", "23", "25", "27", "28", "H2", "PSA 1"]
},
{
"stopId": 6620,
@@ -7356,17 +5342,7 @@
},
"latitude": 42.23757846151978,
"longitude": -8.721031378896738,
- "lines": [
- "C1",
- "A",
- "5A",
- "9B",
- "15B",
- "15C",
- "24",
- "28",
- "N4"
- ]
+ "lines": ["C1", "A", "5A", "9B", "15B", "15C", "24", "28", "N4"]
},
{
"stopId": 6640,
@@ -7375,15 +5351,7 @@
},
"latitude": 42.215506175,
"longitude": -8.753186569,
- "lines": [
- "C3d",
- "C3i",
- "4A",
- "4C",
- "15A",
- "PSA 1",
- "PSA 4"
- ]
+ "lines": ["C3d", "C3i", "4A", "4C", "15A", "PSA 1", "PSA 4"]
},
{
"stopId": 6650,
@@ -7392,12 +5360,7 @@
},
"latitude": 42.215554055,
"longitude": -8.753042462,
- "lines": [
- "C3d",
- "C3i",
- "5B",
- "15B"
- ]
+ "lines": ["C3d", "C3i", "5B", "15B"]
},
{
"stopId": 6670,
@@ -7406,10 +5369,7 @@
},
"latitude": 42.183004832,
"longitude": -8.702601056,
- "lines": [
- "A",
- "6"
- ]
+ "lines": ["A", "6"]
},
{
"stopId": 6680,
@@ -7418,9 +5378,7 @@
},
"latitude": 42.207311837,
"longitude": -8.718650635,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 6690,
@@ -7429,9 +5387,7 @@
},
"latitude": 42.20495956,
"longitude": -8.715695557,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 6700,
@@ -7440,9 +5396,7 @@
},
"latitude": 42.204947406,
"longitude": -8.715589643,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 6720,
@@ -7451,9 +5405,7 @@
},
"latitude": 42.207385347,
"longitude": -8.718127604,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 6730,
@@ -7462,10 +5414,7 @@
},
"latitude": 42.199386411,
"longitude": -8.695417016,
- "lines": [
- "18A",
- "18B"
- ]
+ "lines": ["18A", "18B"]
},
{
"stopId": 6740,
@@ -7474,10 +5423,7 @@
},
"latitude": 42.242957479,
"longitude": -8.691167762,
- "lines": [
- "4A",
- "24"
- ]
+ "lines": ["4A", "24"]
},
{
"stopId": 6750,
@@ -7486,12 +5432,7 @@
},
"latitude": 42.221783554,
"longitude": -8.773517669,
- "lines": [
- "10",
- "15B",
- "15C",
- "N1"
- ]
+ "lines": ["10", "15B", "15C", "N1"]
},
{
"stopId": 6760,
@@ -7500,10 +5441,7 @@
},
"latitude": 42.201847037,
"longitude": -8.782205633,
- "lines": [
- "4C",
- "10"
- ]
+ "lines": ["4C", "10"]
},
{
"stopId": 6780,
@@ -7512,10 +5450,7 @@
},
"latitude": 42.210256843,
"longitude": -8.774740625,
- "lines": [
- "4C",
- "10"
- ]
+ "lines": ["4C", "10"]
},
{
"stopId": 6790,
@@ -7524,10 +5459,7 @@
},
"latitude": 42.214772655,
"longitude": -8.774772363,
- "lines": [
- "C3d",
- "10"
- ]
+ "lines": ["C3d", "10"]
},
{
"stopId": 6810,
@@ -7536,10 +5468,7 @@
},
"latitude": 42.207405928,
"longitude": -8.776153122,
- "lines": [
- "4C",
- "10"
- ]
+ "lines": ["4C", "10"]
},
{
"stopId": 6820,
@@ -7548,10 +5477,7 @@
},
"latitude": 42.20362713,
"longitude": -8.777027535,
- "lines": [
- "4C",
- "10"
- ]
+ "lines": ["4C", "10"]
},
{
"stopId": 6830,
@@ -7560,10 +5486,7 @@
},
"latitude": 42.197495083,
"longitude": -8.790235556,
- "lines": [
- "4C",
- "10"
- ]
+ "lines": ["4C", "10"]
},
{
"stopId": 6860,
@@ -7598,13 +5521,7 @@
},
"latitude": 42.215576278,
"longitude": -8.748885599,
- "lines": [
- "4A",
- "4C",
- "11",
- "15A",
- "N4"
- ]
+ "lines": ["4A", "4C", "11", "15A", "N4"]
},
{
"stopId": 6890,
@@ -7613,9 +5530,7 @@
},
"latitude": 42.198959642,
"longitude": -8.68628496,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 6900,
@@ -7624,9 +5539,7 @@
},
"latitude": 42.199031443,
"longitude": -8.686165797,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 6930,
@@ -7635,10 +5548,7 @@
},
"latitude": 42.220997313,
"longitude": -8.732835177,
- "lines": [
- "C1",
- "N4"
- ]
+ "lines": ["C1", "N4"]
},
{
"stopId": 6940,
@@ -7671,16 +5581,7 @@
},
"latitude": 42.229280401,
"longitude": -8.719123549,
- "lines": [
- "7",
- "12A",
- "12B",
- "14",
- "16",
- "18A",
- "18B",
- "18H"
- ]
+ "lines": ["7", "12A", "12B", "14", "16", "18A", "18B", "18H"]
},
{
"stopId": 6955,
@@ -7689,14 +5590,7 @@
},
"latitude": 42.229438377,
"longitude": -8.719781108,
- "lines": [
- "6",
- "13",
- "18B",
- "18H",
- "25",
- "29"
- ]
+ "lines": ["6", "13", "18B", "18H", "25", "29"]
},
{
"stopId": 6960,
@@ -7705,16 +5599,7 @@
},
"latitude": 42.235056275,
"longitude": -8.726757514,
- "lines": [
- "4A",
- "4C",
- "7",
- "12B",
- "16",
- "17",
- "27",
- "PSA 4"
- ]
+ "lines": ["4A", "4C", "7", "12B", "16", "17", "27", "PSA 4"]
},
{
"stopId": 6970,
@@ -7723,13 +5608,7 @@
},
"latitude": 42.223781999,
"longitude": -8.735258991,
- "lines": [
- "C1",
- "A",
- "10",
- "N4",
- "H1"
- ]
+ "lines": ["C1", "A", "10", "N4", "H1"]
},
{
"stopId": 6980,
@@ -7738,13 +5617,7 @@
},
"latitude": 42.224471236,
"longitude": -8.73619635,
- "lines": [
- "C3d",
- "C3i",
- "15B",
- "15C",
- "N1"
- ]
+ "lines": ["C3d", "C3i", "15B", "15C", "N1"]
},
{
"stopId": 6990,
@@ -7753,13 +5626,7 @@
},
"latitude": 42.224099613,
"longitude": -8.735838344,
- "lines": [
- "C3d",
- "A",
- "9B",
- "15B",
- "15C"
- ]
+ "lines": ["C3d", "A", "9B", "15B", "15C"]
},
{
"stopId": 7000,
@@ -7790,11 +5657,7 @@
},
"latitude": 42.212808952,
"longitude": -8.740022994,
- "lines": [
- "16",
- "23",
- "N4"
- ]
+ "lines": ["16", "23", "N4"]
},
{
"stopId": 7040,
@@ -7803,10 +5666,7 @@
},
"latitude": 42.218435348,
"longitude": -8.709924429,
- "lines": [
- "14",
- "18A"
- ]
+ "lines": ["14", "18A"]
},
{
"stopId": 7050,
@@ -7815,9 +5675,7 @@
},
"latitude": 42.218502886,
"longitude": -8.710133641,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7060,
@@ -7826,11 +5684,7 @@
},
"latitude": 42.210499286,
"longitude": -8.703983192,
- "lines": [
- "14",
- "18A",
- "H3"
- ]
+ "lines": ["14", "18A", "H3"]
},
{
"stopId": 7070,
@@ -7839,11 +5693,7 @@
},
"latitude": 42.210620188,
"longitude": -8.704177049,
- "lines": [
- "14",
- "18A",
- "H3"
- ]
+ "lines": ["14", "18A", "H3"]
},
{
"stopId": 7080,
@@ -7852,10 +5702,7 @@
},
"latitude": 42.238797018,
"longitude": -8.650399429,
- "lines": [
- "9B",
- "28"
- ]
+ "lines": ["9B", "28"]
},
{
"stopId": 7090,
@@ -7864,9 +5711,7 @@
},
"latitude": 42.191918475,
"longitude": -8.706869692,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 7100,
@@ -7875,12 +5720,7 @@
},
"latitude": 42.1952442,
"longitude": -8.71956212,
- "lines": [
- "12B",
- "18B",
- "18H",
- "27"
- ]
+ "lines": ["12B", "18B", "18H", "27"]
},
{
"stopId": 7110,
@@ -7889,9 +5729,7 @@
},
"latitude": 42.195709195,
"longitude": -8.716896004,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 7120,
@@ -7900,9 +5738,7 @@
},
"latitude": 42.195795442,
"longitude": -8.716893641,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 7130,
@@ -7911,9 +5747,7 @@
},
"latitude": 42.19350247,
"longitude": -8.715219623,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 7140,
@@ -7922,9 +5756,7 @@
},
"latitude": 42.193601829,
"longitude": -8.715157933,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 7150,
@@ -7933,9 +5765,7 @@
},
"latitude": 42.192415468,
"longitude": -8.71184004,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 7160,
@@ -7944,9 +5774,7 @@
},
"latitude": 42.192526527,
"longitude": -8.712588696,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 7170,
@@ -7955,12 +5783,7 @@
},
"latitude": 42.195322512,
"longitude": -8.719460515,
- "lines": [
- "12B",
- "18B",
- "18H",
- "27"
- ]
+ "lines": ["12B", "18B", "18H", "27"]
},
{
"stopId": 7200,
@@ -7969,14 +5792,7 @@
},
"latitude": 42.231023929,
"longitude": -8.69459232,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7210,
@@ -7985,14 +5801,7 @@
},
"latitude": 42.229661504,
"longitude": -8.691416585,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7220,
@@ -8001,14 +5810,7 @@
},
"latitude": 42.229736581,
"longitude": -8.691879077,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7230,
@@ -8017,14 +5819,7 @@
},
"latitude": 42.229560215,
"longitude": -8.687854611,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7240,
@@ -8033,14 +5828,7 @@
},
"latitude": 42.229454954,
"longitude": -8.684539401,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7250,
@@ -8049,14 +5837,7 @@
},
"latitude": 42.229533333,
"longitude": -8.684593198,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7260,
@@ -8065,14 +5846,7 @@
},
"latitude": 42.22953241,
"longitude": -8.681347572,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7270,
@@ -8081,14 +5855,7 @@
},
"latitude": 42.229570145,
"longitude": -8.681232237,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7280,
@@ -8097,14 +5864,7 @@
},
"latitude": 42.228432118,
"longitude": -8.67827376,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7290,
@@ -8113,14 +5873,7 @@
},
"latitude": 42.228411862,
"longitude": -8.678489489,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7300,
@@ -8129,14 +5882,7 @@
},
"latitude": 42.223957681,
"longitude": -8.673451332,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7310,
@@ -8145,13 +5891,7 @@
},
"latitude": 42.223219273,
"longitude": -8.672272983,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "25"
- ]
+ "lines": ["11", "15A", "15B", "15C", "25"]
},
{
"stopId": 7320,
@@ -8160,14 +5900,7 @@
},
"latitude": 42.224462184,
"longitude": -8.673842935,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7330,
@@ -8176,14 +5909,7 @@
},
"latitude": 42.231776636,
"longitude": -8.697735869,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7340,
@@ -8192,13 +5918,7 @@
},
"latitude": 42.223272423,
"longitude": -8.67216119,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "25"
- ]
+ "lines": ["11", "15A", "15B", "15C", "25"]
},
{
"stopId": 7350,
@@ -8207,14 +5927,7 @@
},
"latitude": 42.231927571,
"longitude": -8.697668814,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7360,
@@ -8223,14 +5936,7 @@
},
"latitude": 42.230432101,
"longitude": -8.694045149,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7370,
@@ -8239,14 +5945,7 @@
},
"latitude": 42.229607881,
"longitude": -8.686980211,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 7380,
@@ -8255,9 +5954,7 @@
},
"latitude": 42.220087856,
"longitude": -8.707014826,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7390,
@@ -8266,9 +5963,7 @@
},
"latitude": 42.220167311,
"longitude": -8.706963864,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7410,
@@ -8277,12 +5972,7 @@
},
"latitude": 42.226366639,
"longitude": -8.752928216,
- "lines": [
- "C3d",
- "C3i",
- "13",
- "H"
- ]
+ "lines": ["C3d", "C3i", "13", "H"]
},
{
"stopId": 7440,
@@ -8291,9 +5981,7 @@
},
"latitude": 42.200640474,
"longitude": -8.684744444,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7450,
@@ -8302,9 +5990,7 @@
},
"latitude": 42.202168422,
"longitude": -8.68473908,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7460,
@@ -8313,9 +5999,7 @@
},
"latitude": 42.19807525,
"longitude": -8.684800771,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7470,
@@ -8324,9 +6008,7 @@
},
"latitude": 42.198206824,
"longitude": -8.684878336,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7480,
@@ -8335,9 +6017,7 @@
},
"latitude": 42.200729887,
"longitude": -8.684258964,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7490,
@@ -8346,9 +6026,7 @@
},
"latitude": 42.194091099,
"longitude": -8.683392611,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7500,
@@ -8357,9 +6035,7 @@
},
"latitude": 42.196388225,
"longitude": -8.684151676,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7540,
@@ -8368,10 +6044,7 @@
},
"latitude": 42.226657624,
"longitude": -8.659447983,
- "lines": [
- "11",
- "15A"
- ]
+ "lines": ["11", "15A"]
},
{
"stopId": 7590,
@@ -8380,10 +6053,7 @@
},
"latitude": 42.225201551,
"longitude": -8.667101684,
- "lines": [
- "11",
- "15A"
- ]
+ "lines": ["11", "15A"]
},
{
"stopId": 7600,
@@ -8392,9 +6062,7 @@
},
"latitude": 42.198544554,
"longitude": -8.677824939,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7610,
@@ -8403,9 +6071,7 @@
},
"latitude": 42.196647395,
"longitude": -8.677801904,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7620,
@@ -8414,9 +6080,7 @@
},
"latitude": 42.189146758,
"longitude": -8.678708548,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7630,
@@ -8425,10 +6089,7 @@
},
"latitude": 42.243135911,
"longitude": -8.66173721,
- "lines": [
- "9B",
- "28"
- ]
+ "lines": ["9B", "28"]
},
{
"stopId": 7640,
@@ -8437,10 +6098,7 @@
},
"latitude": 42.241620781,
"longitude": -8.652000054,
- "lines": [
- "9B",
- "28"
- ]
+ "lines": ["9B", "28"]
},
{
"stopId": 7650,
@@ -8449,11 +6107,7 @@
},
"latitude": 42.239043121,
"longitude": -8.650247888,
- "lines": [
- "9B",
- "27",
- "28"
- ]
+ "lines": ["9B", "27", "28"]
},
{
"stopId": 7660,
@@ -8462,10 +6116,7 @@
},
"latitude": 42.241610852,
"longitude": -8.651865944,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 7662,
@@ -8474,9 +6125,7 @@
},
"latitude": 42.211013462,
"longitude": -8.68554295,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7664,
@@ -8485,9 +6134,7 @@
},
"latitude": 42.211201327,
"longitude": -8.688838517,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7666,
@@ -8496,9 +6143,7 @@
},
"latitude": 42.210514541,
"longitude": -8.685349777,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7668,
@@ -8507,9 +6152,7 @@
},
"latitude": 42.211022529,
"longitude": -8.688318168,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7670,
@@ -8518,9 +6161,7 @@
},
"latitude": 42.235169136,
"longitude": -8.671176685,
- "lines": [
- "9B"
- ]
+ "lines": ["9B"]
},
{
"stopId": 7680,
@@ -8529,10 +6170,7 @@
},
"latitude": 42.240866745,
"longitude": -8.669273191,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 7690,
@@ -8541,10 +6179,7 @@
},
"latitude": 42.235468446,
"longitude": -8.670649153,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 7700,
@@ -8553,9 +6188,7 @@
},
"latitude": 42.236478263,
"longitude": -8.669194381,
- "lines": [
- "9B"
- ]
+ "lines": ["9B"]
},
{
"stopId": 7710,
@@ -8564,10 +6197,7 @@
},
"latitude": 42.236825775,
"longitude": -8.669313413,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 7720,
@@ -8576,9 +6206,7 @@
},
"latitude": 42.24099726,
"longitude": -8.669077286,
- "lines": [
- "9B"
- ]
+ "lines": ["9B"]
},
{
"stopId": 7730,
@@ -8587,10 +6215,7 @@
},
"latitude": 42.241580812,
"longitude": -8.658065611,
- "lines": [
- "9B",
- "28"
- ]
+ "lines": ["9B", "28"]
},
{
"stopId": 7740,
@@ -8599,10 +6224,7 @@
},
"latitude": 42.241658253,
"longitude": -8.658202403,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 7750,
@@ -8611,10 +6233,7 @@
},
"latitude": 42.243330503,
"longitude": -8.661852545,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 7760,
@@ -8623,9 +6242,7 @@
},
"latitude": 42.193300199,
"longitude": -8.681021538,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7762,
@@ -8634,9 +6251,7 @@
},
"latitude": 42.209575101,
"longitude": -8.690548833,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7764,
@@ -8645,9 +6260,7 @@
},
"latitude": 42.209654568,
"longitude": -8.690495189,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 7810,
@@ -8656,11 +6269,7 @@
},
"latitude": 42.217817959,
"longitude": -8.710940668,
- "lines": [
- "18A",
- "18B",
- "18H"
- ]
+ "lines": ["18A", "18B", "18H"]
},
{
"stopId": 7830,
@@ -8669,10 +6278,7 @@
},
"latitude": 42.20297089,
"longitude": -8.707945762,
- "lines": [
- "18B",
- "H3"
- ]
+ "lines": ["18B", "H3"]
},
{
"stopId": 7840,
@@ -8681,9 +6287,7 @@
},
"latitude": 42.203039989,
"longitude": -8.710936623,
- "lines": [
- "18B"
- ]
+ "lines": ["18B"]
},
{
"stopId": 7850,
@@ -8692,10 +6296,7 @@
},
"latitude": 42.202923204,
"longitude": -8.708085237,
- "lines": [
- "18B",
- "H3"
- ]
+ "lines": ["18B", "H3"]
},
{
"stopId": 7860,
@@ -8704,9 +6305,7 @@
},
"latitude": 42.225436283,
"longitude": -8.68893946,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 7870,
@@ -8715,11 +6314,7 @@
},
"latitude": 42.166897971,
"longitude": -8.802204658,
- "lines": [
- "C3d",
- "10",
- "12A"
- ]
+ "lines": ["C3d", "10", "12A"]
},
{
"stopId": 7880,
@@ -8728,9 +6323,7 @@
},
"latitude": 42.222364236,
"longitude": -8.718898254,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 7890,
@@ -8739,10 +6332,7 @@
},
"latitude": 42.180764289,
"longitude": -8.80256063,
- "lines": [
- "11",
- "12A"
- ]
+ "lines": ["11", "12A"]
},
{
"stopId": 7900,
@@ -8751,10 +6341,7 @@
},
"latitude": 42.20492472,
"longitude": -8.768904292,
- "lines": [
- "4A",
- "12A"
- ]
+ "lines": ["4A", "12A"]
},
{
"stopId": 7910,
@@ -8763,10 +6350,7 @@
},
"latitude": 42.208040013,
"longitude": -8.767458581,
- "lines": [
- "4A",
- "12A"
- ]
+ "lines": ["4A", "12A"]
},
{
"stopId": 7920,
@@ -8775,10 +6359,7 @@
},
"latitude": 42.208926096,
"longitude": -8.765294038,
- "lines": [
- "4A",
- "12A"
- ]
+ "lines": ["4A", "12A"]
},
{
"stopId": 7930,
@@ -8787,10 +6368,7 @@
},
"latitude": 42.208999211,
"longitude": -8.765346753,
- "lines": [
- "4A",
- "12A"
- ]
+ "lines": ["4A", "12A"]
},
{
"stopId": 7940,
@@ -8799,10 +6377,7 @@
},
"latitude": 42.207987966,
"longitude": -8.767688321,
- "lines": [
- "4A",
- "12A"
- ]
+ "lines": ["4A", "12A"]
},
{
"stopId": 7950,
@@ -8811,10 +6386,7 @@
},
"latitude": 42.206253649,
"longitude": -8.768742472,
- "lines": [
- "4A",
- "12A"
- ]
+ "lines": ["4A", "12A"]
},
{
"stopId": 7960,
@@ -8823,10 +6395,7 @@
},
"latitude": 42.202111343,
"longitude": -8.769560881,
- "lines": [
- "4A",
- "12A"
- ]
+ "lines": ["4A", "12A"]
},
{
"stopId": 7970,
@@ -8835,10 +6404,7 @@
},
"latitude": 42.213820465,
"longitude": -8.760651176,
- "lines": [
- "4A",
- "12A"
- ]
+ "lines": ["4A", "12A"]
},
{
"stopId": 7980,
@@ -8847,10 +6413,7 @@
},
"latitude": 42.21430717,
"longitude": -8.760710185,
- "lines": [
- "4A",
- "12A"
- ]
+ "lines": ["4A", "12A"]
},
{
"stopId": 7990,
@@ -8859,10 +6422,7 @@
},
"latitude": 42.212612622,
"longitude": -8.760868435,
- "lines": [
- "4A",
- "12A"
- ]
+ "lines": ["4A", "12A"]
},
{
"stopId": 8000,
@@ -8871,10 +6431,7 @@
},
"latitude": 42.212034517,
"longitude": -8.760916715,
- "lines": [
- "4A",
- "12A"
- ]
+ "lines": ["4A", "12A"]
},
{
"stopId": 8010,
@@ -8883,16 +6440,7 @@
},
"latitude": 42.245018172,
"longitude": -8.703349646,
- "lines": [
- "C3d",
- "5B",
- "10",
- "17",
- "31",
- "H2",
- "H3",
- "PSA 1"
- ]
+ "lines": ["C3d", "5B", "10", "17", "31", "H2", "H3", "PSA 1"]
},
{
"stopId": 8020,
@@ -8901,14 +6449,7 @@
},
"latitude": 42.246941664,
"longitude": -8.700376378,
- "lines": [
- "C3d",
- "C3i",
- "5B",
- "10",
- "N1",
- "H3"
- ]
+ "lines": ["C3d", "C3i", "5B", "10", "N1", "H3"]
},
{
"stopId": 8030,
@@ -8917,16 +6458,7 @@
},
"latitude": 42.246056261,
"longitude": -8.701684825,
- "lines": [
- "C3d",
- "5B",
- "10",
- "17",
- "31",
- "H2",
- "H3",
- "PSA 1"
- ]
+ "lines": ["C3d", "5B", "10", "17", "31", "H2", "H3", "PSA 1"]
},
{
"stopId": 8040,
@@ -8935,14 +6467,7 @@
},
"latitude": 42.24874024,
"longitude": -8.697546209,
- "lines": [
- "C3d",
- "C3i",
- "5B",
- "10",
- "N1",
- "H3"
- ]
+ "lines": ["C3d", "C3i", "5B", "10", "N1", "H3"]
},
{
"stopId": 8050,
@@ -8951,16 +6476,7 @@
},
"latitude": 42.247765296,
"longitude": -8.698918203,
- "lines": [
- "C3d",
- "5B",
- "10",
- "17",
- "31",
- "H2",
- "H3",
- "PSA 1"
- ]
+ "lines": ["C3d", "5B", "10", "17", "31", "H2", "H3", "PSA 1"]
},
{
"stopId": 8060,
@@ -8969,14 +6485,7 @@
},
"latitude": 42.244926864,
"longitude": -8.703642393,
- "lines": [
- "C3d",
- "C3i",
- "5B",
- "10",
- "N1",
- "H3"
- ]
+ "lines": ["C3d", "C3i", "5B", "10", "N1", "H3"]
},
{
"stopId": 8090,
@@ -8985,11 +6494,7 @@
},
"latitude": 42.216151643,
"longitude": -8.715616477,
- "lines": [
- "18A",
- "18B",
- "18H"
- ]
+ "lines": ["18A", "18B", "18H"]
},
{
"stopId": 8100,
@@ -8998,9 +6503,7 @@
},
"latitude": 42.160735669,
"longitude": -8.709771124,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 8110,
@@ -9009,9 +6512,7 @@
},
"latitude": 42.160670051,
"longitude": -8.709878412,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 8120,
@@ -9020,9 +6521,7 @@
},
"latitude": 42.22493632,
"longitude": -8.694369092,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 8130,
@@ -9031,9 +6530,7 @@
},
"latitude": 42.225485938,
"longitude": -8.692235895,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 8140,
@@ -9042,9 +6539,7 @@
},
"latitude": 42.224657696,
"longitude": -8.696532794,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 8150,
@@ -9053,9 +6548,7 @@
},
"latitude": 42.225076787,
"longitude": -8.697168477,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 8160,
@@ -9064,9 +6557,7 @@
},
"latitude": 42.224884679,
"longitude": -8.694275214,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 8170,
@@ -9075,9 +6566,7 @@
},
"latitude": 42.225428901,
"longitude": -8.688744499,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 8180,
@@ -9086,9 +6575,7 @@
},
"latitude": 42.173993336,
"longitude": -8.70329684,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 8190,
@@ -9097,9 +6584,7 @@
},
"latitude": 42.214660701,
"longitude": -8.722840401,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 8200,
@@ -9108,9 +6593,7 @@
},
"latitude": 42.214714337,
"longitude": -8.723068388,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 8210,
@@ -9119,9 +6602,7 @@
},
"latitude": 42.214377129,
"longitude": -8.725964538,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 8220,
@@ -9130,9 +6611,7 @@
},
"latitude": 42.213993258,
"longitude": -8.726740824,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 8230,
@@ -9141,9 +6620,7 @@
},
"latitude": 42.199146625,
"longitude": -8.676419461,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 8240,
@@ -9152,11 +6629,7 @@
},
"latitude": 42.243382567,
"longitude": -8.674125307,
- "lines": [
- "9B",
- "27",
- "28"
- ]
+ "lines": ["9B", "27", "28"]
},
{
"stopId": 8250,
@@ -9165,11 +6638,7 @@
},
"latitude": 42.242669731,
"longitude": -8.670096629,
- "lines": [
- "9B",
- "27",
- "28"
- ]
+ "lines": ["9B", "27", "28"]
},
{
"stopId": 8282,
@@ -9178,9 +6647,7 @@
},
"latitude": 42.206854901,
"longitude": -8.686031058,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 8284,
@@ -9189,9 +6656,7 @@
},
"latitude": 42.206779403,
"longitude": -8.686218813,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 8290,
@@ -9200,10 +6665,7 @@
},
"latitude": 42.235646525,
"longitude": -8.685908988,
- "lines": [
- "27",
- "28"
- ]
+ "lines": ["27", "28"]
},
{
"stopId": 8300,
@@ -9212,10 +6674,7 @@
},
"latitude": 42.23556225,
"longitude": -8.686044366,
- "lines": [
- "27",
- "28"
- ]
+ "lines": ["27", "28"]
},
{
"stopId": 8330,
@@ -9224,13 +6683,7 @@
},
"latitude": 42.223897608,
"longitude": -8.740424721,
- "lines": [
- "C3d",
- "C3i",
- "15B",
- "15C",
- "N1"
- ]
+ "lines": ["C3d", "C3i", "15B", "15C", "N1"]
},
{
"stopId": 8340,
@@ -9239,13 +6692,7 @@
},
"latitude": 42.223840474,
"longitude": -8.740432891,
- "lines": [
- "C3d",
- "13",
- "15B",
- "15C",
- "H"
- ]
+ "lines": ["C3d", "13", "15B", "15C", "H"]
},
{
"stopId": 8370,
@@ -9254,10 +6701,7 @@
},
"latitude": 42.223984208,
"longitude": -8.751326546,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 8390,
@@ -9266,13 +6710,7 @@
},
"latitude": 42.223510532,
"longitude": -8.748903264,
- "lines": [
- "C3d",
- "13",
- "15B",
- "15C",
- "H"
- ]
+ "lines": ["C3d", "13", "15B", "15C", "H"]
},
{
"stopId": 8410,
@@ -9281,11 +6719,7 @@
},
"latitude": 42.218006346,
"longitude": -8.754154367,
- "lines": [
- "C3d",
- "10",
- "15B"
- ]
+ "lines": ["C3d", "10", "15B"]
},
{
"stopId": 8420,
@@ -9294,11 +6728,7 @@
},
"latitude": 42.218031265,
"longitude": -8.754258995,
- "lines": [
- "C3d",
- "C3i",
- "10"
- ]
+ "lines": ["C3d", "C3i", "10"]
},
{
"stopId": 8430,
@@ -9307,11 +6737,7 @@
},
"latitude": 42.221229518,
"longitude": -8.753411657,
- "lines": [
- "C3d",
- "10",
- "15B"
- ]
+ "lines": ["C3d", "10", "15B"]
},
{
"stopId": 8440,
@@ -9320,11 +6746,7 @@
},
"latitude": 42.220192578,
"longitude": -8.754164587,
- "lines": [
- "C3d",
- "C3i",
- "10"
- ]
+ "lines": ["C3d", "C3i", "10"]
},
{
"stopId": 8450,
@@ -9333,16 +6755,7 @@
},
"latitude": 42.231511437,
"longitude": -8.732178,
- "lines": [
- "C1",
- "C3d",
- "A",
- "5A",
- "9B",
- "15C",
- "N4",
- "H1"
- ]
+ "lines": ["C1", "C3d", "A", "5A", "9B", "15C", "N4", "H1"]
},
{
"stopId": 8460,
@@ -9351,15 +6764,7 @@
},
"latitude": 42.227500225,
"longitude": -8.734096707,
- "lines": [
- "C1",
- "C3d",
- "A",
- "9B",
- "15C",
- "N4",
- "H1"
- ]
+ "lines": ["C1", "C3d", "A", "9B", "15C", "N4", "H1"]
},
{
"stopId": 8470,
@@ -9368,16 +6773,7 @@
},
"latitude": 42.234106639,
"longitude": -8.731302569,
- "lines": [
- "C1",
- "C3d",
- "A",
- "5A",
- "9B",
- "15C",
- "N4",
- "H1"
- ]
+ "lines": ["C1", "C3d", "A", "5A", "9B", "15C", "N4", "H1"]
},
{
"stopId": 8480,
@@ -9386,16 +6782,7 @@
},
"latitude": 42.229616766,
"longitude": -8.732861043,
- "lines": [
- "C1",
- "C3d",
- "A",
- "5A",
- "9B",
- "15C",
- "N4",
- "H1"
- ]
+ "lines": ["C1", "C3d", "A", "5A", "9B", "15C", "N4", "H1"]
},
{
"stopId": 8490,
@@ -9404,12 +6791,7 @@
},
"latitude": 42.244366441,
"longitude": -8.695452075,
- "lines": [
- "C3i",
- "5A",
- "N1",
- "H3"
- ]
+ "lines": ["C3i", "5A", "N1", "H3"]
},
{
"stopId": 8500,
@@ -9418,13 +6800,7 @@
},
"latitude": 42.238455548,
"longitude": -8.703814812,
- "lines": [
- "C3d",
- "5A",
- "31",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "5A", "31", "H2", "PSA 1"]
},
{
"stopId": 8510,
@@ -9433,11 +6809,7 @@
},
"latitude": 42.238413145,
"longitude": -8.703563202,
- "lines": [
- "C3i",
- "5A",
- "N1"
- ]
+ "lines": ["C3i", "5A", "N1"]
},
{
"stopId": 8520,
@@ -9446,13 +6818,7 @@
},
"latitude": 42.241332883,
"longitude": -8.702059906,
- "lines": [
- "C3d",
- "5A",
- "31",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "5A", "31", "H2", "PSA 1"]
},
{
"stopId": 8530,
@@ -9461,11 +6827,7 @@
},
"latitude": 42.241101222,
"longitude": -8.701974032,
- "lines": [
- "C3i",
- "5A",
- "N1"
- ]
+ "lines": ["C3i", "5A", "N1"]
},
{
"stopId": 8540,
@@ -9474,13 +6836,7 @@
},
"latitude": 42.242844316,
"longitude": -8.698295825,
- "lines": [
- "C3d",
- "5A",
- "31",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "5A", "31", "H2", "PSA 1"]
},
{
"stopId": 8550,
@@ -9489,13 +6845,7 @@
},
"latitude": 42.246425568,
"longitude": -8.692950624,
- "lines": [
- "C3i",
- "5A",
- "5B",
- "N1",
- "H3"
- ]
+ "lines": ["C3i", "5A", "5B", "N1", "H3"]
},
{
"stopId": 8560,
@@ -9504,14 +6854,7 @@
},
"latitude": 42.24409871,
"longitude": -8.69614733,
- "lines": [
- "C3d",
- "5A",
- "31",
- "H2",
- "H3",
- "PSA 1"
- ]
+ "lines": ["C3d", "5A", "31", "H2", "H3", "PSA 1"]
},
{
"stopId": 8570,
@@ -9520,14 +6863,7 @@
},
"latitude": 42.246143319,
"longitude": -8.69359937,
- "lines": [
- "C3d",
- "5A",
- "31",
- "H2",
- "H3",
- "PSA 1"
- ]
+ "lines": ["C3d", "5A", "31", "H2", "H3", "PSA 1"]
},
{
"stopId": 8580,
@@ -9536,12 +6872,7 @@
},
"latitude": 42.233828086,
"longitude": -8.706311242,
- "lines": [
- "C3i",
- "5A",
- "31",
- "N1"
- ]
+ "lines": ["C3i", "5A", "31", "N1"]
},
{
"stopId": 8590,
@@ -9550,13 +6881,7 @@
},
"latitude": 42.233681224,
"longitude": -8.706702136,
- "lines": [
- "C3d",
- "5A",
- "31",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "5A", "31", "H2", "PSA 1"]
},
{
"stopId": 8600,
@@ -9565,13 +6890,7 @@
},
"latitude": 42.236350093,
"longitude": -8.70429745,
- "lines": [
- "C3d",
- "5A",
- "31",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "5A", "31", "H2", "PSA 1"]
},
{
"stopId": 8610,
@@ -9608,11 +6927,7 @@
},
"latitude": 42.236261792,
"longitude": -8.703994979,
- "lines": [
- "C3i",
- "5A",
- "N1"
- ]
+ "lines": ["C3i", "5A", "N1"]
},
{
"stopId": 8630,
@@ -9650,12 +6965,7 @@
},
"latitude": 42.168290977,
"longitude": -8.68342947,
- "lines": [
- "A",
- "15C",
- "U1",
- "U2"
- ]
+ "lines": ["A", "15C", "U1", "U2"]
},
{
"stopId": 8670,
@@ -9664,12 +6974,7 @@
},
"latitude": 42.167687661,
"longitude": -8.685994335,
- "lines": [
- "A",
- "15C",
- "U1",
- "U2"
- ]
+ "lines": ["A", "15C", "U1", "U2"]
},
{
"stopId": 8680,
@@ -9678,12 +6983,7 @@
},
"latitude": 42.169603028,
"longitude": -8.680108895,
- "lines": [
- "A",
- "15C",
- "U1",
- "U2"
- ]
+ "lines": ["A", "15C", "U1", "U2"]
},
{
"stopId": 8700,
@@ -9692,12 +6992,7 @@
},
"latitude": 42.167963445,
"longitude": -8.688421342,
- "lines": [
- "A",
- "15C",
- "U1",
- "U2"
- ]
+ "lines": ["A", "15C", "U1", "U2"]
},
{
"stopId": 8710,
@@ -9706,9 +7001,7 @@
},
"latitude": 42.167985106,
"longitude": -8.688425395,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 8720,
@@ -9717,12 +7010,7 @@
},
"latitude": 42.169678809,
"longitude": -8.679104749,
- "lines": [
- "A",
- "15C",
- "U1",
- "U2"
- ]
+ "lines": ["A", "15C", "U1", "U2"]
},
{
"stopId": 8721,
@@ -9731,9 +7019,7 @@
},
"latitude": 42.169776602,
"longitude": -8.678942156,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 8730,
@@ -9742,9 +7028,7 @@
},
"latitude": 42.170159671,
"longitude": -8.68735086,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 8740,
@@ -9753,12 +7037,7 @@
},
"latitude": 42.170123888,
"longitude": -8.687270393,
- "lines": [
- "A",
- "15C",
- "U1",
- "U2"
- ]
+ "lines": ["A", "15C", "U1", "U2"]
},
{
"stopId": 8750,
@@ -9896,17 +7175,7 @@
},
"latitude": 42.234250043,
"longitude": -8.724361531,
- "lines": [
- "4A",
- "4C",
- "5B",
- "11",
- "12A",
- "12B",
- "17",
- "27",
- "N1"
- ]
+ "lines": ["4A", "4C", "5B", "11", "12A", "12B", "17", "27", "N1"]
},
{
"stopId": 8880,
@@ -9915,17 +7184,7 @@
},
"latitude": 42.233188126,
"longitude": -8.72155331,
- "lines": [
- "4A",
- "4C",
- "5B",
- "11",
- "12A",
- "12B",
- "17",
- "27",
- "N1"
- ]
+ "lines": ["4A", "4C", "5B", "11", "12A", "12B", "17", "27", "N1"]
},
{
"stopId": 8890,
@@ -9934,16 +7193,7 @@
},
"latitude": 42.233283503,
"longitude": -8.721378959,
- "lines": [
- "4A",
- "4C",
- "5B",
- "7",
- "12B",
- "16",
- "17",
- "PSA 4"
- ]
+ "lines": ["4A", "4C", "5B", "7", "12B", "16", "17", "PSA 4"]
},
{
"stopId": 8900,
@@ -9952,16 +7202,7 @@
},
"latitude": 42.232243383,
"longitude": -8.718524158,
- "lines": [
- "4A",
- "4C",
- "5B",
- "7",
- "12B",
- "16",
- "17",
- "PSA 4"
- ]
+ "lines": ["4A", "4C", "5B", "7", "12B", "16", "17", "PSA 4"]
},
{
"stopId": 8910,
@@ -9970,17 +7211,7 @@
},
"latitude": 42.232224046,
"longitude": -8.718985824,
- "lines": [
- "4A",
- "4C",
- "5B",
- "11",
- "12A",
- "12B",
- "17",
- "27",
- "N1"
- ]
+ "lines": ["4A", "4C", "5B", "11", "12A", "12B", "17", "27", "N1"]
},
{
"stopId": 8916,
@@ -9989,9 +7220,7 @@
},
"latitude": 42.231593651,
"longitude": -8.71714227,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 8930,
@@ -10000,10 +7229,7 @@
},
"latitude": 42.22014115,
"longitude": -8.745082757,
- "lines": [
- "C3i",
- "5B"
- ]
+ "lines": ["C3i", "5B"]
},
{
"stopId": 8950,
@@ -10012,10 +7238,7 @@
},
"latitude": 42.218712573,
"longitude": -8.75011435,
- "lines": [
- "C3i",
- "5B"
- ]
+ "lines": ["C3i", "5B"]
},
{
"stopId": 8970,
@@ -10024,10 +7247,7 @@
},
"latitude": 42.197425383,
"longitude": -8.713700535,
- "lines": [
- "A",
- "H3"
- ]
+ "lines": ["A", "H3"]
},
{
"stopId": 8980,
@@ -10036,10 +7256,7 @@
},
"latitude": 42.197532685,
"longitude": -8.713614705,
- "lines": [
- "A",
- "H3"
- ]
+ "lines": ["A", "H3"]
},
{
"stopId": 8990,
@@ -10048,11 +7265,7 @@
},
"latitude": 42.200673849,
"longitude": -8.714185609,
- "lines": [
- "A",
- "18B",
- "H3"
- ]
+ "lines": ["A", "18B", "H3"]
},
{
"stopId": 9000,
@@ -10061,10 +7274,7 @@
},
"latitude": 42.200719549,
"longitude": -8.714115872,
- "lines": [
- "A",
- "H3"
- ]
+ "lines": ["A", "H3"]
},
{
"stopId": 9010,
@@ -10073,9 +7283,7 @@
},
"latitude": 42.203157887,
"longitude": -8.694293108,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 9020,
@@ -10084,10 +7292,7 @@
},
"latitude": 42.207584622,
"longitude": -8.670108196,
- "lines": [
- "15B",
- "15C"
- ]
+ "lines": ["15B", "15C"]
},
{
"stopId": 9040,
@@ -10096,11 +7301,7 @@
},
"latitude": 42.20831564,
"longitude": -8.670282438,
- "lines": [
- "15B",
- "15C",
- "U2"
- ]
+ "lines": ["15B", "15C", "U2"]
},
{
"stopId": 9050,
@@ -10109,9 +7310,7 @@
},
"latitude": 42.154646971,
"longitude": -8.688349062,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 10061,
@@ -10120,9 +7319,7 @@
},
"latitude": 42.185277472,
"longitude": -8.741558953,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14101,
@@ -10131,9 +7328,7 @@
},
"latitude": 42.168008539,
"longitude": -8.710415438,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14102,
@@ -10142,9 +7337,7 @@
},
"latitude": 42.168282882,
"longitude": -8.710066751,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14105,
@@ -10153,12 +7346,7 @@
},
"latitude": 42.167237978,
"longitude": -8.681135704,
- "lines": [
- "A",
- "15C",
- "U1",
- "U2"
- ]
+ "lines": ["A", "15C", "U1", "U2"]
},
{
"stopId": 14106,
@@ -10167,11 +7355,7 @@
},
"latitude": 42.234161582,
"longitude": -8.695074564,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 14107,
@@ -10180,9 +7364,7 @@
},
"latitude": 42.257847205,
"longitude": -8.677696507,
- "lines": [
- "10"
- ]
+ "lines": ["10"]
},
{
"stopId": 14108,
@@ -10191,10 +7373,7 @@
},
"latitude": 42.21401741,
"longitude": -8.67133083,
- "lines": [
- "15B",
- "15C"
- ]
+ "lines": ["15B", "15C"]
},
{
"stopId": 14111,
@@ -10203,10 +7382,7 @@
},
"latitude": 42.204262657,
"longitude": -8.684801801,
- "lines": [
- "6",
- "14"
- ]
+ "lines": ["6", "14"]
},
{
"stopId": 14112,
@@ -10215,10 +7391,7 @@
},
"latitude": 42.204047198,
"longitude": -8.684697288,
- "lines": [
- "6",
- "14"
- ]
+ "lines": ["6", "14"]
},
{
"stopId": 14113,
@@ -10227,10 +7400,7 @@
},
"latitude": 42.193458577,
"longitude": -8.702065856,
- "lines": [
- "6",
- "27"
- ]
+ "lines": ["6", "27"]
},
{
"stopId": 14117,
@@ -10239,9 +7409,7 @@
},
"latitude": 42.228574702,
"longitude": -8.712864548,
- "lines": [
- "H2"
- ]
+ "lines": ["H2"]
},
{
"stopId": 14119,
@@ -10250,9 +7418,7 @@
},
"latitude": 42.229320789,
"longitude": -8.710390551,
- "lines": [
- "H2"
- ]
+ "lines": ["H2"]
},
{
"stopId": 14121,
@@ -10282,13 +7448,7 @@
},
"latitude": 42.231584097,
"longitude": -8.706968521,
- "lines": [
- "4C",
- "23",
- "31",
- "H2",
- "PSA 4"
- ]
+ "lines": ["4C", "23", "31", "H2", "PSA 4"]
},
{
"stopId": 14123,
@@ -10297,17 +7457,7 @@
},
"latitude": 42.214127819,
"longitude": -8.752027594,
- "lines": [
- "C3d",
- "C3i",
- "4A",
- "4C",
- "5B",
- "11",
- "15A",
- "15B",
- "N4"
- ]
+ "lines": ["C3d", "C3i", "4A", "4C", "5B", "11", "15A", "15B", "N4"]
},
{
"stopId": 14124,
@@ -10316,11 +7466,7 @@
},
"latitude": 42.226569499,
"longitude": -8.752773946,
- "lines": [
- "C3d",
- "C3i",
- "6"
- ]
+ "lines": ["C3d", "C3i", "6"]
},
{
"stopId": 14125,
@@ -10329,15 +7475,7 @@
},
"latitude": 42.213869651,
"longitude": -8.751990789,
- "lines": [
- "C3d",
- "C3i",
- "4A",
- "4C",
- "15A",
- "PSA 1",
- "PSA 4"
- ]
+ "lines": ["C3d", "C3i", "4A", "4C", "15A", "PSA 1", "PSA 4"]
},
{
"stopId": 14126,
@@ -10346,11 +7484,7 @@
},
"latitude": 42.242494425,
"longitude": -8.699249038,
- "lines": [
- "C3i",
- "5A",
- "N1"
- ]
+ "lines": ["C3i", "5A", "N1"]
},
{
"stopId": 14127,
@@ -10359,12 +7493,7 @@
},
"latitude": 42.249306896,
"longitude": -8.695179916,
- "lines": [
- "5B",
- "10",
- "N1",
- "H3"
- ]
+ "lines": ["5B", "10", "N1", "H3"]
},
{
"stopId": 14128,
@@ -10373,9 +7502,7 @@
},
"latitude": 42.20733292,
"longitude": -8.752159103,
- "lines": [
- "5A"
- ]
+ "lines": ["5A"]
},
{
"stopId": 14129,
@@ -10384,9 +7511,7 @@
},
"latitude": 42.20723039,
"longitude": -8.752592351,
- "lines": [
- "5A"
- ]
+ "lines": ["5A"]
},
{
"stopId": 14131,
@@ -10395,11 +7520,7 @@
},
"latitude": 42.221948768,
"longitude": -8.753171211,
- "lines": [
- "C3d",
- "C3i",
- "10"
- ]
+ "lines": ["C3d", "C3i", "10"]
},
{
"stopId": 14132,
@@ -10408,17 +7529,7 @@
},
"latitude": 42.249307631,
"longitude": -8.696542008,
- "lines": [
- "C3d",
- "5A",
- "5B",
- "10",
- "17",
- "31",
- "H2",
- "H3",
- "PSA 1"
- ]
+ "lines": ["C3d", "5A", "5B", "10", "17", "31", "H2", "H3", "PSA 1"]
},
{
"stopId": 14133,
@@ -10427,11 +7538,7 @@
},
"latitude": 42.250977575,
"longitude": -8.694471881,
- "lines": [
- "C3d",
- "C3i",
- "17"
- ]
+ "lines": ["C3d", "C3i", "17"]
},
{
"stopId": 14134,
@@ -10440,9 +7547,7 @@
},
"latitude": 42.253208793,
"longitude": -8.686995591,
- "lines": [
- "C3d"
- ]
+ "lines": ["C3d"]
},
{
"stopId": 14135,
@@ -10451,9 +7556,7 @@
},
"latitude": 42.229174145,
"longitude": -8.720143055,
- "lines": [
- "C1"
- ]
+ "lines": ["C1"]
},
{
"stopId": 14136,
@@ -10462,10 +7565,7 @@
},
"latitude": 42.250484372,
"longitude": -8.694878804,
- "lines": [
- "C3d",
- "17"
- ]
+ "lines": ["C3d", "17"]
},
{
"stopId": 14137,
@@ -10474,9 +7574,7 @@
},
"latitude": 42.200003406,
"longitude": -8.753169,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 14138,
@@ -10485,11 +7583,7 @@
},
"latitude": 42.216459201,
"longitude": -8.678591709,
- "lines": [
- "12B",
- "15B",
- "15C"
- ]
+ "lines": ["12B", "15B", "15C"]
},
{
"stopId": 14139,
@@ -10498,11 +7592,7 @@
},
"latitude": 42.227492758,
"longitude": -8.700413366,
- "lines": [
- "6",
- "25",
- "31"
- ]
+ "lines": ["6", "25", "31"]
},
{
"stopId": 14140,
@@ -10511,15 +7601,7 @@
},
"latitude": 42.228210877,
"longitude": -8.699999354,
- "lines": [
- "4C",
- "6",
- "23",
- "25",
- "31",
- "N4",
- "PSA 4"
- ]
+ "lines": ["4C", "6", "23", "25", "31", "N4", "PSA 4"]
},
{
"stopId": 14141,
@@ -10528,13 +7610,7 @@
},
"latitude": 42.231379202,
"longitude": -8.699876213,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "H3"]
},
{
"stopId": 14142,
@@ -10543,9 +7619,7 @@
},
"latitude": 42.231463434,
"longitude": -8.728844425,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 14143,
@@ -10554,9 +7628,7 @@
},
"latitude": 42.229753483,
"longitude": -8.729002675,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 14144,
@@ -10565,9 +7637,7 @@
},
"latitude": 42.226760436,
"longitude": -8.727385303,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 14150,
@@ -10576,9 +7646,7 @@
},
"latitude": 42.232076561,
"longitude": -8.719055236,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 14152,
@@ -10587,9 +7655,7 @@
},
"latitude": 42.204815402,
"longitude": -8.687168969,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 14153,
@@ -10598,10 +7664,7 @@
},
"latitude": 42.205357233,
"longitude": -8.692495739,
- "lines": [
- "6",
- "14"
- ]
+ "lines": ["6", "14"]
},
{
"stopId": 14154,
@@ -10610,9 +7673,7 @@
},
"latitude": 42.19360258,
"longitude": -8.677258993,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 14156,
@@ -10621,9 +7682,7 @@
},
"latitude": 42.203378431,
"longitude": -8.696666863,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 14157,
@@ -10632,9 +7691,7 @@
},
"latitude": 42.202979066,
"longitude": -8.694065121,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 14161,
@@ -10643,10 +7700,7 @@
},
"latitude": 42.224130699,
"longitude": -8.732568248,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 14162,
@@ -10655,11 +7709,7 @@
},
"latitude": 42.211371871,
"longitude": -8.746523782,
- "lines": [
- "5A",
- "11",
- "29"
- ]
+ "lines": ["5A", "11", "29"]
},
{
"stopId": 14163,
@@ -10668,11 +7718,7 @@
},
"latitude": 42.211442202,
"longitude": -8.746227469,
- "lines": [
- "5A",
- "11",
- "29"
- ]
+ "lines": ["5A", "11", "29"]
},
{
"stopId": 14164,
@@ -10681,13 +7727,7 @@
},
"latitude": 42.225172437,
"longitude": -8.744777354,
- "lines": [
- "C3d",
- "C3i",
- "15B",
- "15C",
- "N1"
- ]
+ "lines": ["C3d", "C3i", "15B", "15C", "N1"]
},
{
"stopId": 14165,
@@ -10696,13 +7736,7 @@
},
"latitude": 42.224905029,
"longitude": -8.745285775,
- "lines": [
- "C3d",
- "13",
- "15B",
- "15C",
- "H"
- ]
+ "lines": ["C3d", "13", "15B", "15C", "H"]
},
{
"stopId": 14166,
@@ -10711,15 +7745,7 @@
},
"latitude": 42.225142981,
"longitude": -8.729707944,
- "lines": [
- "4A",
- "4C",
- "7",
- "12B",
- "17",
- "27",
- "PSA 4"
- ]
+ "lines": ["4A", "4C", "7", "12B", "17", "27", "PSA 4"]
},
{
"stopId": 14167,
@@ -10728,11 +7754,7 @@
},
"latitude": 42.225279021,
"longitude": -8.751908648,
- "lines": [
- "6",
- "9B",
- "28"
- ]
+ "lines": ["6", "9B", "28"]
},
{
"stopId": 14168,
@@ -10741,15 +7763,7 @@
},
"latitude": 42.224928285,
"longitude": -8.729631509,
- "lines": [
- "4A",
- "4C",
- "11",
- "12B",
- "17",
- "27",
- "N1"
- ]
+ "lines": ["4A", "4C", "11", "12B", "17", "27", "N1"]
},
{
"stopId": 14169,
@@ -10758,18 +7772,7 @@
},
"latitude": 42.22244224,
"longitude": -8.731271052,
- "lines": [
- "C1",
- "4A",
- "4C",
- "7",
- "12B",
- "16",
- "17",
- "27",
- "LZH",
- "PSA 4"
- ]
+ "lines": ["C1", "4A", "4C", "7", "12B", "16", "17", "27", "LZH", "PSA 4"]
},
{
"stopId": 14170,
@@ -10778,12 +7781,7 @@
},
"latitude": 42.218831744,
"longitude": -8.77571001,
- "lines": [
- "10",
- "15B",
- "15C",
- "N1"
- ]
+ "lines": ["10", "15B", "15C", "N1"]
},
{
"stopId": 14171,
@@ -10792,11 +7790,7 @@
},
"latitude": 42.218844713,
"longitude": -8.775459221,
- "lines": [
- "10",
- "15B",
- "15C"
- ]
+ "lines": ["10", "15B", "15C"]
},
{
"stopId": 14173,
@@ -10805,16 +7799,7 @@
},
"latitude": 42.235900754,
"longitude": -8.731391435,
- "lines": [
- "C1",
- "C3d",
- "A",
- "5A",
- "9B",
- "15C",
- "N4",
- "H1"
- ]
+ "lines": ["C1", "C3d", "A", "5A", "9B", "15C", "N4", "H1"]
},
{
"stopId": 14174,
@@ -10823,10 +7808,7 @@
},
"latitude": 42.211844516,
"longitude": -8.749287921,
- "lines": [
- "11",
- "16"
- ]
+ "lines": ["11", "16"]
},
{
"stopId": 14175,
@@ -10835,9 +7817,7 @@
},
"latitude": 42.211792864,
"longitude": -8.749617832,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 14177,
@@ -10846,11 +7826,7 @@
},
"latitude": 42.22985125,
"longitude": -8.71972059,
- "lines": [
- "12A",
- "14",
- "27"
- ]
+ "lines": ["12A", "14", "27"]
},
{
"stopId": 14178,
@@ -10859,10 +7835,7 @@
},
"latitude": 42.233009005,
"longitude": -8.724497604,
- "lines": [
- "12A",
- "27"
- ]
+ "lines": ["12A", "27"]
},
{
"stopId": 14179,
@@ -10871,11 +7844,7 @@
},
"latitude": 42.213260612,
"longitude": -8.722562576,
- "lines": [
- "A",
- "18B",
- "18H"
- ]
+ "lines": ["A", "18B", "18H"]
},
{
"stopId": 14180,
@@ -10884,13 +7853,7 @@
},
"latitude": 42.224749197,
"longitude": -8.707320585,
- "lines": [
- "4C",
- "23",
- "31",
- "N4",
- "PSA 4"
- ]
+ "lines": ["4C", "23", "31", "N4", "PSA 4"]
},
{
"stopId": 14181,
@@ -10899,9 +7862,7 @@
},
"latitude": 42.210954716,
"longitude": -8.727776522,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 14182,
@@ -10910,11 +7871,7 @@
},
"latitude": 42.211618245,
"longitude": -8.72147159,
- "lines": [
- "A",
- "18B",
- "18H"
- ]
+ "lines": ["A", "18B", "18H"]
},
{
"stopId": 14183,
@@ -10923,9 +7880,7 @@
},
"latitude": 42.220622235,
"longitude": -8.654888024,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 14184,
@@ -10934,9 +7889,7 @@
},
"latitude": 42.217384986,
"longitude": -8.657082399,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 14185,
@@ -10945,9 +7898,7 @@
},
"latitude": 42.219667098,
"longitude": -8.659470523,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 14186,
@@ -10956,9 +7907,7 @@
},
"latitude": 42.218044517,
"longitude": -8.662618478,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 14187,
@@ -10967,9 +7916,7 @@
},
"latitude": 42.221588029,
"longitude": -8.662035851,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 14188,
@@ -10978,9 +7925,7 @@
},
"latitude": 42.217595578,
"longitude": -8.661414166,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 14189,
@@ -10989,9 +7934,7 @@
},
"latitude": 42.226081487,
"longitude": -8.654133203,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 14190,
@@ -11000,9 +7943,7 @@
},
"latitude": 42.225080876,
"longitude": -8.683314171,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14191,
@@ -11011,9 +7952,7 @@
},
"latitude": 42.223737557,
"longitude": -8.682141153,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14192,
@@ -11022,9 +7961,7 @@
},
"latitude": 42.231625599,
"longitude": -8.652046516,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14193,
@@ -11033,9 +7970,7 @@
},
"latitude": 42.230916628,
"longitude": -8.641628816,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14194,
@@ -11044,9 +7979,7 @@
},
"latitude": 42.228639377,
"longitude": -8.640978361,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14195,
@@ -11055,9 +7988,7 @@
},
"latitude": 42.226263256,
"longitude": -8.644091084,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14196,
@@ -11066,9 +7997,7 @@
},
"latitude": 42.225296,
"longitude": -8.649527921,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14197,
@@ -11077,9 +8006,7 @@
},
"latitude": 42.225912491,
"longitude": -8.653698801,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14198,
@@ -11088,10 +8015,7 @@
},
"latitude": 42.227231301,
"longitude": -8.659997969,
- "lines": [
- "15A",
- "25"
- ]
+ "lines": ["15A", "25"]
},
{
"stopId": 14199,
@@ -11100,9 +8024,7 @@
},
"latitude": 42.223755464,
"longitude": -8.682041911,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14200,
@@ -11111,9 +8033,7 @@
},
"latitude": 42.225112655,
"longitude": -8.683402684,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14201,
@@ -11122,9 +8042,7 @@
},
"latitude": 42.226291056,
"longitude": -8.641647591,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14202,
@@ -11133,13 +8051,7 @@
},
"latitude": 42.231273786,
"longitude": -8.700145645,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "H3"]
},
{
"stopId": 14203,
@@ -11148,10 +8060,7 @@
},
"latitude": 42.226524401,
"longitude": -8.661251786,
- "lines": [
- "11",
- "15A"
- ]
+ "lines": ["11", "15A"]
},
{
"stopId": 14204,
@@ -11160,11 +8069,7 @@
},
"latitude": 42.22312688,
"longitude": -8.681864633,
- "lines": [
- "25",
- "31",
- "H3"
- ]
+ "lines": ["25", "31", "H3"]
},
{
"stopId": 14205,
@@ -11173,9 +8078,7 @@
},
"latitude": 42.178408629,
"longitude": -8.733198549,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14206,
@@ -11184,17 +8087,7 @@
},
"latitude": 42.220514043,
"longitude": -8.731700217,
- "lines": [
- "C3i",
- "7",
- "11",
- "13",
- "15A",
- "16",
- "23",
- "29",
- "H2"
- ]
+ "lines": ["C3i", "7", "11", "13", "15A", "16", "23", "29", "H2"]
},
{
"stopId": 14207,
@@ -11203,9 +8096,7 @@
},
"latitude": 42.161212162,
"longitude": -8.716377433,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14208,
@@ -11214,9 +8105,7 @@
},
"latitude": 42.162237207,
"longitude": -8.71885531,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14209,
@@ -11225,9 +8114,7 @@
},
"latitude": 42.173333822,
"longitude": -8.705439803,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14210,
@@ -11236,9 +8123,7 @@
},
"latitude": 42.173077394,
"longitude": -8.705659744,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14211,
@@ -11247,9 +8132,7 @@
},
"latitude": 42.165479162,
"longitude": -8.721775005,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14212,
@@ -11258,9 +8141,7 @@
},
"latitude": 42.164694101,
"longitude": -8.724472962,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14213,
@@ -11269,9 +8150,7 @@
},
"latitude": 42.169153241,
"longitude": -8.729001464,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14214,
@@ -11280,9 +8159,7 @@
},
"latitude": 42.175760907,
"longitude": -8.734516924,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14215,
@@ -11291,9 +8168,7 @@
},
"latitude": 42.175592169,
"longitude": -8.734477788,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14216,
@@ -11302,9 +8177,7 @@
},
"latitude": 42.169143301,
"longitude": -8.729076566,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14217,
@@ -11313,9 +8186,7 @@
},
"latitude": 42.164570839,
"longitude": -8.724561475,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14218,
@@ -11324,9 +8195,7 @@
},
"latitude": 42.165288305,
"longitude": -8.721367309,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14219,
@@ -11335,9 +8204,7 @@
},
"latitude": 42.159500512,
"longitude": -8.718247279,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14220,
@@ -11346,9 +8213,7 @@
},
"latitude": 42.225657321,
"longitude": -8.681467666,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14221,
@@ -11357,9 +8222,7 @@
},
"latitude": 42.225809218,
"longitude": -8.681652991,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14222,
@@ -11368,9 +8231,7 @@
},
"latitude": 42.162959525,
"longitude": -8.716541365,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14223,
@@ -11484,9 +8345,7 @@
},
"latitude": 42.221696342,
"longitude": -8.632840997,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 14231,
@@ -11495,9 +8354,7 @@
},
"latitude": 42.235542066,
"longitude": -8.652196565,
- "lines": [
- "9B"
- ]
+ "lines": ["9B"]
},
{
"stopId": 14232,
@@ -11506,10 +8363,7 @@
},
"latitude": 42.235317662,
"longitude": -8.652094641,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 14233,
@@ -11518,10 +8372,7 @@
},
"latitude": 42.241037275,
"longitude": -8.668947597,
- "lines": [
- "9B",
- "28"
- ]
+ "lines": ["9B", "28"]
},
{
"stopId": 14236,
@@ -11530,9 +8381,7 @@
},
"latitude": 42.196308523,
"longitude": -8.723526935,
- "lines": [
- "12B"
- ]
+ "lines": ["12B"]
},
{
"stopId": 14237,
@@ -11541,9 +8390,7 @@
},
"latitude": 42.196119748,
"longitude": -8.723457198,
- "lines": [
- "12B"
- ]
+ "lines": ["12B"]
},
{
"stopId": 14238,
@@ -11552,9 +8399,7 @@
},
"latitude": 42.20458802,
"longitude": -8.714617309,
- "lines": [
- "18B"
- ]
+ "lines": ["18B"]
},
{
"stopId": 14240,
@@ -11563,9 +8408,7 @@
},
"latitude": 42.197985091,
"longitude": -8.714523201,
- "lines": [
- "18B"
- ]
+ "lines": ["18B"]
},
{
"stopId": 14241,
@@ -11574,9 +8417,7 @@
},
"latitude": 42.197842023,
"longitude": -8.71471632,
- "lines": [
- "18B"
- ]
+ "lines": ["18B"]
},
{
"stopId": 14242,
@@ -11585,9 +8426,7 @@
},
"latitude": 42.196378259,
"longitude": -8.716979043,
- "lines": [
- "18B"
- ]
+ "lines": ["18B"]
},
{
"stopId": 14243,
@@ -11596,9 +8435,7 @@
},
"latitude": 42.196539214,
"longitude": -8.716874437,
- "lines": [
- "18B"
- ]
+ "lines": ["18B"]
},
{
"stopId": 14244,
@@ -11607,11 +8444,7 @@
},
"latitude": 42.198216234,
"longitude": -8.721498041,
- "lines": [
- "18B",
- "18H",
- "27"
- ]
+ "lines": ["18B", "18H", "27"]
},
{
"stopId": 14245,
@@ -11620,15 +8453,7 @@
},
"latitude": 42.23691728,
"longitude": -8.716743143,
- "lines": [
- "C3d",
- "C3i",
- "5B",
- "10",
- "16",
- "17",
- "N1"
- ]
+ "lines": ["C3d", "C3i", "5B", "10", "16", "17", "N1"]
},
{
"stopId": 14247,
@@ -11637,9 +8462,7 @@
},
"latitude": 42.200511179,
"longitude": -8.769110573,
- "lines": [
- "12A"
- ]
+ "lines": ["12A"]
},
{
"stopId": 14248,
@@ -11648,9 +8471,7 @@
},
"latitude": 42.200580723,
"longitude": -8.76911862,
- "lines": [
- "12A"
- ]
+ "lines": ["12A"]
},
{
"stopId": 14249,
@@ -11659,9 +8480,7 @@
},
"latitude": 42.177662554,
"longitude": -8.800157923,
- "lines": [
- "12A"
- ]
+ "lines": ["12A"]
},
{
"stopId": 14250,
@@ -11670,10 +8489,7 @@
},
"latitude": 42.234914814,
"longitude": -8.658983411,
- "lines": [
- "A",
- "9B"
- ]
+ "lines": ["A", "9B"]
},
{
"stopId": 14251,
@@ -11682,11 +8498,7 @@
},
"latitude": 42.234817602,
"longitude": -8.65882027,
- "lines": [
- "A",
- "9B",
- "27"
- ]
+ "lines": ["A", "9B", "27"]
},
{
"stopId": 14252,
@@ -11695,9 +8507,7 @@
},
"latitude": 42.165934208,
"longitude": -8.707243001,
- "lines": [
- "U1"
- ]
+ "lines": ["U1"]
},
{
"stopId": 14253,
@@ -11706,9 +8516,7 @@
},
"latitude": 42.164455564,
"longitude": -8.707223843,
- "lines": [
- "U1"
- ]
+ "lines": ["U1"]
},
{
"stopId": 14255,
@@ -11717,9 +8525,7 @@
},
"latitude": 42.225111918,
"longitude": -8.726733526,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 14256,
@@ -11728,9 +8534,7 @@
},
"latitude": 42.222198901,
"longitude": -8.728317834,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 14257,
@@ -11739,9 +8543,7 @@
},
"latitude": 42.223448271,
"longitude": -8.725547112,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 14258,
@@ -11750,9 +8552,7 @@
},
"latitude": 42.224870416,
"longitude": -8.723632015,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 14259,
@@ -11761,9 +8561,7 @@
},
"latitude": 42.227088982,
"longitude": -8.721545256,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 14260,
@@ -11772,16 +8570,7 @@
},
"latitude": 42.228741057,
"longitude": -8.71961914,
- "lines": [
- "7",
- "14",
- "15A",
- "16",
- "18A",
- "18B",
- "18H",
- "H2"
- ]
+ "lines": ["7", "14", "15A", "16", "18A", "18B", "18H", "H2"]
},
{
"stopId": 14261,
@@ -11790,9 +8579,7 @@
},
"latitude": 42.228644118,
"longitude": -8.720692314,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 14264,
@@ -11831,12 +8618,7 @@
},
"latitude": 42.221892792,
"longitude": -8.758191526,
- "lines": [
- "10",
- "15B",
- "15C",
- "N1"
- ]
+ "lines": ["10", "15B", "15C", "N1"]
},
{
"stopId": 14268,
@@ -11845,11 +8627,7 @@
},
"latitude": 42.221731945,
"longitude": -8.758417175,
- "lines": [
- "10",
- "15B",
- "15C"
- ]
+ "lines": ["10", "15B", "15C"]
},
{
"stopId": 14270,
@@ -11858,9 +8636,7 @@
},
"latitude": 42.196619218,
"longitude": -8.743240048,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14271,
@@ -11869,9 +8645,7 @@
},
"latitude": 42.196050474,
"longitude": -8.745105715,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14273,
@@ -11880,9 +8654,7 @@
},
"latitude": 42.219274062,
"longitude": -8.656419893,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 14277,
@@ -11891,9 +8663,7 @@
},
"latitude": 42.251776399,
"longitude": -8.69414009,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14278,
@@ -11902,9 +8672,7 @@
},
"latitude": 42.25430173,
"longitude": -8.692915616,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14279,
@@ -11913,9 +8681,7 @@
},
"latitude": 42.257069093,
"longitude": -8.690786611,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14280,
@@ -11924,9 +8690,7 @@
},
"latitude": 42.254604716,
"longitude": -8.692539681,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14281,
@@ -11935,9 +8699,7 @@
},
"latitude": 42.251596707,
"longitude": -8.69420171,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14287,
@@ -11946,9 +8708,7 @@
},
"latitude": 42.25020334,
"longitude": -8.701924083,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14288,
@@ -11957,9 +8717,7 @@
},
"latitude": 42.249218849,
"longitude": -8.704807605,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14289,
@@ -11968,9 +8726,7 @@
},
"latitude": 42.246484972,
"longitude": -8.705864005,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14290,
@@ -11979,9 +8735,7 @@
},
"latitude": 42.244107542,
"longitude": -8.706343638,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14291,
@@ -11990,12 +8744,7 @@
},
"latitude": 42.209935219,
"longitude": -8.671464542,
- "lines": [
- "12B",
- "15B",
- "15C",
- "U2"
- ]
+ "lines": ["12B", "15B", "15C", "U2"]
},
{
"stopId": 14294,
@@ -12004,9 +8753,7 @@
},
"latitude": 42.190684424876565,
"longitude": -8.799308812770041,
- "lines": [
- "12A"
- ]
+ "lines": ["12A"]
},
{
"stopId": 14295,
@@ -12015,10 +8762,7 @@
},
"latitude": 42.230436358,
"longitude": -8.731437473,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 14296,
@@ -12027,9 +8771,7 @@
},
"latitude": 42.248375604,
"longitude": -8.675578666,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 14299,
@@ -12038,13 +8780,7 @@
},
"latitude": 42.213644883,
"longitude": -8.774567214,
- "lines": [
- "C3i",
- "15A",
- "23",
- "N1",
- "N4"
- ]
+ "lines": ["C3i", "15A", "23", "N1", "N4"]
},
{
"stopId": 14300,
@@ -12053,11 +8789,7 @@
},
"latitude": 42.217907548,
"longitude": -8.73707436,
- "lines": [
- "5A",
- "11",
- "29"
- ]
+ "lines": ["5A", "11", "29"]
},
{
"stopId": 14301,
@@ -12066,11 +8798,7 @@
},
"latitude": 42.218257459,
"longitude": -8.736328798,
- "lines": [
- "5A",
- "11",
- "29"
- ]
+ "lines": ["5A", "11", "29"]
},
{
"stopId": 14302,
@@ -12079,12 +8807,7 @@
},
"latitude": 42.214542094,
"longitude": -8.696431619,
- "lines": [
- "12A",
- "12B",
- "13",
- "H3"
- ]
+ "lines": ["12A", "12B", "13", "H3"]
},
{
"stopId": 14304,
@@ -12093,12 +8816,7 @@
},
"latitude": 42.221313975,
"longitude": -8.681944471,
- "lines": [
- "12A",
- "12B",
- "13",
- "31"
- ]
+ "lines": ["12A", "12B", "13", "31"]
},
{
"stopId": 14307,
@@ -12107,9 +8825,7 @@
},
"latitude": 42.224464416,
"longitude": -8.727967343,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 14308,
@@ -12118,9 +8834,7 @@
},
"latitude": 42.16328558,
"longitude": -8.716707662,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14309,
@@ -12129,9 +8843,7 @@
},
"latitude": 42.161067029,
"longitude": -8.716468628,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14310,
@@ -12140,9 +8852,7 @@
},
"latitude": 42.159564137,
"longitude": -8.718295559,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14311,
@@ -12151,9 +8861,7 @@
},
"latitude": 42.162720337,
"longitude": -8.718900908,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14314,
@@ -12162,9 +8870,7 @@
},
"latitude": 42.227212568,
"longitude": -8.720183032,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 14315,
@@ -12173,9 +8879,7 @@
},
"latitude": 42.22393338,
"longitude": -8.716924148,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 14317,
@@ -12184,9 +8888,7 @@
},
"latitude": 42.222723933,
"longitude": -8.719150283,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 14318,
@@ -12195,9 +8897,7 @@
},
"latitude": 42.222591256,
"longitude": -8.717753486,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 14319,
@@ -12206,9 +8906,7 @@
},
"latitude": 42.221002214,
"longitude": -8.72027208,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 14320,
@@ -12217,9 +8915,7 @@
},
"latitude": 42.220799025,
"longitude": -8.723345356,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 14321,
@@ -12228,9 +8924,7 @@
},
"latitude": 42.218131641,
"longitude": -8.723120057,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 14322,
@@ -12239,9 +8933,7 @@
},
"latitude": 42.217813814,
"longitude": -8.721352482,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 14323,
@@ -12250,9 +8942,7 @@
},
"latitude": 42.217059742,
"longitude": -8.720340235,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 14324,
@@ -12261,9 +8951,7 @@
},
"latitude": 42.217256401,
"longitude": -8.720101519,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 14325,
@@ -12272,9 +8960,7 @@
},
"latitude": 42.217848286,
"longitude": -8.7214811,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 14326,
@@ -12283,9 +8969,7 @@
},
"latitude": 42.218038279,
"longitude": -8.722489738,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 14328,
@@ -12294,11 +8978,7 @@
},
"latitude": 42.208988415,
"longitude": -8.746151897,
- "lines": [
- "LZH",
- "PSA 1",
- "PSA 4"
- ]
+ "lines": ["LZH", "PSA 1", "PSA 4"]
},
{
"stopId": 14329,
@@ -12307,11 +8987,7 @@
},
"latitude": 42.210124372,
"longitude": -8.741139991,
- "lines": [
- "LZH",
- "PSA 1",
- "PSA 4"
- ]
+ "lines": ["LZH", "PSA 1", "PSA 4"]
},
{
"stopId": 14330,
@@ -12320,9 +8996,7 @@
},
"latitude": 42.198072667,
"longitude": -8.682624653,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 14331,
@@ -12352,18 +9026,7 @@
},
"latitude": 42.240189011,
"longitude": -8.726765331,
- "lines": [
- "C1",
- "C3d",
- "A",
- "5A",
- "9B",
- "10",
- "15B",
- "15C",
- "28",
- "N4"
- ]
+ "lines": ["C1", "C3d", "A", "5A", "9B", "10", "15B", "15C", "28", "N4"]
},
{
"stopId": 14335,
@@ -12372,9 +9035,7 @@
},
"latitude": 42.212692269,
"longitude": -8.675661599,
- "lines": [
- "31"
- ]
+ "lines": ["31"]
},
{
"stopId": 14336,
@@ -12383,10 +9044,7 @@
},
"latitude": 42.21447626,
"longitude": -8.75600551,
- "lines": [
- "13",
- "15A"
- ]
+ "lines": ["13", "15A"]
},
{
"stopId": 14337,
@@ -12395,17 +9053,7 @@
},
"latitude": 42.213080218,
"longitude": -8.754660224,
- "lines": [
- "5A",
- "5B",
- "13",
- "15A",
- "15B",
- "N4",
- "H",
- "PSA 1",
- "PSA 4"
- ]
+ "lines": ["5A", "5B", "13", "15A", "15B", "N4", "H", "PSA 1", "PSA 4"]
},
{
"stopId": 14345,
@@ -12414,9 +9062,7 @@
},
"latitude": 42.237269816,
"longitude": -8.685138009,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 14346,
@@ -12425,9 +9071,7 @@
},
"latitude": 42.237287688,
"longitude": -8.685019992,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 14347,
@@ -12436,9 +9080,7 @@
},
"latitude": 42.23913765,
"longitude": -8.683873934,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 14348,
@@ -12447,9 +9089,7 @@
},
"latitude": 42.238950988,
"longitude": -8.683793467,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 14349,
@@ -12458,9 +9098,7 @@
},
"latitude": 42.244717312,
"longitude": -8.678473607,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 14350,
@@ -12469,9 +9107,7 @@
},
"latitude": 42.244849353,
"longitude": -8.678366319,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 14353,
@@ -12480,9 +9116,7 @@
},
"latitude": 42.248151648,
"longitude": -8.675976097,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 14354,
@@ -12491,14 +9125,7 @@
},
"latitude": 42.225911433,
"longitude": -8.675526243,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 14355,
@@ -12507,14 +9134,7 @@
},
"latitude": 42.226638363,
"longitude": -8.676135104,
- "lines": [
- "11",
- "15A",
- "15B",
- "15C",
- "31",
- "H3"
- ]
+ "lines": ["11", "15A", "15B", "15C", "31", "H3"]
},
{
"stopId": 14356,
@@ -12523,9 +9143,7 @@
},
"latitude": 42.192009114,
"longitude": -8.783993123,
- "lines": [
- "12A"
- ]
+ "lines": ["12A"]
},
{
"stopId": 14357,
@@ -12534,9 +9152,7 @@
},
"latitude": 42.191796473,
"longitude": -8.784014088,
- "lines": [
- "12A"
- ]
+ "lines": ["12A"]
},
{
"stopId": 14358,
@@ -12545,12 +9161,7 @@
},
"latitude": 42.209054557,
"longitude": -8.75715865,
- "lines": [
- "5A",
- "5B",
- "13",
- "N4"
- ]
+ "lines": ["5A", "5B", "13", "N4"]
},
{
"stopId": 14359,
@@ -12559,12 +9170,7 @@
},
"latitude": 42.212235738,
"longitude": -8.755011746,
- "lines": [
- "5A",
- "5B",
- "13",
- "N4"
- ]
+ "lines": ["5A", "5B", "13", "N4"]
},
{
"stopId": 14360,
@@ -12573,15 +9179,7 @@
},
"latitude": 42.208965857,
"longitude": -8.757020567,
- "lines": [
- "5A",
- "5B",
- "13",
- "N4",
- "H",
- "PSA 1",
- "PSA 4"
- ]
+ "lines": ["5A", "5B", "13", "N4", "H", "PSA 1", "PSA 4"]
},
{
"stopId": 14361,
@@ -12590,16 +9188,7 @@
},
"latitude": 42.209770472,
"longitude": -8.755295907,
- "lines": [
- "5A",
- "5B",
- "13",
- "15A",
- "N4",
- "H",
- "PSA 1",
- "PSA 4"
- ]
+ "lines": ["5A", "5B", "13", "15A", "N4", "H", "PSA 1", "PSA 4"]
},
{
"stopId": 14362,
@@ -12608,12 +9197,7 @@
},
"latitude": 42.202937872,
"longitude": -8.776830486,
- "lines": [
- "C3d",
- "4A",
- "4C",
- "10"
- ]
+ "lines": ["C3d", "4A", "4C", "10"]
},
{
"stopId": 14364,
@@ -12622,9 +9206,7 @@
},
"latitude": 42.175757186,
"longitude": -8.671074371,
- "lines": [
- "15C"
- ]
+ "lines": ["15C"]
},
{
"stopId": 14365,
@@ -12633,9 +9215,7 @@
},
"latitude": 42.181650197,
"longitude": -8.667515723,
- "lines": [
- "15C"
- ]
+ "lines": ["15C"]
},
{
"stopId": 14372,
@@ -12644,9 +9224,7 @@
},
"latitude": 42.221887526,
"longitude": -8.720011371,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 14376,
@@ -12655,9 +9233,7 @@
},
"latitude": 42.226612651,
"longitude": -8.699658408,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14377,
@@ -12666,9 +9242,7 @@
},
"latitude": 42.226582661,
"longitude": -8.700385762,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14378,
@@ -12677,9 +9251,7 @@
},
"latitude": 42.22396201,
"longitude": -8.653340726,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14381,
@@ -12688,9 +9260,7 @@
},
"latitude": 42.195647685,
"longitude": -8.728974153,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14383,
@@ -12699,9 +9269,7 @@
},
"latitude": 42.174718265,
"longitude": -8.713684656,
- "lines": [
- "U1"
- ]
+ "lines": ["U1"]
},
{
"stopId": 14384,
@@ -12710,9 +9278,7 @@
},
"latitude": 42.175073486,
"longitude": -8.713494654,
- "lines": [
- "U1"
- ]
+ "lines": ["U1"]
},
{
"stopId": 14385,
@@ -12721,10 +9287,7 @@
},
"latitude": 42.240712912,
"longitude": -8.6919418,
- "lines": [
- "4A",
- "24"
- ]
+ "lines": ["4A", "24"]
},
{
"stopId": 14386,
@@ -12733,10 +9296,7 @@
},
"latitude": 42.238020208,
"longitude": -8.691543884,
- "lines": [
- "4A",
- "24"
- ]
+ "lines": ["4A", "24"]
},
{
"stopId": 14387,
@@ -12745,10 +9305,7 @@
},
"latitude": 42.237167043,
"longitude": -8.693243792,
- "lines": [
- "4A",
- "24"
- ]
+ "lines": ["4A", "24"]
},
{
"stopId": 14388,
@@ -12757,16 +9314,7 @@
},
"latitude": 42.211610124,
"longitude": -8.754550253,
- "lines": [
- "5A",
- "5B",
- "13",
- "15A",
- "N4",
- "H",
- "PSA 1",
- "PSA 4"
- ]
+ "lines": ["5A", "5B", "13", "15A", "N4", "H", "PSA 1", "PSA 4"]
},
{
"stopId": 14389,
@@ -12775,12 +9323,7 @@
},
"latitude": 42.210212603,
"longitude": -8.755079989,
- "lines": [
- "5A",
- "5B",
- "13",
- "N4"
- ]
+ "lines": ["5A", "5B", "13", "N4"]
},
{
"stopId": 14390,
@@ -12789,10 +9332,7 @@
},
"latitude": 42.241570883,
"longitude": -8.655380719,
- "lines": [
- "9B",
- "28"
- ]
+ "lines": ["9B", "28"]
},
{
"stopId": 14391,
@@ -12801,10 +9341,7 @@
},
"latitude": 42.241652296,
"longitude": -8.655302935,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 14392,
@@ -12813,9 +9350,7 @@
},
"latitude": 42.209458591,
"longitude": -8.760561083,
- "lines": [
- "5A"
- ]
+ "lines": ["5A"]
},
{
"stopId": 14393,
@@ -12824,10 +9359,7 @@
},
"latitude": 42.209568936,
"longitude": -8.760777001,
- "lines": [
- "5A",
- "N4"
- ]
+ "lines": ["5A", "N4"]
},
{
"stopId": 14395,
@@ -12836,11 +9368,7 @@
},
"latitude": 42.215601037,
"longitude": -8.675477665,
- "lines": [
- "12B",
- "15B",
- "15C"
- ]
+ "lines": ["12B", "15B", "15C"]
},
{
"stopId": 14396,
@@ -12849,16 +9377,7 @@
},
"latitude": 42.239965365,
"longitude": -8.708024282,
- "lines": [
- "C3d",
- "5B",
- "10",
- "17",
- "31",
- "H2",
- "H3",
- "PSA 1"
- ]
+ "lines": ["C3d", "5B", "10", "17", "31", "H2", "H3", "PSA 1"]
},
{
"stopId": 14397,
@@ -12867,15 +9386,7 @@
},
"latitude": 42.23973713,
"longitude": -8.708397682,
- "lines": [
- "C3d",
- "C3i",
- "5B",
- "10",
- "17",
- "N1",
- "H3"
- ]
+ "lines": ["C3d", "C3i", "5B", "10", "17", "N1", "H3"]
},
{
"stopId": 14398,
@@ -12884,15 +9395,7 @@
},
"latitude": 42.22406594,
"longitude": -8.723691036,
- "lines": [
- "C3d",
- "13",
- "15A",
- "23",
- "29",
- "H2",
- "PSA 1"
- ]
+ "lines": ["C3d", "13", "15A", "23", "29", "H2", "PSA 1"]
},
{
"stopId": 14401,
@@ -12901,10 +9404,7 @@
},
"latitude": 42.21072167,
"longitude": -8.76212542,
- "lines": [
- "4A",
- "12A"
- ]
+ "lines": ["4A", "12A"]
},
{
"stopId": 14402,
@@ -12913,10 +9413,7 @@
},
"latitude": 42.210791203,
"longitude": -8.761940347,
- "lines": [
- "4A",
- "12A"
- ]
+ "lines": ["4A", "12A"]
},
{
"stopId": 14403,
@@ -12925,9 +9422,7 @@
},
"latitude": 42.25049654,
"longitude": -8.698390035,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14404,
@@ -12936,9 +9431,7 @@
},
"latitude": 42.251785642,
"longitude": -8.696871994,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14406,
@@ -12947,9 +9440,7 @@
},
"latitude": 42.249462772,
"longitude": -8.699772952,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14408,
@@ -12958,9 +9449,7 @@
},
"latitude": 42.248885006,
"longitude": -8.698128758,
- "lines": [
- "17"
- ]
+ "lines": ["17"]
},
{
"stopId": 14409,
@@ -12969,10 +9458,7 @@
},
"latitude": 42.204188441,
"longitude": -8.670257126,
- "lines": [
- "15B",
- "15C"
- ]
+ "lines": ["15B", "15C"]
},
{
"stopId": 14410,
@@ -12981,9 +9467,7 @@
},
"latitude": 42.204639457,
"longitude": -8.670329545,
- "lines": [
- "15C"
- ]
+ "lines": ["15C"]
},
{
"stopId": 14411,
@@ -12992,9 +9476,7 @@
},
"latitude": 42.205174543,
"longitude": -8.698209134,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 14412,
@@ -13003,9 +9485,7 @@
},
"latitude": 42.20497586,
"longitude": -8.697957006,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 14413,
@@ -13014,9 +9494,7 @@
},
"latitude": 42.173955568,
"longitude": -8.703050076,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 14414,
@@ -13025,9 +9503,7 @@
},
"latitude": 42.221587211,
"longitude": -8.665078444,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 14415,
@@ -13036,9 +9512,7 @@
},
"latitude": 42.221557416,
"longitude": -8.665381534,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 14416,
@@ -13047,9 +9521,7 @@
},
"latitude": 42.225468623,
"longitude": -8.691491081,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 14419,
@@ -13058,9 +9530,7 @@
},
"latitude": 42.201138734,
"longitude": -8.688585073,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 14420,
@@ -13069,9 +9539,7 @@
},
"latitude": 42.201419233,
"longitude": -8.688526069,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 14421,
@@ -13080,9 +9548,7 @@
},
"latitude": 42.186683264,
"longitude": -8.669320703,
- "lines": [
- "15C"
- ]
+ "lines": ["15C"]
},
{
"stopId": 14422,
@@ -13091,9 +9557,7 @@
},
"latitude": 42.18695315,
"longitude": -8.669514066,
- "lines": [
- "15C"
- ]
+ "lines": ["15C"]
},
{
"stopId": 14425,
@@ -13102,9 +9566,7 @@
},
"latitude": 42.232253792,
"longitude": -8.707208575,
- "lines": [
- "31"
- ]
+ "lines": ["31"]
},
{
"stopId": 14475,
@@ -13113,9 +9575,7 @@
},
"latitude": 42.222992354,
"longitude": -8.728300382,
- "lines": [
- "C1"
- ]
+ "lines": ["C1"]
},
{
"stopId": 14890,
@@ -13124,14 +9584,7 @@
},
"latitude": 42.207545331,
"longitude": -8.758718406,
- "lines": [
- "5B",
- "13",
- "N4",
- "H",
- "PSA 1",
- "PSA 4"
- ]
+ "lines": ["5B", "13", "N4", "H", "PSA 1", "PSA 4"]
},
{
"stopId": 14892,
@@ -13140,15 +9593,7 @@
},
"latitude": 42.224929414,
"longitude": -8.735414067,
- "lines": [
- "C1",
- "C3d",
- "A",
- "9B",
- "15C",
- "N4",
- "H1"
- ]
+ "lines": ["C1", "C3d", "A", "9B", "15C", "N4", "H1"]
},
{
"stopId": 14893,
@@ -13157,10 +9602,7 @@
},
"latitude": 42.243157956,
"longitude": -8.666962176,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 14894,
@@ -13169,12 +9611,7 @@
},
"latitude": 42.211736934,
"longitude": -8.733337505,
- "lines": [
- "7",
- "12B",
- "17",
- "H1"
- ]
+ "lines": ["7", "12B", "17", "H1"]
},
{
"stopId": 14895,
@@ -13183,9 +9620,7 @@
},
"latitude": 42.241392275,
"longitude": -8.681203235,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 14896,
@@ -13194,9 +9629,7 @@
},
"latitude": 42.241385532,
"longitude": -8.681400937,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 14897,
@@ -13205,9 +9638,7 @@
},
"latitude": 42.213239161,
"longitude": -8.67854147,
- "lines": [
- "31"
- ]
+ "lines": ["31"]
},
{
"stopId": 14898,
@@ -13216,9 +9647,7 @@
},
"latitude": 42.213239161,
"longitude": -8.678369808,
- "lines": [
- "31"
- ]
+ "lines": ["31"]
},
{
"stopId": 14899,
@@ -13227,11 +9656,7 @@
},
"latitude": 42.225485719,
"longitude": -8.730501434,
- "lines": [
- "5A",
- "5B",
- "12A"
- ]
+ "lines": ["5A", "5B", "12A"]
},
{
"stopId": 14900,
@@ -13240,10 +9665,7 @@
},
"latitude": 42.217196117,
"longitude": -8.743726669,
- "lines": [
- "23",
- "N4"
- ]
+ "lines": ["23", "N4"]
},
{
"stopId": 14901,
@@ -13252,12 +9674,7 @@
},
"latitude": 42.220211003,
"longitude": -8.734183023,
- "lines": [
- "C3i",
- "10",
- "11",
- "15A"
- ]
+ "lines": ["C3i", "10", "11", "15A"]
},
{
"stopId": 14903,
@@ -13266,10 +9683,7 @@
},
"latitude": 42.23174719,
"longitude": -8.731081308,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 14905,
@@ -13278,9 +9692,7 @@
},
"latitude": 42.249981353,
"longitude": -8.667186504,
- "lines": [
- "9B"
- ]
+ "lines": ["9B"]
},
{
"stopId": 14906,
@@ -13289,10 +9701,7 @@
},
"latitude": 42.232479787,
"longitude": -8.654890792,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 14907,
@@ -13301,10 +9710,7 @@
},
"latitude": 42.233655479,
"longitude": -8.653300242,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 14908,
@@ -13313,9 +9719,7 @@
},
"latitude": 42.233829075,
"longitude": -8.653458259,
- "lines": [
- "9B"
- ]
+ "lines": ["9B"]
},
{
"stopId": 14909,
@@ -13324,9 +9728,7 @@
},
"latitude": 42.232663198,
"longitude": -8.655097059,
- "lines": [
- "9B"
- ]
+ "lines": ["9B"]
},
{
"stopId": 14910,
@@ -13335,11 +9737,7 @@
},
"latitude": 42.21025095,
"longitude": -8.704036986,
- "lines": [
- "18A",
- "18B",
- "H3"
- ]
+ "lines": ["18A", "18B", "H3"]
},
{
"stopId": 14911,
@@ -13348,11 +9746,7 @@
},
"latitude": 42.208830737,
"longitude": -8.706971174,
- "lines": [
- "18A",
- "18B",
- "H3"
- ]
+ "lines": ["18A", "18B", "H3"]
},
{
"stopId": 15001,
@@ -13361,9 +9755,7 @@
},
"latitude": 42.176053629,
"longitude": -8.709460132,
- "lines": [
- "PTL"
- ]
+ "lines": ["PTL"]
},
{
"stopId": 15002,
@@ -13372,9 +9764,7 @@
},
"latitude": 42.177194637,
"longitude": -8.707850807,
- "lines": [
- "PTL"
- ]
+ "lines": ["PTL"]
},
{
"stopId": 15003,
@@ -13383,9 +9773,7 @@
},
"latitude": 42.178124939,
"longitude": -8.706606262,
- "lines": [
- "PTL"
- ]
+ "lines": ["PTL"]
},
{
"stopId": 15004,
@@ -13394,9 +9782,7 @@
},
"latitude": 42.176503017,
"longitude": -8.710007303,
- "lines": [
- "PTL"
- ]
+ "lines": ["PTL"]
},
{
"stopId": 20009,
@@ -13405,9 +9791,7 @@
},
"latitude": 42.154843231,
"longitude": -8.67357438,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 20010,
@@ -13416,11 +9800,7 @@
},
"latitude": 42.212824845,
"longitude": -8.737161077,
- "lines": [
- "16",
- "23",
- "H"
- ]
+ "lines": ["16", "23", "H"]
},
{
"stopId": 20011,
@@ -13429,11 +9809,7 @@
},
"latitude": 42.213089061,
"longitude": -8.733392573,
- "lines": [
- "16",
- "23",
- "H"
- ]
+ "lines": ["16", "23", "H"]
},
{
"stopId": 20012,
@@ -13442,13 +9818,7 @@
},
"latitude": 42.215888032,
"longitude": -8.732331627,
- "lines": [
- "A",
- "16",
- "23",
- "27",
- "H2"
- ]
+ "lines": ["A", "16", "23", "27", "H2"]
},
{
"stopId": 20013,
@@ -13457,14 +9827,7 @@
},
"latitude": 42.215905917,
"longitude": -8.732471102,
- "lines": [
- "7",
- "12B",
- "17",
- "27",
- "H2",
- "PTL"
- ]
+ "lines": ["7", "12B", "17", "27", "H2", "PTL"]
},
{
"stopId": 20018,
@@ -13473,9 +9836,7 @@
},
"latitude": 42.151451604,
"longitude": -8.673803367,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 20019,
@@ -13484,9 +9845,7 @@
},
"latitude": 42.149222193,
"longitude": -8.679363987,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 20020,
@@ -13495,9 +9854,7 @@
},
"latitude": 42.151606055,
"longitude": -8.679299082,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 20021,
@@ -13506,9 +9863,7 @@
},
"latitude": 42.152770176,
"longitude": -8.686251828,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 20022,
@@ -13517,9 +9872,7 @@
},
"latitude": 42.234622237,
"longitude": -8.707758443,
- "lines": [
- "24"
- ]
+ "lines": ["24"]
},
{
"stopId": 20023,
@@ -13528,9 +9881,7 @@
},
"latitude": 42.234062973,
"longitude": -8.712195759,
- "lines": [
- "24"
- ]
+ "lines": ["24"]
},
{
"stopId": 20024,
@@ -13539,11 +9890,7 @@
},
"latitude": 42.207634066,
"longitude": -8.758920861,
- "lines": [
- "5B",
- "13",
- "N4"
- ]
+ "lines": ["5B", "13", "N4"]
},
{
"stopId": 20025,
@@ -13552,11 +9899,7 @@
},
"latitude": 42.206553268,
"longitude": -8.760122491,
- "lines": [
- "5B",
- "13",
- "N4"
- ]
+ "lines": ["5B", "13", "N4"]
},
{
"stopId": 20026,
@@ -13565,14 +9908,7 @@
},
"latitude": 42.206488366,
"longitude": -8.759906624,
- "lines": [
- "5B",
- "13",
- "N4",
- "H",
- "PSA 1",
- "PSA 4"
- ]
+ "lines": ["5B", "13", "N4", "H", "PSA 1", "PSA 4"]
},
{
"stopId": 20027,
@@ -13603,10 +9939,7 @@
},
"latitude": 42.245921506,
"longitude": -8.673014474,
- "lines": [
- "9B",
- "28"
- ]
+ "lines": ["9B", "28"]
},
{
"stopId": 20030,
@@ -13615,10 +9948,7 @@
},
"latitude": 42.247859379,
"longitude": -8.674363625,
- "lines": [
- "9B",
- "28"
- ]
+ "lines": ["9B", "28"]
},
{
"stopId": 20041,
@@ -13627,10 +9957,7 @@
},
"latitude": 42.233622103,
"longitude": -8.689209566,
- "lines": [
- "27",
- "28"
- ]
+ "lines": ["27", "28"]
},
{
"stopId": 20042,
@@ -13639,9 +9966,7 @@
},
"latitude": 42.233723398,
"longitude": -8.689094231,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 20043,
@@ -13650,9 +9975,7 @@
},
"latitude": 42.236036786,
"longitude": -8.686656768,
- "lines": [
- "28"
- ]
+ "lines": ["28"]
},
{
"stopId": 20044,
@@ -13661,10 +9984,7 @@
},
"latitude": 42.215220874,
"longitude": -8.742680967,
- "lines": [
- "23",
- "N4"
- ]
+ "lines": ["23", "N4"]
},
{
"stopId": 20045,
@@ -13673,9 +9993,7 @@
},
"latitude": 42.200532989,
"longitude": -8.674075447,
- "lines": [
- "15B"
- ]
+ "lines": ["15B"]
},
{
"stopId": 20046,
@@ -13684,9 +10002,7 @@
},
"latitude": 42.201968444,
"longitude": -8.67477879,
- "lines": [
- "15B"
- ]
+ "lines": ["15B"]
},
{
"stopId": 20047,
@@ -13695,9 +10011,7 @@
},
"latitude": 42.204330306,
"longitude": -8.674670483,
- "lines": [
- "15B"
- ]
+ "lines": ["15B"]
},
{
"stopId": 20048,
@@ -13706,10 +10020,7 @@
},
"latitude": 42.182684406,
"longitude": -8.802402364,
- "lines": [
- "11",
- "12A"
- ]
+ "lines": ["11", "12A"]
},
{
"stopId": 20049,
@@ -13718,9 +10029,7 @@
},
"latitude": 42.18238342,
"longitude": -8.802126069,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 20050,
@@ -13729,9 +10038,7 @@
},
"latitude": 42.225550059,
"longitude": -8.686684563,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 20051,
@@ -13740,9 +10047,7 @@
},
"latitude": 42.225652904,
"longitude": -8.686624017,
- "lines": [
- "25"
- ]
+ "lines": ["25"]
},
{
"stopId": 20052,
@@ -13751,10 +10056,7 @@
},
"latitude": 42.232748414,
"longitude": -8.702539655,
- "lines": [
- "4A",
- "H3"
- ]
+ "lines": ["4A", "H3"]
},
{
"stopId": 20053,
@@ -13763,10 +10065,7 @@
},
"latitude": 42.248962858,
"longitude": -8.688272303,
- "lines": [
- "C3i",
- "10"
- ]
+ "lines": ["C3i", "10"]
},
{
"stopId": 20054,
@@ -13775,10 +10074,7 @@
},
"latitude": 42.248897377,
"longitude": -8.689150714,
- "lines": [
- "C3d",
- "10"
- ]
+ "lines": ["C3d", "10"]
},
{
"stopId": 20057,
@@ -13787,12 +10083,7 @@
},
"latitude": 42.238843911,
"longitude": -8.713008504,
- "lines": [
- "A",
- "5B",
- "16",
- "24"
- ]
+ "lines": ["A", "5B", "16", "24"]
},
{
"stopId": 20058,
@@ -13801,10 +10092,7 @@
},
"latitude": 42.238435471,
"longitude": -8.714413687,
- "lines": [
- "5B",
- "16"
- ]
+ "lines": ["5B", "16"]
},
{
"stopId": 20059,
@@ -13813,11 +10101,7 @@
},
"latitude": 42.222745522,
"longitude": -8.677932515,
- "lines": [
- "25",
- "31",
- "H3"
- ]
+ "lines": ["25", "31", "H3"]
},
{
"stopId": 20060,
@@ -13826,11 +10110,7 @@
},
"latitude": 42.22282586,
"longitude": -8.678077606,
- "lines": [
- "25",
- "31",
- "H3"
- ]
+ "lines": ["25", "31", "H3"]
},
{
"stopId": 20061,
@@ -13839,10 +10119,7 @@
},
"latitude": 42.217568173,
"longitude": -8.744018511,
- "lines": [
- "23",
- "N4"
- ]
+ "lines": ["23", "N4"]
},
{
"stopId": 20062,
@@ -13851,10 +10128,7 @@
},
"latitude": 42.236143706,
"longitude": -8.73180718,
- "lines": [
- "10",
- "15B"
- ]
+ "lines": ["10", "15B"]
},
{
"stopId": 20071,
@@ -13863,9 +10137,7 @@
},
"latitude": 42.205511653,
"longitude": -8.672824803,
- "lines": [
- "15B"
- ]
+ "lines": ["15B"]
},
{
"stopId": 20072,
@@ -13874,9 +10146,7 @@
},
"latitude": 42.196643694,
"longitude": -8.671663218,
- "lines": [
- "15B"
- ]
+ "lines": ["15B"]
},
{
"stopId": 20075,
@@ -13885,18 +10155,7 @@
},
"latitude": 42.218011215,
"longitude": -8.745369728,
- "lines": [
- "C3i",
- "4A",
- "4C",
- "10",
- "11",
- "12A",
- "15A",
- "23",
- "N1",
- "N4"
- ]
+ "lines": ["C3i", "4A", "4C", "10", "11", "12A", "15A", "23", "N1", "N4"]
},
{
"stopId": 20076,
@@ -13905,16 +10164,7 @@
},
"latitude": 42.21901679,
"longitude": -8.739919147,
- "lines": [
- "C3i",
- "4A",
- "4C",
- "10",
- "11",
- "12A",
- "15A",
- "N1"
- ]
+ "lines": ["C3i", "4A", "4C", "10", "11", "12A", "15A", "N1"]
},
{
"stopId": 20077,
@@ -13943,15 +10193,7 @@
},
"latitude": 42.233341329,
"longitude": -8.728967219,
- "lines": [
- "4A",
- "4C",
- "11",
- "12B",
- "17",
- "27",
- "N1"
- ]
+ "lines": ["4A", "4C", "11", "12B", "17", "27", "N1"]
},
{
"stopId": 20079,
@@ -13960,15 +10202,7 @@
},
"latitude": 42.23341294,
"longitude": -8.729045156,
- "lines": [
- "4A",
- "4C",
- "7",
- "12B",
- "17",
- "27",
- "PSA 4"
- ]
+ "lines": ["4A", "4C", "7", "12B", "17", "27", "PSA 4"]
},
{
"stopId": 20080,
@@ -13977,9 +10211,7 @@
},
"latitude": 42.221674556,
"longitude": -8.660937347,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 20081,
@@ -13988,9 +10220,7 @@
},
"latitude": 42.151852858,
"longitude": -8.684956786,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 20082,
@@ -13999,9 +10229,7 @@
},
"latitude": 42.221758032,
"longitude": -8.661135597,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 20083,
@@ -14010,9 +10238,7 @@
},
"latitude": 42.188074669,
"longitude": -8.701928367,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 20084,
@@ -14021,9 +10247,7 @@
},
"latitude": 42.18711079,
"longitude": -8.699519743,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 20085,
@@ -14032,9 +10256,7 @@
},
"latitude": 42.185852445,
"longitude": -8.696410892,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 20086,
@@ -14043,9 +10265,7 @@
},
"latitude": 42.190645281,
"longitude": -8.696150583,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 20087,
@@ -14054,9 +10274,7 @@
},
"latitude": 42.194639373,
"longitude": -8.696795357,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 20089,
@@ -14065,9 +10283,7 @@
},
"latitude": 42.213044566,
"longitude": -8.751396835,
- "lines": [
- "16"
- ]
+ "lines": ["16"]
},
{
"stopId": 20091,
@@ -14076,12 +10292,7 @@
},
"latitude": 42.238164803,
"longitude": -8.711212761,
- "lines": [
- "A",
- "5B",
- "16",
- "24"
- ]
+ "lines": ["A", "5B", "16", "24"]
},
{
"stopId": 20094,
@@ -14090,9 +10301,7 @@
},
"latitude": 42.22518736,
"longitude": -8.717399288,
- "lines": [
- "18A"
- ]
+ "lines": ["18A"]
},
{
"stopId": 20095,
@@ -14101,12 +10310,7 @@
},
"latitude": 42.219212419,
"longitude": -8.685836356,
- "lines": [
- "12A",
- "12B",
- "13",
- "H3"
- ]
+ "lines": ["12A", "12B", "13", "H3"]
},
{
"stopId": 20096,
@@ -14115,13 +10319,7 @@
},
"latitude": 42.219128991,
"longitude": -8.685753208,
- "lines": [
- "12A",
- "12B",
- "13",
- "U2",
- "H3"
- ]
+ "lines": ["12A", "12B", "13", "U2", "H3"]
},
{
"stopId": 20099,
@@ -14130,13 +10328,7 @@
},
"latitude": 42.222390674,
"longitude": -8.752507356,
- "lines": [
- "C3d",
- "C3i",
- "15B",
- "15C",
- "N1"
- ]
+ "lines": ["C3d", "C3i", "15B", "15C", "N1"]
},
{
"stopId": 20100,
@@ -14145,13 +10337,7 @@
},
"latitude": 42.223195763,
"longitude": -8.749650702,
- "lines": [
- "C3d",
- "C3i",
- "15B",
- "15C",
- "N1"
- ]
+ "lines": ["C3d", "C3i", "15B", "15C", "N1"]
},
{
"stopId": 20102,
@@ -14160,16 +10346,7 @@
},
"latitude": 42.191034002,
"longitude": -8.714303116,
- "lines": [
- "6",
- "12B",
- "18H",
- "27",
- "H1",
- "H2",
- "H3",
- "H"
- ]
+ "lines": ["6", "12B", "18H", "27", "H1", "H2", "H3", "H"]
},
{
"stopId": 20103,
@@ -14178,13 +10355,7 @@
},
"latitude": 42.218946899,
"longitude": -8.733670293,
- "lines": [
- "7",
- "12B",
- "17",
- "N4",
- "H1"
- ]
+ "lines": ["7", "12B", "17", "N4", "H1"]
},
{
"stopId": 20104,
@@ -14193,9 +10364,7 @@
},
"latitude": 42.220938435,
"longitude": -8.709621883,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 20105,
@@ -14204,9 +10373,7 @@
},
"latitude": 42.221232035,
"longitude": -8.709808647,
- "lines": [
- "14"
- ]
+ "lines": ["14"]
},
{
"stopId": 20107,
@@ -14215,10 +10382,7 @@
},
"latitude": 42.188244696,
"longitude": -8.703164368,
- "lines": [
- "6",
- "27"
- ]
+ "lines": ["6", "27"]
},
{
"stopId": 20110,
@@ -14227,10 +10391,7 @@
},
"latitude": 42.213797254,
"longitude": -8.741472696,
- "lines": [
- "23",
- "N4"
- ]
+ "lines": ["23", "N4"]
},
{
"stopId": 20111,
@@ -14239,17 +10400,7 @@
},
"latitude": 42.187585838,
"longitude": -8.716278919,
- "lines": [
- "A",
- "6",
- "12B",
- "18H",
- "27",
- "H1",
- "H2",
- "H3",
- "H"
- ]
+ "lines": ["A", "6", "12B", "18H", "27", "H1", "H2", "H3", "H"]
},
{
"stopId": 20112,
@@ -14258,14 +10409,7 @@
},
"latitude": 42.188578188,
"longitude": -8.713087125,
- "lines": [
- "6",
- "12B",
- "18H",
- "H1",
- "H3",
- "H"
- ]
+ "lines": ["6", "12B", "18H", "H1", "H3", "H"]
},
{
"stopId": 20113,
@@ -14274,13 +10418,7 @@
},
"latitude": 42.220876566,
"longitude": -8.733367644,
- "lines": [
- "12B",
- "N4",
- "H1",
- "H2",
- "PTL"
- ]
+ "lines": ["12B", "N4", "H1", "H2", "PTL"]
},
{
"stopId": 20114,
@@ -14289,9 +10427,7 @@
},
"latitude": 42.18846205,
"longitude": -8.703352711,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 20115,
@@ -14300,9 +10436,7 @@
},
"latitude": 42.190100441,
"longitude": -8.705453204,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 20116,
@@ -14311,10 +10445,7 @@
},
"latitude": 42.19202547,
"longitude": -8.705712064,
- "lines": [
- "6",
- "27"
- ]
+ "lines": ["6", "27"]
},
{
"stopId": 20117,
@@ -14323,10 +10454,7 @@
},
"latitude": 42.191616209,
"longitude": -8.706277831,
- "lines": [
- "6",
- "27"
- ]
+ "lines": ["6", "27"]
},
{
"stopId": 20118,
@@ -14335,9 +10463,7 @@
},
"latitude": 42.228358488,
"longitude": -8.719490904,
- "lines": [
- "H2"
- ]
+ "lines": ["H2"]
},
{
"stopId": 20119,
@@ -14346,11 +10472,7 @@
},
"latitude": 42.190930878,
"longitude": -8.71409354,
- "lines": [
- "6",
- "12B",
- "H3"
- ]
+ "lines": ["6", "12B", "H3"]
},
{
"stopId": 20124,
@@ -14359,15 +10481,7 @@
},
"latitude": 42.208989468,
"longitude": -8.729330619,
- "lines": [
- "A",
- "12B",
- "U1",
- "H1",
- "H2",
- "H",
- "PTL"
- ]
+ "lines": ["A", "12B", "U1", "H1", "H2", "H", "PTL"]
},
{
"stopId": 20125,
@@ -14376,11 +10490,7 @@
},
"latitude": 42.209126911,
"longitude": -8.729344197,
- "lines": [
- "12B",
- "H1",
- "H2"
- ]
+ "lines": ["12B", "H1", "H2"]
},
{
"stopId": 20126,
@@ -14389,12 +10499,7 @@
},
"latitude": 42.190252452,
"longitude": -8.717998617,
- "lines": [
- "12B",
- "18H",
- "H1",
- "H2"
- ]
+ "lines": ["12B", "18H", "H1", "H2"]
},
{
"stopId": 20127,
@@ -14403,17 +10508,7 @@
},
"latitude": 42.19007538,
"longitude": -8.718125045,
- "lines": [
- "A",
- "12B",
- "18H",
- "27",
- "U1",
- "H1",
- "H2",
- "H",
- "PTL"
- ]
+ "lines": ["A", "12B", "18H", "27", "U1", "H1", "H2", "H", "PTL"]
},
{
"stopId": 20130,
@@ -14422,9 +10517,7 @@
},
"latitude": 42.152788309,
"longitude": -8.681902684,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 20132,
@@ -14433,10 +10526,7 @@
},
"latitude": 42.260473187,
"longitude": -8.67881466,
- "lines": [
- "C3d",
- "C3i"
- ]
+ "lines": ["C3d", "C3i"]
},
{
"stopId": 20136,
@@ -14445,13 +10535,7 @@
},
"latitude": 42.225764699,
"longitude": -8.704499864,
- "lines": [
- "4C",
- "23",
- "31",
- "N4",
- "PSA 4"
- ]
+ "lines": ["4C", "23", "31", "N4", "PSA 4"]
},
{
"stopId": 20137,
@@ -14460,9 +10544,7 @@
},
"latitude": 42.246563041,
"longitude": -8.669395817,
- "lines": [
- "9B"
- ]
+ "lines": ["9B"]
},
{
"stopId": 20139,
@@ -14471,9 +10553,7 @@
},
"latitude": 42.199144892,
"longitude": -8.758506717,
- "lines": [
- "29"
- ]
+ "lines": ["29"]
},
{
"stopId": 20141,
@@ -14482,11 +10562,7 @@
},
"latitude": 42.21057897,
"longitude": -8.671171189,
- "lines": [
- "12B",
- "15B",
- "15C"
- ]
+ "lines": ["12B", "15B", "15C"]
},
{
"stopId": 20142,
@@ -14495,9 +10571,7 @@
},
"latitude": 42.200738188,
"longitude": -8.714882876,
- "lines": [
- "18B"
- ]
+ "lines": ["18B"]
},
{
"stopId": 20143,
@@ -14506,10 +10580,7 @@
},
"latitude": 42.215448094,
"longitude": -8.756474306,
- "lines": [
- "15A",
- "N4"
- ]
+ "lines": ["15A", "N4"]
},
{
"stopId": 20154,
@@ -14518,9 +10589,7 @@
},
"latitude": 42.192089689,
"longitude": -8.709245389,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 20155,
@@ -14529,9 +10598,7 @@
},
"latitude": 42.19217626,
"longitude": -8.708899009,
- "lines": [
- "27"
- ]
+ "lines": ["27"]
},
{
"stopId": 20156,
@@ -14540,9 +10607,7 @@
},
"latitude": 42.169602007,
"longitude": -8.680122554,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 20157,
@@ -14551,9 +10616,7 @@
},
"latitude": 42.185615419,
"longitude": -8.702424678,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 20158,
@@ -14562,9 +10625,7 @@
},
"latitude": 42.185593055,
"longitude": -8.702377974,
- "lines": [
- "6"
- ]
+ "lines": ["6"]
},
{
"stopId": 20159,
@@ -14573,9 +10634,7 @@
},
"latitude": 42.160348044,
"longitude": -8.718706355,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 20160,
@@ -14584,9 +10643,7 @@
},
"latitude": 42.160066796,
"longitude": -8.718938239,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 20166,
@@ -14595,10 +10652,7 @@
},
"latitude": 42.202134841,
"longitude": -8.70572793,
- "lines": [
- "18A",
- "18B"
- ]
+ "lines": ["18A", "18B"]
},
{
"stopId": 20167,
@@ -14607,10 +10661,7 @@
},
"latitude": 42.202095058,
"longitude": -8.705814233,
- "lines": [
- "18A",
- "18B"
- ]
+ "lines": ["18A", "18B"]
},
{
"stopId": 20168,
@@ -14619,9 +10670,7 @@
},
"latitude": 42.173596087,
"longitude": -8.730918928,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 20169,
@@ -14630,9 +10679,7 @@
},
"latitude": 42.173616782,
"longitude": -8.730810863,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 20170,
@@ -14641,11 +10688,7 @@
},
"latitude": 42.224544805,
"longitude": -8.730413561,
- "lines": [
- "5A",
- "5B",
- "12A"
- ]
+ "lines": ["5A", "5B", "12A"]
},
{
"stopId": 20171,
@@ -14654,11 +10697,7 @@
},
"latitude": 42.204380762,
"longitude": -8.726688445,
- "lines": [
- "12B",
- "H1",
- "H2"
- ]
+ "lines": ["12B", "H1", "H2"]
},
{
"stopId": 20172,
@@ -14667,14 +10706,7 @@
},
"latitude": 42.203736336,
"longitude": -8.726617869,
- "lines": [
- "A",
- "12B",
- "H1",
- "H2",
- "H",
- "PTL"
- ]
+ "lines": ["A", "12B", "H1", "H2", "H", "PTL"]
},
{
"stopId": 20173,
@@ -14683,9 +10715,7 @@
},
"latitude": 42.192504056,
"longitude": -8.721215121,
- "lines": [
- "7"
- ]
+ "lines": ["7"]
},
{
"stopId": 20174,
@@ -14694,9 +10724,7 @@
},
"latitude": 42.21519917,
"longitude": -8.726793773,
- "lines": [
- "A"
- ]
+ "lines": ["A"]
},
{
"stopId": 20177,
@@ -14705,15 +10733,7 @@
},
"latitude": 42.230767817,
"longitude": -8.715105964,
- "lines": [
- "C3i",
- "6",
- "11",
- "15A",
- "23",
- "25",
- "28"
- ]
+ "lines": ["C3i", "6", "11", "15A", "23", "25", "28"]
},
{
"stopId": 20178,
@@ -14722,9 +10742,7 @@
},
"latitude": 42.172412443,
"longitude": -8.799591567,
- "lines": [
- "12A"
- ]
+ "lines": ["12A"]
},
{
"stopId": 20180,
@@ -14733,9 +10751,7 @@
},
"latitude": 42.229527407,
"longitude": -8.70843784,
- "lines": [
- "H2"
- ]
+ "lines": ["H2"]
},
{
"stopId": 20186,
@@ -14744,9 +10760,7 @@
},
"latitude": 42.23755404,
"longitude": -8.651558138,
- "lines": [
- "9B"
- ]
+ "lines": ["9B"]
},
{
"stopId": 20187,
@@ -14755,10 +10769,7 @@
},
"latitude": 42.237422128,
"longitude": -8.65153195,
- "lines": [
- "9B",
- "27"
- ]
+ "lines": ["9B", "27"]
},
{
"stopId": 20188,
@@ -14767,10 +10778,7 @@
},
"latitude": 42.201670402,
"longitude": -8.708928464,
- "lines": [
- "18B",
- "H3"
- ]
+ "lines": ["18B", "H3"]
},
{
"stopId": 20189,
@@ -14779,10 +10787,7 @@
},
"latitude": 42.201625853,
"longitude": -8.712945043,
- "lines": [
- "18B",
- "H3"
- ]
+ "lines": ["18B", "H3"]
},
{
"stopId": 20190,
@@ -14791,15 +10796,7 @@
},
"latitude": 42.234906013,
"longitude": -8.72662052,
- "lines": [
- "4A",
- "4C",
- "11",
- "12B",
- "17",
- "27",
- "N1"
- ]
+ "lines": ["4A", "4C", "11", "12B", "17", "27", "N1"]
},
{
"stopId": 20191,
@@ -14808,10 +10805,7 @@
},
"latitude": 42.229676205,
"longitude": -8.657383392,
- "lines": [
- "15A",
- "25"
- ]
+ "lines": ["15A", "25"]
},
{
"stopId": 20192,
@@ -14820,16 +10814,7 @@
},
"latitude": 42.237168511,
"longitude": -8.720373767,
- "lines": [
- "4A",
- "4C",
- "5B",
- "7",
- "12B",
- "16",
- "17",
- "PSA 4"
- ]
+ "lines": ["4A", "4C", "5B", "7", "12B", "16", "17", "PSA 4"]
},
{
"stopId": 20193,
@@ -14860,18 +10845,7 @@
},
"latitude": 42.240364985,
"longitude": -8.724530974,
- "lines": [
- "C1",
- "C3d",
- "A",
- "5A",
- "9B",
- "10",
- "15B",
- "15C",
- "28",
- "N4"
- ]
+ "lines": ["C1", "C3d", "A", "5A", "9B", "10", "15B", "15C", "28", "N4"]
},
{
"stopId": 20195,
@@ -14905,9 +10879,7 @@
},
"latitude": 42.175325155,
"longitude": -8.799594139,
- "lines": [
- "12A"
- ]
+ "lines": ["12A"]
},
{
"stopId": 20197,
@@ -14916,10 +10888,7 @@
},
"latitude": 42.23558703,
"longitude": -8.728830897,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 20198,
@@ -14949,9 +10918,7 @@
},
"latitude": 42.228802205,
"longitude": -8.718136653,
- "lines": [
- "H2"
- ]
+ "lines": ["H2"]
},
{
"stopId": 20200,
@@ -14960,10 +10927,7 @@
},
"latitude": 42.235482452,
"longitude": -8.728981431,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 20201,
@@ -14972,10 +10936,7 @@
},
"latitude": 42.235701104,
"longitude": -8.726054911,
- "lines": [
- "5B",
- "12A"
- ]
+ "lines": ["5B", "12A"]
},
{
"stopId": 20202,
@@ -14984,9 +10945,7 @@
},
"latitude": 42.2404374,
"longitude": -8.726048008,
- "lines": [
- "TUR"
- ]
+ "lines": ["TUR"]
},
{
"stopId": 20203,
@@ -14995,15 +10954,7 @@
},
"latitude": 42.230881062,
"longitude": -8.718397577,
- "lines": [
- "7",
- "12B",
- "14",
- "16",
- "18A",
- "18B",
- "18H"
- ]
+ "lines": ["7", "12B", "14", "16", "18A", "18B", "18H"]
},
{
"stopId": 20209,
@@ -15012,9 +10963,7 @@
},
"latitude": 42.211481651,
"longitude": -8.734440746,
- "lines": [
- "H1"
- ]
+ "lines": ["H1"]
},
{
"stopId": 20210,
@@ -15023,10 +10972,7 @@
},
"latitude": 42.19824056,
"longitude": -8.763182189,
- "lines": [
- "11",
- "29"
- ]
+ "lines": ["11", "29"]
},
{
"stopId": 20211,
@@ -15035,10 +10981,7 @@
},
"latitude": 42.198422825,
"longitude": -8.762538026,
- "lines": [
- "11",
- "29"
- ]
+ "lines": ["11", "29"]
},
{
"stopId": 20212,
@@ -15047,9 +10990,7 @@
},
"latitude": 42.188388732,
"longitude": -8.805956864,
- "lines": [
- "10"
- ]
+ "lines": ["10"]
},
{
"stopId": 20215,
@@ -15058,17 +10999,7 @@
},
"latitude": 42.223880296,
"longitude": -8.735520196,
- "lines": [
- "A",
- "5A",
- "5B",
- "10",
- "11",
- "13",
- "N4",
- "H1",
- "H"
- ]
+ "lines": ["A", "5A", "5B", "10", "11", "13", "N4", "H1", "H"]
},
{
"stopId": 20216,
@@ -15077,9 +11008,7 @@
},
"latitude": 42.179747589,
"longitude": -8.802157388,
- "lines": [
- "11"
- ]
+ "lines": ["11"]
},
{
"stopId": 20219,
@@ -15088,11 +11017,6 @@
},
"latitude": 42.234830699,
"longitude": -8.695443515,
- "lines": [
- "A",
- "9B",
- "27",
- "28"
- ]
+ "lines": ["A", "9B", "27", "28"]
}
-] \ No newline at end of file
+]
diff --git a/src/frontend/public/sw.js b/src/frontend/public/sw.js
index 70ca169..01d403a 100644
--- a/src/frontend/public/sw.js
+++ b/src/frontend/public/sw.js
@@ -1,51 +1,52 @@
-const API_CACHE_NAME = 'api-cache-v1'
+const API_CACHE_NAME = "api-cache-v1";
const API_URL_PATTERN = /\/api\/(GetStopList)/;
const API_MAX_AGE = 24 * 60 * 60 * 1000; // 24 hours
-self.addEventListener('install', (event) => {
- event.waitUntil(self.skipWaiting());
+self.addEventListener("install", (event) => {
+ event.waitUntil(self.skipWaiting());
});
-self.addEventListener('activate', (event) => {
- event.waitUntil(self.clients.claim());
+self.addEventListener("activate", (event) => {
+ event.waitUntil(self.clients.claim());
});
-self.addEventListener('fetch', async (event) => {
- const url = new URL(event.request.url);
+self.addEventListener("fetch", async (event) => {
+ const url = new URL(event.request.url);
- if (event.request.method !== "GET" || !API_URL_PATTERN.test(url.pathname)) {
- return;
- }
+ if (event.request.method !== "GET" || !API_URL_PATTERN.test(url.pathname)) {
+ return;
+ }
- event.respondWith(apiCacheFirst(event.request));
+ event.respondWith(apiCacheFirst(event.request));
});
async function apiCacheFirst(request) {
- const cache = await caches.open(API_CACHE_NAME);
- const cachedResponse = await cache.match(request);
-
- if (cachedResponse) {
- const age = Date.now() - new Date(cachedResponse.headers.get('date')).getTime();
- if (age < API_MAX_AGE) {
- console.debug(`SW: Cache HIT for ${request.url}`);
- return cachedResponse;
- }
+ const cache = await caches.open(API_CACHE_NAME);
+ const cachedResponse = await cache.match(request);
- // Cache is too old, fetch a fresh copy
- cache.delete(request);
+ if (cachedResponse) {
+ const age =
+ Date.now() - new Date(cachedResponse.headers.get("date")).getTime();
+ if (age < API_MAX_AGE) {
+ console.debug(`SW: Cache HIT for ${request.url}`);
+ return cachedResponse;
}
- try {
- const netResponse = await fetch(request);
+ // Cache is too old, fetch a fresh copy
+ cache.delete(request);
+ }
- const responseToCache = netResponse.clone();
+ try {
+ const netResponse = await fetch(request);
- cache.put(request, responseToCache);
+ const responseToCache = netResponse.clone();
- console.debug(`SW: Cache MISS for ${request.url}`);
+ cache.put(request, responseToCache);
- return netResponse;
- } catch (error) {
- throw error;
- }
-} \ No newline at end of file
+ console.debug(`SW: Cache MISS for ${request.url}`);
+
+ return netResponse;
+ } catch (error) {
+ throw error;
+ }
+}
diff --git a/src/frontend/react-router.config.ts b/src/frontend/react-router.config.ts
index e2d40cc..b913b59 100644
--- a/src/frontend/react-router.config.ts
+++ b/src/frontend/react-router.config.ts
@@ -3,6 +3,6 @@ import type { Config } from "@react-router/dev/config";
export default {
ssr: false,
future: {
- unstable_subResourceIntegrity: true
- }
+ unstable_subResourceIntegrity: true,
+ },
} satisfies Config;
diff --git a/src/frontend/vite.config.ts b/src/frontend/vite.config.ts
index 126d1de..430ad40 100644
--- a/src/frontend/vite.config.ts
+++ b/src/frontend/vite.config.ts
@@ -1,4 +1,4 @@
-import { defineConfig } from 'vite';
+import { defineConfig } from "vite";
import tsconfigPaths from "vite-tsconfig-paths";
import { reactRouter } from "@react-router/dev/vite";
@@ -7,10 +7,10 @@ export default defineConfig({
plugins: [reactRouter(), tsconfigPaths()],
server: {
proxy: {
- '^/api': {
- target: 'https://localhost:7240',
- secure: false
- }
- }
- }
-})
+ "^/api": {
+ target: "https://localhost:7240",
+ secure: false,
+ },
+ },
+ },
+});