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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Mon 30 October 2017 09:27

tematim
Juste Inscrit !
Date d'inscription: 27 Oct 2017
Messages: 7

Obtenir les fins de cables dans un réseau

Bonjour,

Je suis développeur, et je travaille en collaboration avec un bureau d'études réalisant les études avec qgis.

Le projet type est un réseau internet avec les points techniques et les cables. Voici un réseau tout simple :
[img]https://i.stack.imgur.com/i351K.png[/img]

Mon but est d'obtenir toutes les fins à savoir : C,G,E,I.

Le sens des flèches coincident avec les extrémités stockées dans la table, il n'y a pas d'inversion.

Pour cela, j'ai essayé deux approches :

- La première basée sur le geom avec cette requête :

Code:

select t1.cm_code, t1.cm_ndcode1, t1.cm_ndcode2 from t_cheminement as t1
inner join t_cheminement as t2 on ST_Equals(ST_StartPoint(t1.geom), ST_StartPoint(t2.geom)) is false and cm_code  'A'
inner join t_cheminement as t3 on ST_Equals(ST_StartPoint(t1.geom), ST_EndPoint(t3.geom)) is false and cm_code  'A'
inner join t_cheminement as t4 on ST_Equals(ST_EndPoint(t1.geom), ST_EndPoint(t4.geom)) is true or ST_Equals(ST_EndPoint(t1.geom), ST_StartPoint(t4.geom)) is true and cm_code  'A'
UNION
select t1.cm_code, t1.cm_ndcode1, t1.cm_ndcode2 from t_cheminement as t1
inner join t_cheminement as t2 on ST_Equals(ST_EndPoint(t1.geom), ST_StartPoint(t2.geom)) is false and cm_code  'A'
inner join t_cheminement as t3 on ST_Equals(ST_EndPoint(t1.geom), ST_EndPoint(t3.geom)) is false and cm_code  'A'
inner join t_cheminement as t4 on ST_Equals(ST_StartPoint(t1.geom), ST_EndPoint(t4.geom)) is true or ST_Equals(ST_StartPoint(t1.geom), ST_StartPoint(t4.geom)) is true  and cm_code  'A'

- La seconde basée sur les points :

Code:

select t1.cm_code, t1.cm_ndcode1, t1.cm_ndcode2 from t_cheminement as t1
inner join t_cheminement as t2 on t1.cm_ndcode1  t2.cm_ndcode1 and cm_code  'A'
inner join t_cheminement as t3 on t1.cm_ndcode1  t3.cm_ndcode2 and cm_code  'A'
inner join t_cheminement as t4 on t1.cm_ndcode2 = t4.cm_ndcode2 or t1.cm_ndcode2 = t4.cm_ndcode1 and cm_code  'A'
UNION
select t1.cm_code, t1.cm_ndcode1, t1.cm_ndcode2 from t_cheminement as t1
inner join t_cheminement as t2 on t1.cm_ndcode2  t2.cm_ndcode1  and cm_code  'A'
inner join t_cheminement as t3 on t1.cm_ndcode2  t3.cm_ndcode2  and cm_code  'A'
inner join t_cheminement as t4 on t1.cm_ndcode1 = t4.cm_ndcode2 or t1.cm_ndcode1 = t4.cm_ndcode1  and cm_code  'A'

Les deux requêtes ont un temps d'execution élevé, et je viens demander des avis afin de l'accélérer.

Cordialement

Hors ligne

 

Pied de page des forums

Powered by FluxBB