Requêtes Postgis

Extraire des données OSM, créer sa carte, uMap, utiliser sur un GPS ou un smartphone...
Répondre
Tioneb
Messages : 32
Inscription : mar. mars 27, 2018 4:03 pm

Requêtes Postgis

Message par Tioneb » mer. mai 23, 2018 12:49 am

Après avoir remanié plusieurs fois ma base pour optimiser le fonctionnement, je m'attaque aux requêtes Postgis. N'étant pas très fort dans ce domaine, d'autant qu'il me faut le coupler à Active record, j'avoue que je galère un peu... mais j'ai enfin mes premiers résultats qui sortent.

Je présume que l'on peut faire à peu près toutes les requêtes que l'on veut, mais j'ai quand même quelques interrogations.

Pour plus de facilités, j'ai découpé mes circuits en tronçon pour ne pas avoir non plus de geojson trop importants (suis à 15000 points sur les linestring, je ne me rend pas compte si ce n'est trop). J'ai donc une table de circuits avec une autre table des traces avec leurs variantes, que j'ai stocké en linestring (avec un boleen pour savoir si c'est le chemin principal ou pas)... ce n'est peut être pas une bonne idée ? Faudra peut etre que je modfie le shéma une nouvelle fois...mais c'est par l'expérimentation que j'apprends. ;)

Est que l'on peut connecter des traces entres elles et faire des calculs de distance (en associant plusieurs linestring) ?

Par exemple, j'ai la voie A (voie principale) et la voie B (une variante) qui rejoint la voie A à un point P.
J'ai un poi situé sur la voie B... est ce que je peux calculer la distance vers un autre poi situé sur la voie A après le point P ?

Autre question, sachant que mes traces ne changent jamais (ou très rarement), est ce que je peux l'intégrer sur mon fond de carte pour éviter de charger le tracé geojson à chaque fois et gagner ainsi en rapidité et en requetage ?

yvecai
Messages : 43
Inscription : ven. févr. 26, 2016 4:49 pm

Re: Requêtes Postgis

Message par yvecai » jeu. mai 24, 2018 9:47 pm

Pour ta première question, c'est du calcul d'itinéraire (routing). Pgrouting peux t'aider, je pense.
Pour la deuxième, c'est du rendu, et là c'est certainement osm2pgsql, mod_tile et mapnik qui sont les mieux documentés.

Tioneb
Messages : 32
Inscription : mar. mars 27, 2018 4:03 pm

Re: Requêtes Postgis

Message par Tioneb » ven. mai 25, 2018 12:35 pm

Merci Yves,

J'ai regardé pgrouting mais je penchais pour un système plus simple (de plus Heroku ne propose pas cette extension) même si effectivement, on peut l'apparenter à un routage, on est quand même sur un système ou les connections sont peu nombreuses.
Je pensais pluto utiliser ST_LineLocatePoint combiné avec ST_LineInterpolatePoint... mais peut être que je fais fausse route. (sans jeu de mots)

Pour le deuxième point, j'ai peut être mal formulé la question, mais je pensais plutôt à mapbox ou équivalent ;)

yvecai
Messages : 43
Inscription : ven. févr. 26, 2016 4:49 pm

Re: Requêtes Postgis

Message par yvecai » sam. mai 26, 2018 12:29 am

D'un point A à un point B sur la même voie, alors oui tu peux t'en sortir avec ça. Si c'est des voies différentes alors il vaut mieux passer par une solution de routage car ça devrait probablement trop complexe.

Avatar de l’utilisateur
cquest
Messages : 1826
Inscription : ven. avr. 16, 2010 12:22 am
Localisation : Val de Marne
Contact :

Re: Requêtes Postgis

Message par cquest » sam. mai 26, 2018 9:36 am

Si les itinéraires sont peu nombreux, tu peux te passer de pgrouting et faire ces calculs toi même, ce qui va demander du boulot pour explorer le graphe.

Ce graphe doit contenir pour chaque itinéraires allant d'un point A à B, ces extrémités (commets) et une info sur le temps ou la distance entre les deux (l'arc), mais sans besoin du détail de la géométrie.


Pour le rendu... intégrer le tracé de l'itinéraire directement à l'image est possible, mais...
- soit on récupère le fond de carte et on ajoute le tracé, puis en envoie l'image résultat.
- soit on génère tout le fond de carte en y incluant ce tracé (lourd car il faut toutes les données OSM de la zone, faire un rendu, etc)

Quel est le problème au juste ? Le tracé un peu lourd en geojson ?
postgis peut le simplifier si besoin... ST_SnapToGrid ST_Simplify

Tioneb
Messages : 32
Inscription : mar. mars 27, 2018 4:03 pm

Re: Requêtes Postgis

Message par Tioneb » sam. mai 26, 2018 6:17 pm

