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

GEODATA DAYS 2024

#1 Thu 25 March 2010 18:40

taupinou
Participant occasionnel
Date d'inscription: 25 Mar 2010
Messages: 11

QGIS 1.x : Automatisation du traitement

Bonjour,

Je travaille actuellement sur une application de localisation dans les réseaux wifi à l'intérieur d'un bâtiment.

Cette application est reliée à une base de données géographique (PostgreSQL/Postgis)
Cette base de données sert entre autres à modéliser le bâtiment en question.

Les données sont ensuite visualisées en QGIS.


Pour l'instant, je fais manuellement les traitements dans QGIS (me connecter à la base, sélectionner les données à afficher, mettre en forme et enregistrer l'image)

Mais pour mon application j'ai besoin que se traitement se fasse automatiquement.

Comment puis-je automatiser ces traitements dans un script shell, java ou C++ ?

Merci d'avance.

Hors ligne

 

#2 Fri 26 March 2010 09:12

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9860
Site web

Re: QGIS 1.x : Automatisation du traitement

Bonjour,

QGIS propose de "scripter" en C++ ou Python des traitements. Regarde la doc sur le site de QGIS.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#3 Fri 02 April 2010 15:54

taupinou
Participant occasionnel
Date d'inscription: 25 Mar 2010
Messages: 11

Re: QGIS 1.x : Automatisation du traitement

Bonjour,

J'ai récupéré un tutoriel python que je suis entrain de l'adapter aux besoins de mon application.

Ce script crée une fenêtre et charge une image à partir d'un shapefile avec les commandes:
def addLayer(self):
"""add a (hardcoded) layer and zoom to its extent"""

layerPath = "../data/test.shp"
layerName = "test"
layerProvider = "ogr"

Existe-t-il un moyen de de faire directement la connexion à une base postgresql/postgis et de charger toutes les layes qu'elle contient ?

Dernière modification par taupinou (Fri 02 April 2010 15:54)

Hors ligne

 

#4 Fri 02 April 2010 15:56

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9860
Site web

Re: QGIS 1.x : Automatisation du traitement

Bonjour,

taupinou a écrit:

Existe-t-il un moyen de de faire directement la connexion à une base postgresql/postgis et de charger toutes les layes qu'elle contient ?


Il "suffit" de faire une requête sur la table geometry_column pour récupérer les tables et les colonnes géométriques de la base.

Autre solution : faire une requête sur la table système de pgsql pour récupérer toutes les tables et vérifier qu'elles possèdent une colonne de type géométrique.

La suite est une simple boucle dans les résultats.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#5 Fri 09 April 2010 02:45

taupinou
Participant occasionnel
Date d'inscription: 25 Mar 2010
Messages: 11

Re: QGIS 1.x : Automatisation du traitement

Bonsoir,
j'ai réussi à afficher les données de ma base  en transformant mes tables postgis en fichiers shp grace à la commande
pgsql2shp -f <nom_fichier_shp> <nom_base_localisation> <nom_table>


mais j'ai encore deux petits soucis :

1) j'ai 4 tables dans ma base donc 4 fichiers shp sont générés. Le souci c'est que je n'arrive pas à superposer les affichages des fichiers pour avoir une seule image.
Y'aurait t'il un moyen de générer un seul fichier shp avec toutes les tables ?

Il "suffit" de faire une requête sur la table geometry_column pour récupérer les tables et les colonnes géométriques de la base.


Pourrais tu m'expliquer d'avantage s'il te plait, car pour le moment le programme ne reconnait pas ma table geometry_column

2) Dans son état actuel, mon script génère une fenètre et affiche l'image obtenue à partir du fichier shp dans cette fenêtre.
Je voudrais qu'à la place le sript génère directement un fichier image jpg ou png et l'enregistre dans un emplacement donné.
Est ce possible de le faire ?

Merci par avance pour vos réponses.

Dernière modification par taupinou (Fri 09 April 2010 02:46)

Hors ligne

 

#6 Wed 14 April 2010 11:12

