Temos dados da estação de ônibus e queremos criar um aplicativo que forneça a linha / linha múltipla para uma determinada estação inicial e final.
Por exemplo, o usuário tenta obter uma sugestão de linha de ônibus da estação1 para a estação2.
Se houver uma linha de ônibus que possa cobrir ambos station1
e station2
, essa linha deverá ser retornada. O resultado pode ser assim:
Step1: station1 -- station2
Se não houver uma linha de ônibus direta entre a estação1 e a estação2, o aplicativo deve tentar encontrar o plano de troca, por exemplo, o resultado pode ser assim:
Step1: station1 -- exchangestation
Step2: exchangestation -- station2
Agora temos os dados, mas não sabemos como projetar o modelo de dados no banco de dados, como criar o esquema para tornar a consulta eficiente?
===============================================
Atualizar:
Por exemplo, eu tenho quatro linhas de ônibus (na verdade duas), cada uma com uma cor 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)
Agora, se queremos salvar essas informações no banco de dados para consultar o plano da linha de ônibus de uma estação para outra, quantas tabelas precisamos e o que deve ser colocado em cada tabela?
Respostas:
Eu acho que você precisa criar outra tabela que define todas as rotas como combinações de outras rotas. Em seguida, você consulta esta tabela e junta-se às rotas reais para obter a geometria.
Se a consulta for de 'da estação' para 'a estação' e cada seção tiver um 'da estação e' para a estação '. Mas você deseja incluir rotas que levam em várias seções, você pode ter outra tabela 'rotas' que tem algo como:
você também precisa da sua tabela de seções original, algo como:
e acho que você precisa de outra tabela de junção como:
e essa tabela armazena o relacionamento de um para muitos entre as tabelas de rotas e seções, portanto, para o seu exemplo acima, você tem duas linhas na tabela de junção, uma para cada etapa. A consulta é feita na tabela de rotas, de e para estações. Os dados retornados, se espaciais, são detalhes da tabela de rotas e dados espaciais da tabela de seções. Talvez você adicione tempos de cada seção ou o que for.
Isso faz sentido?
fonte
Você provavelmente deve escolher uma ferramenta para isso e seguir o esquema que a ferramenta força (por exemplo, pgRouting ).
Se você quiser fazer isso sem uma tabela, precisará apenas de duas tabelas para armazenar os vértices e os nós.
O truque é que sua imagem mostra uma abordagem espacial, enquanto na verdade você precisa de uma abordagem temporal (imagem pendente). O barramento não vai do nó A ao nó B. O barramento vai do nó A às 12: 00 ao nó B às 12: 10 .
Portanto, criamos um nó para cada estação + um nó para cada horário de partida de cada estação. Cada nó possui três links unidirecionais saindo dele:
Agora, para encontrar a conexão do ponto A ao ponto C, escolhemos o primeiro ponto correspondente na estação A e seguimos para o nó base da estação C.
Nós:
vértices
fonte
Aqui está um exemplo de trabalho usando javascript e dados do OpenStreetMap. O modelo de dados pode ser útil.
fonte