#1 Thu 24 May 2018 19:44
- Benji12
- Participant occasionnel
- Date d'inscription: 5 Apr 2018
- Messages: 23
Requêtes postgis
Hello,
J'essaie de faire mes premières requêtes postgis et j'avoue que j'ai un peu de mal à bien comprendre. J'ai pourtant fouillé la doc officielle et pas mal de tutos à droite et à gauche...
J'ai par exemple réussi à faire les calculs de longueurs de linestrings, sans trop de difficultés, additionner celle-ci...
Je suis passé à la phase suivante retrouver les point situés à proximité (distance de 5 kms) d'un point donné.
J'ai un premier résultat plutôt cohérent, mais qui est fait suivant un radius alors que je voudrais que ce soit en fonction de ma trace.
Je réfléchi également sur une autre fonction, mais j'aurai bien besoin de votre aide pour l'implémenter :
J'ai 3 tables :
Une table circuit qui regroupe les différentes traces d'un même circuit (circuit principal et secondaire)
Une table trace où sont stockées les linestring plus quelques infos
Une table Poi avec un champ lonlat de type Point
Pour que ce soit plus facile à expliquer, j'ai fait un petit shéma (suis pas doué en dessin) :
[img]https://georezo.net/forum/attachment.php?item=7924[/img] (j'arrive pas à afficher les images)
On a les tronçons verts et noir qui correspondent au circuit principal (chaque circuit est découpé en tronçon pour plus facilité)
Le tronçon rouge est une variation du circuit principal.
Comme vous pouvez le voir, les POI (A, B, C, D) sont situés à proximité de la trace principale ou secondaire.
Je voudrais par exemple calculer les différentes distances entre ces points.
Si par exemple, je souhaite connaitre la distance entre A et C, je présume qu'il va d'abord falloir calculer la distance entre ces points et le point le plus proche de la trace (point de rencontre => petit trait fin). Calculer ensuite la distance entre ces deux points situés sur la trace et retourner la somme de tout ça ?
Je voudrais également afficher par exemple les points situés à proximité de D. Il devrait me retourner A,B, C mais comme je voudrais également retourner la distance qui les séparent, ça devient à mes yeux un peu plus compliqué, vu que aucun des trois n'est situé sur le même tronçon.
Peut être qu vous pourriez me donner des exemples de requêtes ce qui me permettrait de vous poser des questions sur leur construction et progresser dans ma compréhension du système.
Merci d'avance à tous ceux qui peuvent m'aider
Dernière modification par Benji12 (Thu 24 May 2018 19:50)
Hors ligne
#2 Mon 28 May 2018 11:40
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: Requêtes postgis
Salut,
je pense qu'il faudrait que vous partiez d'un problème simplifié, le résoudre,
puis en augmenter la complexité jusqu'à retrouver votre problème initial.
Peut être créer un jeu de données factice au préalable pour faciliter les choses.
1)
Calculer la distance entre deux POI sur un seul tronçon.
Pour se faire, vous devriez jeter un coup d'oeil aux fonctions de référencement linéaires.
http://postgis.net/docs/manual-2.4/refe … eferencing
2)
Calculer la distance entre deux POI sur plusieurs tronçons, sans variante.
Peut être pourriez vous créer une linestring unique avec tout les tronçons du circuit.
http://postgis.net/docs/manual-2.4/ST_MakeLine.html
ou bien
http://postgis.net/docs/manual-2.4/ST_LineMerge.html
3)
Intégrer une variante dans le calcul.
C'est là que réside la difficulté du problème selon moi, l'idéal serait qu'une requête retourne
des linestrings qui correspondrait à chaque variante du circuit, puis appliquer
la requête utilisée en 2).
4)
Ecrire une requête pour calculer les distances entre tout les POI.
Hors ligne
#3 Mon 28 May 2018 13:49
- Benji12
- Participant occasionnel
- Date d'inscription: 5 Apr 2018
- Messages: 23
Re: Requêtes postgis
Merci pour ce retour, c'est exactement la méthode que j'adopte, step by step
En fait, j'en suis au point numéro 3. Faire une requête qui retourne toutes les linestrings, n'est pas une difficulté en soi puisque j'ai un id unique qui peut les regrouper. Faut que je vois comment les regrouper par variantes...
Pour le point 4, l'intérêt de cette requête est de pouvoir indexer les kilométrages ?
merci pour le retour en tous les cas
Hors ligne