Mehr

GeoJson-Struktur


Ich entwerfe derzeit eine Tabellen-/Dokumentdatenbankstruktur und verwendenGeoJsonum Punkte und Routen zu speichern. Derzeit wähle ich MongoDb, ich werde PostGIS später in Betracht ziehen.

Ich möchte speichernRouteInfos für den öffentlichen Bus. Die Route enthält 2Nebenstreckeninnerhalb derselben Routennummer im Kreis hin und her gehen. Die Routeninfos enthalten zugehörige Bushaltestellen und Wegpunkte.

Die Struktur sollte darauf basieren, wie ich zurückfragen kann.

Mein Anwendungsfall ist also, dass ich die gesamten Routeninformationen und auch die aktuelle Unterroute basierend auf dem aktuellen Standort abfragen und abrufen möchte.

Welches ist geeignet, um von db abzufragen, wenn ich wie folgt strukturiere:

  1. BenutzenMultiLineStringum die 2 . zu speichernLineStrings bestehen aus Bushaltestellen und Wegpunkten. Der andere Infospeicher in einer anderen Spalte/Eigenschaft. Problem: Wie man Unterrouten abfragt oder unterscheidet.
  2. Trennen Sie die Unterrouten in einer anderen Tabelle/einem anderen Dokument oder verwenden Sie eine andere Spalte/Eigenschaft in einer Tabelle/einem Dokument (mehrere geopartiale Indizes). Problem: Doppelte Bushaltestellen und Wegpunkte und das Abrufen der gesamten Routeninformationen. Benötigen wahrscheinlich mehrere DB-Abfragen.
  3. BenutzenFeatureimGeoJson. Kann mir aber nicht vorstellen wieFeatureCollectionmit mehrerenGeometrienkann helfen, meinen Anwendungsfall oben abzufragen.

Ich werde versuchen, einige Begriffe zu ersetzen, weil Sie ein ähnliches Wort verwenden, um zwei verschiedene Ideen zu beschreiben. Lassen Sie mich wissen, wenn dies falsch ist.


Was ich vorschlage, wird Ihrer Lösung Nr. 2 am nächsten kommen:

In Ihren Daten haben Sie einen Bus Route das besteht aus einem oder vielen Bein(e). Wir können nicht haben Route ohne mindestens einen Bein. Das Route muss nicht seinMultiLineFeatureoder sogar ein räumliches Primitiv, die Aufgabe des Route ist nur, administrative Informationen über sich selbst zu haben und weiß nicht unbedingt etwas über seine Bein(e).

EIN Bein weiß was Route (Fremdschlüssel), zu dem es gehört. Wenn dein Beine sind vorgebackene Linienmerkmale, dann können sie Ihre kleinste benötigte Einheit sein. Wenn dein Beine nicht vorgebacken sind, können sie nur Informationen über die Bein selbst und muss kein räumliches Primitiv sein, kann sich beziehen auf Wegpunkt um ihre Form zu bestimmen.

Schließlich gibt es Wegpunkte, und nur Wegpunkte. Stationen werden Wegpunkte. Warum? Es gibt wirklich keinen Unterschied zwischen einem Wegpunkt und einer Station, außer dass man anhält, um Passagiere zu laden und zu entladen, dh Informationen, die in der Eingabe für den Wegpunkt gespeichert werden können (z. B. ein Feld namens is_station mit einem Wert 1, wenn der Bus anhalten muss, 0, wenn er nicht hält). Wenn Wegpunkte Ihre kleinste Einheit sind, können Sie das Routing aktualisieren, ohne neue Linienfunktionen erstellen zu müssen, aktualisieren Sie einfach Ihre Strecken-/Wegpunkt-Zuordnungstabelle mit neu Wegpunkte.

Ich persönlich würde den Weg gehen Wegpunkte mein kleinstes Gerät, weil es die größte Flexibilität bietet.

Ich würde auch eine Many-to-Many-Join-Sammlung / -Tabelle erstellen. Weil ein Wegpunkt/eine Station auch mehr als eine Etappe bedienen kann und eine Etappe mehr als einen Wegpunkt haben muss. Geben Sie außerdem ein Feld an, um Wegpunkten eine Reihenfolge zu geben, damit die Fahrtrichtung ermittelt werden kann.

Schema:

+------------+ +--------+ +------------+ | | | | | | | ROUTEN +-1---N-+ BEINE | | WEGPUNKTE | | | | | | | +---------+ +----+---+ +---------+-----+ | | 1 1 | | N N | | +----+------------------+-----+ | BEIN-/WEGPUNKT-VEREINIGUNG | | | +----------------------------------------+

Abfrage:

Viele öffentliche Verkehrsmittel holen die Leute nur an Bahnhöfen ab, daher würde ich eine räumliche Abfrage verwenden, um den nächsten zu finden Wegpunkt zu meinem Standort das heißtis_station=1.

Nachdem mein Sender ausgewählt wurde, führe ich eine Abfrage durch, die auf aStrecken-/Wegpunkt-Zuordnung-Sammlung, um eine Viele-zu-Viele-Verknüpfung durchzuführen. Dies wird mir sagen, welche Strecken diese Station bedienen.

Die Etappen wiederum wissen, welche Routen sie bedienen und somit wissen Sie alles, was Sie über Ihre Routen wissen müssen. Wenn ein Benutzer Ihre Informationen einsieht, liegt es an ihm, zu entscheiden, welche Route er bevorzugt, oder dass Sie weitere Informationen anfordern, um die optimale Route anzuzeigen.