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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 02 May 2016 20:00

IDO_SIG
Participant occasionnel
Date d'inscription: 4 Mar 2014
Messages: 11

[Spatialite] + [Python] - intersection de 2 couches de lignes

Bonjour à tous,

Afin d'automatiser une lourde tâche, j'ai développé un programme python qui charge une base de données Spatialite et exécute de nombreuses requêtes SQL.

Lors d'une étape, je dois obtenir la différence et l'intersection entre 2 couches de lignes (LINESTRING).
Pas trop de problème pour obtenir la différence, j'ai utilisé ST_DIFFERENCE.

En revanche, j'ai dû mal à obtenir l'intersection de ces 2 couches de lignes. ST_INTERSECTION me renvoie des résultats discutable, : des géométries sont manquantes alors que d'autres se superposent à ma couche de différence. C'est à dire que j'ai des portions de lignes à la fois différentes et identiques ! :-S

N'ayant pas réussi en SQL, j'ai testé le géotraitement "INTERSECTION" de Qgis et cela me convient parfaitement. Est'il possible depuis PYTHON d'appeler ce géotraitement ?  En appelant les tables directement depuis spatialite ?

Merci d'ores et déjà de vos pistes !

IDo

PS : il m'est impossible d'installer POSTGIS sur mon ordi.

Hors ligne

 

#2 Mon 09 May 2016 09:20

IDO_SIG
Participant occasionnel
Date d'inscription: 4 Mar 2014
Messages: 11

Re: [Spatialite] + [Python] - intersection de 2 couches de lignes

Bonjour,

Un petit up'.

Je peux fournir davantage de détail s'il le faut. Les séquences SQL par exemple.

Par avance merci,

IDo

Dernière modification par IDO_SIG (Mon 09 May 2016 09:21)

Hors ligne

 

#3 Mon 09 May 2016 09:56

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1024
Site web

Re: [Spatialite] + [Python] - intersection de 2 couches de lignes

Bonjour,

Peut-on voir la requête d'intersection ?


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#4 Mon 09 May 2016 11:09

IDO_SIG
Participant occasionnel
Date d'inscription: 4 Mar 2014
Messages: 11

Re: [Spatialite] + [Python] - intersection de 2 couches de lignes

Merci de ta réponse,

2 tables en entrée :
RQT_EDGE_DIFF_ENC1 et EDGE_DIFF_ENC2 qui regroupe l'ensemble des lignes qui ne sont pas identiques dans les deux versions d'une ENC : 1 et 2.

Voici la requête pour obtenir les lignes différentes :

Code:

SELECT t1.edge_ID, CastToMultiLinestring (Difference(t1.geometry,t2.geometry)) AS geometry 
FROM RQT_EDGE_DIFF_ENC2 AS t1, (Select ST_Union(geometry )as geometry from RQT_EDGE_DIFF_ENC1) AS t2 
WHERE not ST_Contains(t1.geometry,t1.geometry);

Le fait d'utiliser Linemerge sur une des couches engendre la création d'un noeud lorsque 2 geometries linéaires obliques se croisent. Cette création de noeud entraine un léger décalage des 2 lignes et donc me sort une micro différence. Ce point est un peu génant...


Voila pour détecter les portions de lignes en commun :

Code:

Select t2.edge_id, CastToMultiLinestring (st_intersection(t2.geometry, t1.geometry))  as geometry 
from RQT_EDGE_DIFF_ENC1 as t1, RQT_EDGE_DIFF_ENC2 as t2 
where ST_intersects(t1.geometry, t2.geometry)

Le résultat est incomplet, comme si ilcela ne traitait qu'une portion... et certaines portions se superposent avec les micro erreurs décrites ci dessus.

Dernière modification par IDO_SIG (Mon 09 May 2016 14:47)

Hors ligne

 

#5 Wed 11 May 2016 08:28

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 726

Re: [Spatialite] + [Python] - intersection de 2 couches de lignes

Bonjour,
Oui c est tout à fait possible d'executer le script d'intersection de Qgis depuis un script python puisque ce script fait partie de la boîte à outil de traitement et donc est accessible depuis le module processing.
Pour ce faire,

Code:

import processing

Code:

processing.runalg("qgis:intersection", layer1,layer2,RESULT)

RESULT peut être de type memory layer ou path vers un fichier shp il me semble.
Tu trouves une question sur gistackexchange qui peut te donner une aide :
http://gis.stackexchange.com/questions/ … processing

Sinon tu as de l aide plus générale sur comment appeler les scripts du module processing
http://docs.qgis.org/2.2/fr/docs/user_m … nsole.html

N'hésite pas si tu as des difficultés, notamment pour recharger le résultat dans ta base spatialite.

Bonne journée,

Hors ligne

 

#6 Wed 11 May 2016 12:01

IDO_SIG
Participant occasionnel
Date d'inscription: 4 Mar 2014
Messages: 11

Re: [Spatialite] + [Python] - intersection de 2 couches de lignes

Merci de ta réponse !

Alors j'ai testé et j'ai un problème dès l'import du module. Il ne trouve pas le module Processing.

Code:

ImportError: No module named 'processing'

En revanche, j'ai testé l'instruction dans la console python de Qgis et cela fonctionne parfaitement.

Pour info, je travaille en python v3, cela a t'il une incidence ?

Bonne journée,

IDo

Hors ligne

 

#7 Wed 11 May 2016 19:08

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 726

Re: [Spatialite] + [Python] - intersection de 2 couches de lignes

Bonsoir,
J ai hésité à te demander si tu passais par environnement de qgis ou par autre environnement de python.
Pour faire court,
la plupart des plugins ne sont pas prévus pour tourner en dehors de qgis.
Tu as plusieurs solutions par ordre de complexité (selon tes connaissances en dev) :

1- Tenter de charger les modules de qgis  dans ton application externe (sachant que qgis fonctionne avec python 2 j y crois moyen mais qui ne tente rien à rien... Y a des choses qui existent sur la toile en tapotant "standalone app qgis"

2-ajouter dans ton programme un module qui lance un process type bat ou bash ... En effet tu peux lancer du code python en lançant qgis en ligne de commande

Code:

qgis --code montraitement.py

3-adapter ton programme python pour qu il tourne dans la console de qgis ou mieux en plugin qgis. C est plus ou moins simple selon que tu aies une interface graphique ou non

Dernière modification par lejedi76 (Wed 11 May 2016 19:10)

Hors ligne

 

#8 Thu 12 May 2016 09:37

IDO_SIG
Participant occasionnel
Date d'inscription: 4 Mar 2014
Messages: 11

Re: [Spatialite] + [Python] - intersection de 2 couches de lignes

Bonjour,

Merci pour ta réponse claire.

Je vais analyser les différentes solutions et reviendrai vous dire laquelle j'ai choisie.

Merci.

IDo

Hors ligne

 

Pied de page des forums

Powered by FluxBB