Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Mon 24 June 2019 09:40

D3us
Participant actif
Date d'inscription: 6 Mar 2019
Messages: 57

[pgrouting] CreateTopology après un nodeNetwork

Bonjour à tous,

Suite à mon précédent topic : https://georezo.net/forum/viewtopic.php … 53&p=2

J'ai réussi à noder ma table planet_osm_line.
Ma table "noded", elle, dispose donc des colonnes suivantes :
id
old_id
sub_id
source
target
way

Si je suit la méthodologie proposée par la documentation de pgrouting, je dois donc effectuer un pgr_analyzeGraph (qui passe comme une lettre à la poste) puis pgr_createTopology. Et c'est là que ça coince.

Voici ma requête en premier lieu :

Code:

DO $PROC$
DECLARE
    nb integer:= 500; --TODO: choisir la valeur adaptée
    max integer:= 0;
    actu integer:= 1;
BEGIN
    SELECT max(id) FROM planet_osm_line_noded INTO max;
    WHILE actu  + nb < max LOOP
        EXECUTE
            $$
            SELECT pgr_createTopology('planet_osm_line_noded',
                                     0.1, 
                                     'way', 
                                     'id',
                                      'source',
                                      'target',
                                     rows_where:=$1);
            $$
            USING format('id BETWEEN %s AND %s', actu, actu + nb);
        actu:=actu+nb;
    END LOOP;
END;
$PROC$
LANGUAGE plpgsql;

Petite dédicace à tumasgiu qui m'a grandement aidé à construire cette requête (Frère je te paye une bière quand tu veux)


Bref quand je lance ma requête, le calcul renvoi toujours des colonnes target et source vides (avec la valeur null dedans)
Je ne vois pas ce qui me bloque, sachant que toutes les colonnes requises sont présentes et alimentées et que la fonction est très bien passé sous cette forme pour la première topologie (celle sur la table que l'on va nodée).

Voilà je cherche de mon côté évidemment mais si quelqu'un à une idée wink)

Dernière modification par D3us (Mon 24 June 2019 10:14)

Hors ligne

 

#2 Tue 25 June 2019 14:29

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: [pgrouting] CreateTopology après un nodeNetwork

Bonjour D3us,
je ne comprends pas pourquoi ta fonction createTopology, est incluse dans une boucle while, normalement, la topologie est exécuté une seule fois...

Si tu lances la requete directement en sql sans passer par une fonction, celle ci passe ? (sans le row_where)

A+
Nicolas GRANIER

Hors ligne

 

#3 Tue 25 June 2019 15:35

D3us
Participant actif
Date d'inscription: 6 Mar 2019
Messages: 57

Re: [pgrouting] CreateTopology après un nodeNetwork

Bonjour,

Désolé de ne pas l'avoir signalé mais je pense avoir ma solution, avant tout je vous explique :

La boucle while permet de lancer la méthode createTopology en prenant les id 500 par 500. Donc tant que nous n'avons pas atteint l'id max, la boucle tournera.

actu est au départ à 1 et nb est à 500, à la fin de chaque boucle on fait actu = actu + nb

Donc on va comme cela de 500 en 500.

Si je lance la fonction seule, ma table est tellement volumineuse qu'elle va tourner pendant des jours (et j'insiste bien sur des jours littéralement parlant), pour finir sur une erreur du genre "out of memory".

Le problème étant que les fonctions pgr stockent en mémoire le résultat des calculs jusqu'à la fin de ceux ci avant de l'écrire dans une nouvelle table ou la même table (en fonction de la méthode utilisée).
Hors je ne dispose pas d'assez de mémoire pour lancer une génération du pays de la Loire.

Venons à ma résolution

Si ma table_noded retournait une topologie vide malgré le lancement de createTopology, c'est qu'en fait les id utilisés lors de la fonction précédente nodeNetwork, ont été remplacés par d'autres id. Qui du coup ne se suivent même pas.
Étant donné que ma requête ne peut fonctionner que si j'ai des id qui vont de 1 à X ,  x étant le plus id. J'ai donc créé une nouvelle colonne et j'ai implanté mes id, qui cette fois se suivent.

Hors ligne

 

#4 Thu 27 June 2019 16:11

D3us
Participant actif
Date d'inscription: 6 Mar 2019
Messages: 57

Re: [pgrouting] CreateTopology après un nodeNetwork

Bon finalement ça ne marche pas, j'ai target et source qui sont null
Je craque nerveusement là

Hors ligne

 

Pied de page des forums

Powered by FluxBB