Suite

Structure GeoJson


Je conçois actuellement une structure de base de données table/document et utiliseGeoJsonpour stocker des points et des itinéraires. Actuellement, je choisis MongoDb, je considérerai PostGIS plus tard.

je veux stockerrouteinformations pour les bus publics. L'itinéraire contient 2sous-routesaller et retour en circulaire au sein du même numéro de route. Les informations sur l'itinéraire contiennent des arrêts de bus et des points de cheminement associés.

La structure doit être basée sur la façon dont je peux interroger en arrière.

Mon cas d'utilisation est donc que je souhaite interroger et obtenir toutes les informations sur l'itinéraire ainsi que le sous-itinéraire actuel en fonction de l'emplacement actuel.

Lequel convient pour interroger à partir de la base de données si je structure comme :

  1. UtiliserChaîneMultilignepour stocker les 2ChaîneLignes se composent d'arrêts de bus et de points de passage. L'autre magasin d'informations dans une colonne/une propriété différente. Problème : Comment interroger ou différencier des sous-routes.
  2. Séparez les sous-routes dans une autre table/document ou utilisez une colonne/propriété différente dans une table/document (plusieurs index géospartiaux). Problème : Dupliquer les arrêts de bus et les points de cheminement et obtenir toutes les informations sur l'itinéraire. Probablement besoin de plusieurs requêtes de base de données.
  3. UtiliserFonctionnalitédansGeoJson. Cependant, je ne peux pas imaginer commentFeatureCollectionavec plusieursgéométriespeut aider à interroger mon cas d'utilisation ci-dessus.

Je vais essayer de substituer certains termes car vous utilisez un mot similaire pour décrire deux idées distinctes. Faites-moi savoir si c'est faux.


Ce que je propose va être la solution la plus proche de vous #2 :

Dans vos données ont un bus route qui est fait d'un ou plusieurs jambes). Nous ne pouvons pas avoir un route sans au moins un jambe. le route n'a pas besoin d'être unFonction MultiLigneou même une primitive spatiale, le travail du route est juste de détenir des informations administratives sur lui-même et ne sait pas nécessairement quoi que ce soit sur son jambes).

UNE jambe sait lequel route (clé étrangère) auquel il appartient. Si ton jambes sont des caractéristiques de ligne précuites, alors ils peuvent être votre plus petite unité nécessaire. Si ton jambes ne sont pas précuits, ils peuvent contenir uniquement des informations sur le jambe lui-même et n'a pas besoin d'être une primitive spatiale, peut se référer à point de cheminement pour déterminer leur forme.

Enfin, il y a points de cheminement, et seulement points de cheminement. Les gares deviennent points de cheminement. Pourquoi? Il n'y a vraiment aucune différence entre un waypoint et une station autre que celle où l'on s'arrête pour charger et décharger des passagers, c'est-à-dire des informations qui peuvent être stockées dans l'entrée du waypoint (par exemple, un champ appelé is_station avec une valeur 1 si le bus doit s'arrêter, 0 s'il ne s'arrête pas). Si points de cheminement sont votre plus petite unité, vous pouvez mettre à jour le routage sans avoir à créer de nouvelles entités de ligne, il suffit de mettre à jour votre table d'association jambe/point de cheminement avec de nouvelles points de cheminement.

Personnellement, j'irais dans le sens de faire points de cheminement ma plus petite unité, car elle offre la plus grande flexibilité.

Je ferais également une collection/table de jointure plusieurs-à-plusieurs. Parce qu'un waypoint/station peut également desservir plus d'un segment, et un segment devra avoir plus d'un waypoint. De plus, fournissez un champ pour donner un ordre aux points de cheminement, de cette façon la direction du voyage peut être connue.

Schéma:

+----------+ +--------+ +-------------+ | | | | | | | ITINÉRAIRES +-1---N-+ JAMBES | | POINTS DE CHEMINEMENT | | | | | | | +----------+ +----+---+ +---------+---+ | | 1 1 | | N N | | +----+--------------------+-----+ | ASSOCIATION LEG/WAYPOINT | | | +-------------------------------+

Mettre en doute:

De nombreux systèmes de transport en commun ne prennent les gens qu'aux gares, j'utiliserais donc une requête spatiale pour trouver le plus proche point de cheminement à mon emplacement qui estis_station=1.

Une fois ma station sélectionnée, j'effectue une requête qui regarde uneassociation segment/point de cheminementpour effectuer une jointure plusieurs-à-plusieurs. Cela me dira quelles jambes desservent cette station.

Les jambes, à leur tour, sauront quels itinéraires elles desservent et vous pourrez donc savoir tout ce que vous devez savoir sur vos itinéraires. Si un utilisateur consulte vos informations, c'est à lui de décider quel itinéraire il préfère, ou à vous de demander plus d'informations pour afficher l'itinéraire optimal.