Pages: 1
- Sujet précédent - [Spatialite] + [Python] - intersection de 2 couches de lignes - Sujet suivant
#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
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
Pages: 1
- Sujet précédent - [Spatialite] + [Python] - intersection de 2 couches de lignes - Sujet suivant