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é ?

#1 Wed 19 August 2020 22:32

Theos2000
Participant assidu
Date d'inscription: 15 Jun 2015
Messages: 221

PG_routing : pgr_drivingdistance n'existe pas

Bonjour,

J'ai souhaité me replonger dans un travail effectué sur Pg_routing il y a 2 ans. Or aprés plusieurs sauvegardes et restaurations de cette base lorsque je lance mes requetes avec PG_routing ca me dit :   "la fonction pgr_drivingdistance(unknown, integer, numeric, boolean, boolean) n'existe pas....."

Est ce que quelqu'un a déja vu ca ?  j'ai vérifié que le shéma topology et que les couches n'avaient pas été modifié et que les couches mobilisés pour le calcul d'isochrone existaient bien, ce qui est le cas...

Du coup je comprend pas trop pourquoi un tel message....

Merci

Hors ligne

 

#2 Thu 20 August 2020 10:23

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1542

Re: PG_routing : pgr_drivingdistance n'existe pas

Bonjour,

pg_routing a ete réinstallé sur la nouvelle base ?
c'est une extension a part, à installer comme Postgis.


Nicolas

Hors ligne

 

#3 Thu 20 August 2020 11:31

Theos2000
Participant assidu
Date d'inscription: 15 Jun 2015
Messages: 221

Re: PG_routing : pgr_drivingdistance n'existe pas

Oui pg_routing a été installé sur la nouvelle base

Code:

CREATE EXTENSION pgrouting
    SCHEMA public
    VERSION "3.0.0";

Cependant le travail avait été ralisé avec la version 2.5 et la on est en version 3.0.

Hors ligne

 

#4 Thu 20 August 2020 15:05

Theos2000
Participant assidu
Date d'inscription: 15 Jun 2015
Messages: 221

Re: PG_routing : pgr_drivingdistance n'existe pas

En fait j'ai trouvé des variantes dans les fonctions

en version 3 la fonction ressemblait a celle ci :

Code:

- FUNCTION: public.pgr_drivingdistance(text, anyarray, double precision, boolean, boolean)

-- DROP FUNCTION public.pgr_drivingdistance(text, anyarray, double precision, boolean, boolean);

CREATE OR REPLACE FUNCTION public.pgr_drivingdistance(
    text,
    anyarray,
    double precision,
    directed boolean DEFAULT true,
    equicost boolean DEFAULT false,
    OUT seq integer,
    OUT from_v bigint,
    OUT node bigint,
    OUT edge bigint,
    OUT cost double precision,
    OUT agg_cost double precision)
    RETURNS SETOF record 
    LANGUAGE 'sql'

    COST 100
    VOLATILE STRICT 
    ROWS 1000
    
AS $BODY$
    SELECT *
    FROM _pgr_drivingDistance(_pgr_get_statement($1), $2, $3, $4, $5);
$BODY$;

ALTER FUNCTION public.pgr_drivingdistance(text, anyarray, double precision, boolean, boolean)
    OWNER TO postgres;

COMMENT ON FUNCTION public.pgr_drivingdistance(text, anyarray, double precision, boolean, boolean)

Or en version 2.5 elle ressemble a ca

Code:

 -- FUNCTION: public.pgr_drivingdistance(text, bigint, double precision, boolean)

-- DROP FUNCTION public.pgr_drivingdistance(text, bigint, double precision, boolean);

CREATE OR REPLACE FUNCTION public.pgr_drivingdistance(
    edges_sql text,
    start_vid bigint,
    distance double precision,
    directed boolean DEFAULT true,
    OUT seq integer,
    OUT node bigint,
    OUT edge bigint,
    OUT cost double precision,
    OUT agg_cost double precision)
    RETURNS SETOF record 
    LANGUAGE 'sql'

    COST 100
    VOLATILE STRICT 
    ROWS 1000
AS $BODY$
    SELECT a.seq, a.node, a.edge, a.cost, a.agg_cost
    FROM pgr_drivingDistance($1, ARRAY[$2]::BIGINT[], $3, $4, false) a;
$BODY$;

ALTER FUNCTION public.pgr_drivingdistance(text, bigint, double precision, boolean)
    OWNER TO postgres;

Hors ligne

 

#5 Mon 04 October 2021 15:12

Theos2000
Participant assidu
Date d'inscription: 15 Jun 2015
Messages: 221

Re: PG_routing : pgr_drivingdistance n'existe pas

Bonjour je me permet de relancer le sujet si par hasard quelqu'un avait un élément de réponse suite au passage de la version 2.6 de pG routing à la version 3.0. la requete initiale était

Code:

with e1 as 
(
SELECT et.edge_id , 
st_buffer(et. geom,10, 'endcap=square join=round') as geom
, 1 as factor
FROM
(SELECT id1,cost from pgr_drivingdistance(
'SELECT edge_id as id,start_node as source , end_node as target, tps_voiture as cost FROM routing.edge_data',
159082,0.20,false,false)
) firstPath
CROSS JOIN
(SELECT id1,cost from pgr_drivingDistance(
'SELECT edge_id as id,start_node as source , end_node as target,tps_voiture as cost FROM routing.edge_data',
159082,0.20,false,false)
) secondPath
INNER JOIN routing.edge_data et
ON firstPath.id1 = et.start_node
AND secondPath.id1 = et.end_node
)

SELECT 
serial::integer ,a.geom 
FROM 
(select  ST_MakePolygon(ST_ExteriorRing(ST_GeometryN(st_union(geom),1))) as geom from e1) as a
left join  (select * from donnee_initiale.gare_routing_2154 where serial = 159082) as b on st_intersects (a.geom,b.geom)
group by serial,a.geom

Mais cela renvoit

Code:

ERROR:  ERREUR:  la fonction pgr_drivingdistance(unknown, integer, numeric, boolean, boolean) n'existe pas
LINE 7: (SELECT id1,cost from pgr_drivingdistance(

Alors que cela fonctionne avec la version de PG routing installé sur la 11

Hors ligne

 

Pied de page des forums

Powered by FluxBB