taupinou
Participant occasionnel
Date d'inscription: 25 Mar 2010
Messages: 11

Re: QGIS 1.x : Automatisation du traitement

Bonjour,
J'ai résolu le problème de l'enregistrement grace à la commande python

Code:

self.canvas.saveAsImage("<emplacement de l'enregistrement>" + "<nom du fichier>" + ".png")

Par contre j'ai toujours le problème de superposition.
J'ai essayé de faire

Code:

pgsql2shp -f Bureau/data_finale/file3bis base_localisation "SELECT f_geometry_column FROM geometry_columns"

dans l'otique de donner en paramètre les noms de toutes les tables de ma base
mais, en résultat, j'ai un fichier vide

est-il possible de spécifier plusieurs tables en même temps à pgsql2shp ?
Sinon y'a il une commande permettant de fusionner deux shapefiles ou d'ajouter une couche à un shapefile ?

merci d'avance.

Dernière modification par taupinou (Wed 14 April 2010 11:13)

Hors ligne

 

#7 Wed 14 April 2010 11:46

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9860
Site web

Re: QGIS 1.x : Automatisation du traitement

bonjour,

La requête sert à récupérer des données d'une table spatiale. Ce n'est pas le cas de geometry_columns.

Pour récupérer automatiquement toutes les couches il faut faire un script plus complexe avec psql :

psql -d maBase -c "SELECT f_table_name,f_geometry_column FROM geometry_columns"

Traiter la réponse en bash puis faire une boucle sur ces résultats.

Pour que cela soit générique il faut que tu prennes en compte le fait qu'une table spatiale peut avoir plusieurs colonne géométrique d'où la requête SQL qui récupère le nom de la table et le nom de la colonne spatiale.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#8 Wed 14 April 2010 12:08

taupinou
Participant occasionnel
Date d'inscription: 25 Mar 2010
Messages: 11

Re: QGIS 1.x : Automatisation du traitement

D'accord, mais qu'est ce que je dois répcupérer exactement ? des noms de tables, de colonnes ?

Le souci c'est que je n'arrive pas à superposer la visualisation des couches.
Je peux récupérer chaque table séparément et générer un shapefile pour chacune d'entre elles
mais je voudrais avoir les données géométriques de toutes les tables dans un seul fichier que je pourrais afficher par la suite.

Dernière modification par taupinou (Wed 14 April 2010 12:11)

Hors ligne

 

#9 Sat 17 April 2010 16:58

taupinou
Participant occasionnel
Date d'inscription: 25 Mar 2010
Messages: 11

Re: QGIS 1.x : Automatisation du traitement

Trouvé pour la superposition !

On définit plusieurs layers à partir des shapefiles :

layerPath1 = "../chemin/fichier1.shp"
    layerName1 = "test1"
    layerProvider1 = "ogr"

layer1 = QgsVectorLayer(layerPath1, layerName1, layerProvider1)
QgsMapLayerRegistry.instance().addMapLayer(layer1);
self.canvas.setExtent(layer1.extent())
cl1 = QgsMapCanvasLayer(layer1)

enseuite, il faut prendre les cl1, cl2 ... obtenus et faire

layers= [cl1,cl3,...cln]
    self.canvas.setLayerSet(layers)

    self.canvas.saveAsImage("/home/chemin/" + "image" + ".png")


Et voilà.

Dernière modification par taupinou (Sat 17 April 2010 16:59)

Hors ligne

 

#10 Sat 17 April 2010 17:59

taupinou
Participant occasionnel
Date d'inscription: 25 Mar 2010
Messages: 11

Re: QGIS 1.x : Automatisation du traitement

Re bonjour,

Est il possible de choisir moi même les couleurs de mes layers ?
Aussi je voudrais pouvoir centrer mon image dans la fenètre d'affiche car jusqu'ici, mon image s'affiche sur une partie de la fenètre seulement ce qui cache une partie de l'image.

J'ai essayé resize mais ça n'agit que sur la fenêtre.

Merci d'avance.

Hors ligne

 

Pied de page des forums

Powered by FluxBB