バス停のクエリデータベーススキーマを設計する方法


9

バス停のデータがあるので、特定の開始駅と終了駅に線/複数線を提供するアプリケーションを作成したいと考えています。

たとえば、ユーザーがステーション1からステーション2へのバス路線の候補を取得しようとします。

station1との両方をカバーできるバスラインがある場合station2、このラインを返す必要があります。結果は次のようになります。

Step1: station1 -- station2

ステーション1とステーション2の間に直接バス路線がない場合、アプリケーションは交換計画を見つけようとします。たとえば、結果は次のようになります。

Step1: station1 -- exchangestation

Step2: exchangestation -- station2

これでデータは取得できましたが、データベースでデータモデルを設計する方法、クエリを効率的にするためのスキーマを作成する方法がわかりません。

=============================================

更新:

ここに画像の説明を入力してください

たとえば、バスのラインは4つ(実際には2つ)あり、それぞれ色が異なります。

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) 

次に、これらの情報をデータベースに保存して、ある駅から別の駅へのバス路線計画を照会する場合、必要なテーブルの数と、各テーブルに何を配置する必要があるのでしょうか。


@ giser.iあなたはそれを行った場合、あなたが答える.canも同様の問題が持ってgis.stackexchange.com/questions/70253/...~~Vを
スコット・

回答:


6

すべてのルートを他のルートの組み合わせとして定義する別のテーブルを作成する必要があると思います。次に、このテーブルをクエリして実際のルートに結合し、ジオメトリを取得します。

クエリが「駅から駅」までで、各セクションに「駅から」および「駅まで」がある場合。しかし、複数のセクションを取るルートを含めたい場合は、次のような別のテーブル「ルート」を作成できます。

  • 「ルート名」、「ルートID」、「駅から」、「駅へ」

また、次のようなオリジナルのセクションテーブルも必要です。

  • 「セクション名」、「セクションID」など...

そして、私はあなたが次のような別の結合テーブルを必要とすると思います:

  • 「ルートID」、「セクションID」

そのテーブルには、ルートテーブルとセクションテーブル間の1対多の関係が格納されているため、上記の例では、結合テーブルに各ステップに1つずつ、2つの行があります。クエリは、ルートテーブルで、駅から、駅まで行われます。返されるデータは、空間の場合、ルートテーブルの詳細とセクションテーブルの空間データです。たぶん、あなたは各セクションの時間を合計するか、何でもします。

それは理にかなっていますか?


実際、現在、テーブルはなく、テキスト形式の元のデータしかありません。
giser 2013

OK、それは大丈夫です。私の答えはその時立っていると思います。3つのテーブルを使用します。
Alex Leith 2013

ライブの例で投稿を更新しましたが、チェックに時間を割いてもらえますか?
giser 2013

@ AlexLeith.iにも同様の問題がここにありますgis.stackexchange.com/questions/70253/…–
scott

3

おそらくそのためのツールを選択し、ツールが強制するスキーマに従う必要があります(たとえばpgRouting)。

テーブルなしでそれを実行したい場合は、頂点とノードを格納するために必要なテーブルは2つだけです。

トリックは、あなたの画像が空間的アプローチを示しているのに対し、実際には時間的アプローチが必要なことです(画像保留中)。バスはノードAからノードBに行きません。バスはノードA @ 12:00からノードB @ 12:10に行きます。

したがって、すべての駅のノード+各駅からのすべての出発時刻のノードを作成します。各ノードには、そこから出て行く3つの一方向リンクがあります。

  • バスの目的地へのリンク(A @ 12:00-B @ 12:10料金:10分)
  • この駅から出発する次のバスへのリンク(A @ 12:00-A @ 12:30費用:30分)
  • ベースノードへのリンク(A @ 12:00からAのコスト:0分)

ここで、ポイントAからポイントCへの接続を見つけるために、ステーションAで最も早い一致ポイントを選択し、そこからステーションCのベースノードへの経路を見つけます。

ノード:

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

頂点

id|start_node|end_node|line|cost
---------------------------
1 |3         |4       |l1  |10
2 |3         |1       |NULL|0
3 |4         |2       |NULL|0

.iにも同様の問題があります。gis.stackexchange.com/ questions / 70253 /…
scott

0

以下は、JavaScriptとOpenStreetMapのデータを使用した実用的なです。データモデルが役立つ場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.