cquest a écrit :
sam. mai 26, 2018 9:36 am
Si les itinéraires sont peu nombreux, tu peux te passer de pgrouting et faire ces calculs toi même, ce qui va demander du boulot pour explorer le graphe.
Je n'ai pas beaucoup de variantes que je peux documenter au fil de l'eau. Disons une vingtaine pour commencer, mais ça devrait pas aller au delà d'un centaine je pense. Le graphe est somme toutes assez simple.
cquest a écrit :
sam. mai 26, 2018 9:36 am
Ce graphe doit contenir pour chaque itinéraires allant d'un point A à B, ces extrémités (commets) et une info sur le temps ou la distance entre les deux (l'arc), mais sans besoin du détail de la géométrie.
Donc si je comprends bien, quand tu parles des points A et B tu parles des extrémités de chaque tronçon ? Ou bien de toutes les relations possibles entre tous les pois ?
cquest a écrit :
sam. mai 26, 2018 9:36 am
Quel est le problème au juste ? Le tracé un peu lourd en geojson ?
postgis peut le simplifier si besoin... ST_SnapToGrid ST_Simplify
En fait, j'en ai l'impression (environ 4 Kb), mais comme je n'ai aucune idée à partir de quand un geojson devient trop lourd... :shock:

Avatar de l’utilisateur
cquest
Messages : 1826
Inscription : ven. avr. 16, 2010 12:22 am
Localisation : Val de Marne
Contact :

Re: Requêtes Postgis

Message par cquest » dim. mai 27, 2018 8:56 am

A-B, oui, je parle des extrémités des tronçons, c'est à dire les sommets du graphe, là où il faut prendre une décision pour continuer son chemin.

Pour le poids des geojson... distinguer deux limites:
- la taille globale (pour le transfert)
- le nombre d'objets (pour l'affichage)

Pour la taille:
- arrondir les coordonnées à 6 décimales permet souvent de gagner pas mal dans bien des cas... et on reste à 10cm de précision !
- inutile de faire du "pretty" geojson lisible par un humain, pas besoin d'indentation, de retours à la ligne
avec ça on gagne souvent dans les 50%

Pour le nombre d'objets:
- sur des objets linéaires ou surfaciques, ST_Simplify/ST_Snaptogrid va éliminer les détails de leur forme, on gagnera aussi du coup en taille
- sur les objets linéaires... pas grand chose à faire sauf du clustering (les regrouper par proximité)

Quelques centaines d'objets s'affichent rapidement avec leaflet/openlayers.
Quelques milliers peuvent être affichés en cluster, géré par le client (leaflet/openlayer)
Au delà, c'est côté serveur qu'il faut faire les cluster pour limiter le volume de données transmis et le traitement pas le client

Inutile de résoudre des problèmes qui n'existent pas encore... mais les anticiper c'est pas mal ;)

Tioneb
Messages : 32
Inscription : mar. mars 27, 2018 4:03 pm

Re: Requêtes Postgis

Message par Tioneb » dim. mai 27, 2018 10:21 am

cquest a écrit :
dim. mai 27, 2018 8:56 am
A-B, oui, je parle des extrémités des tronçons, c'est à dire les sommets du graphe, là où il faut prendre une décision pour continuer son chemin.
Ok super, par contre je ne vois pas du tout comment tu peux gérer la chose. Une doc, un tuto auquel je pourrais me référer ?

Je présume que l'idéal c'est de stocker ces infos sous forme POINT() avec l'entrée et la sortie.... mais après j'ai vraiment aucune idée de ce que je dois faire... :(
cquest a écrit :
dim. mai 27, 2018 8:56 am
Inutile de résoudre des problèmes qui n'existent pas encore... mais les anticiper c'est pas mal ;)
J'aime bien anticiper les problèmes, ca me permet d'organiser mon code en conséquence et de ne pas à avoir à tout refaire, une fois que les problèmes surgissent ;)

Avatar de l’utilisateur
cquest
Messages : 1826
Inscription : ven. avr. 16, 2010 12:22 am
Localisation : Val de Marne
Contact :

Re: Requêtes Postgis

Message par cquest » mer. mai 30, 2018 9:57 am

Le graphe n'a plus rien de géographique... c'est une logique totalement différente et il y a plein de choses à lire sur ce sujet en particulier sur les algo de recherche d'itinéraires.

C'est quelque chose que j'ai peu exploré, je n'ai pas de lien à conseiller.

pgRouting sert à gérer ça et peut gérer des graphes importants.

Sur un petit graphe, on doit pouvoir s'en sortir avec des requêtes postgres récursives, exemple: https://vibhorkumar.blog/2011/01/14/dir ... ery-of-pg/

Tioneb
Messages : 32
Inscription : mar. mars 27, 2018 4:03 pm

Re: Requêtes Postgis

Message par Tioneb » jeu. mai 31, 2018 12:00 am

Super intéressant comme lien ;) J'apprends plein de choses... merci ;)

Sauf que dans le cas présent, je ne cherche pas à établir le chemin le plus court... juste à proposer les différentes options.
De plus les randonneurs font environ 20/25 km... 40 pour les plus sportifs... je n'ai donc pas besoin d'avoir la liaison entre A et Z (situé bcp trop loin)

J'ai par exemple un graph qui ressemble à ça :

A vers B 20 km
ou
A vers B 10 km

Je n'ai pas des routes multiples à l'infini. Dans 95 % des cas, la variante retourne vers le circuit principal. Et pour les 5 % restant, je pense les gérer comme des chemins indépendants

Dans ce cas, est ce que la solution la plus simple, ne consisterait pas a rattacher un poi à un tronçon ?

Par exemple A vers B... j'ai deux tronçons.
Le poi est situé sur le tronçon A'

Je merge les différents tronçons en fonction des points d'entrée et de sortie et je calcule les distance ?

La question, c'est est ce que postgis permet de retrouver le POI en fonction des linestring mergées ?

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 5 invités