¿Cómo diseñar un esquema de base de datos de consultas de la estación de autobuses?

9

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 station1y 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:

ingrese la descripción de la imagen aquí

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?

Giser
fuente
@ giser.i también tengo un problema similar. ¿ Puede
scott

Respuestas:

6

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:

  • 'nombre de ruta', 'ID de ruta', 'de la estación', 'a la estación'

También necesita su tabla de secciones original, algo como:

  • 'nombre de sección', 'ID de sección', etc.

y creo que necesitas otra mesa de unión como:

  • 'ID de ruta', 'ID de sección'

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?

Alex Leith
fuente
De hecho, no tenemos tablas ahora, solo tenemos los datos originales que son formato de texto.
Giser
OK eso está bien. Creo que mi respuesta se mantiene entonces. Yo usaría tres mesas.
Alex Leith
Actualizo mi publicación con un ejemplo en vivo, ¿puedes dedicar algo de tiempo para tener un cheque?
Giser
@ AlexLeith.i también tengo un problema similar aquí gis.stackexchange.com/questions/70253/…
scott
3

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:

  • enlace al destino del autobús (A @ 12: 00 - B @ 12: 10 costo: 10 minutos)
  • enlace al próximo autobús que sale de esta estación (A @ 12: 00 - A @ 12: 30 costo: 30 minutos)
  • enlace al nodo base (A @ 12: 00 a costo A: 0 minutos)

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

id|station|time
---------------
1 |A      |NULL
2 |B      |NULL
3 |A      |12:00
4 |B      |12:10

vértices

id|start_node|end_node|line|cost
---------------------------
1 |3         |4       |l1  |10
2 |3         |1       |NULL|0
3 |4         |2       |NULL|0
Jakub Kania
fuente
. También tengo un problema similar aquí gis.stackexchange.com/questions/70253/…
scott
0

Aquí hay un ejemplo de trabajo usando JavaScript y datos de OpenStreetMap. El modelo de datos puede ser útil.

neogeomat
fuente