Tenemos datos de la estación de autobuses y queremos crear una aplicación que proporcione la línea / línea múltiple para una estación de inicio y una estación de finalización.
Por ejemplo, el usuario intenta obtener una sugerencia de línea de autobús de la estación1 a la estación2.
Si hay una línea de autobús que puede cubrir ambos station1
y station2
, esta línea debe ser devuelta. El resultado puede verse así:
Step1: station1 -- station2
Si no hay una línea de autobús directa entre la estación 1 y la estación 2, entonces la aplicación debe intentar encontrar el plan de intercambio, por ejemplo, el resultado puede verse así:
Step1: station1 -- exchangestation
Step2: exchangestation -- station2
Ahora tenemos los datos, pero no sabemos cómo diseñar el modelo de datos en la base de datos, ¿cómo crear el esquema para que la consulta sea eficiente?
=============================================
Actualizar:
Por ejemplo, tengo cuatro líneas de autobús (en realidad dos) cada una con un color diferente:
l1: A-B-C-D
l2: D-B-A (in fact, the l2 is the reverse of l1 except the l2 will skip station `C`.
l3: E-B-D-F
l4: F-D-B-E(reverse of l3)
Ahora, si queremos guardar esta información en la base de datos para consultar el plan de la línea de autobús para una estación a otra, ¿cuántas tablas necesitamos y qué se debe poner en cada tabla?
Respuestas:
Creo que necesita construir otra tabla que defina todas las rutas como combinaciones de otras rutas. Luego consulta esta tabla y se une a las rutas reales para obtener la geometría.
Si la consulta es 'desde la estación' a 'a la estación' y cada sección tiene un 'desde la estación y' a la estación '. Pero si desea incluir rutas que tomen en varias secciones, podría tener otra tabla 'rutas' que tenga algo como:
También necesita su tabla de secciones original, algo como:
y creo que necesitas otra mesa de unión como:
y esa tabla almacena la relación uno a muchos entre las rutas y las tablas de secciones, por lo que, para su ejemplo anterior, tiene dos filas en la tabla de unión, una para cada paso. La consulta se realiza en la tabla de rutas, desde y hacia las estaciones. Los datos devueltos, si son espaciales, son detalles de la tabla de rutas y datos espaciales de la tabla de secciones. Quizás sumes tiempos de cada sección o lo que sea.
¿Tiene sentido?
fuente
Probablemente debería elegir una herramienta para eso y seguir el esquema que la herramienta fuerza (por ejemplo, pgRouting ).
Si desea hacerlo sin una tabla, solo necesita dos tablas para almacenar los vértices y los nodos.
El truco es que su imagen muestra un enfoque espacial, mientras que de hecho necesita uno temporal (imagen pendiente). El bus no va del nodo A al nodo B. El bus va del nodo A @ 12: 00 al nodo B @ 12: 10 .
Entonces creamos un nodo para cada estación + un nodo para cada hora de salida de cada estación. Cada nodo tiene 3 enlaces unidireccionales que salen de él:
Ahora, para encontrar la conexión del punto A al punto C, elegimos el primer punto coincidente en la estación A y encontramos nuestro camino desde allí hasta el nodo base para la estación C.
Nodos
vértices
fuente
Aquí hay un ejemplo de trabajo usando JavaScript y datos de OpenStreetMap. El modelo de datos puede ser útil.
fuente