Annonce
Pour sécuriser votre compte sur les forums du GeoRezo, nous demandons de changer votre mot de passe.
Vous allez recevoir un message pour effectuer ce changement de mot de passe.
Merci de bien respecter les règles préconisées.
Pages: 1
- Sujet précédent - connexion à postgres et ajout d'une colonne à la table d'attribut - Sujet suivant
#1 Tue 28 May 2013 10:56
- anasstopog
- Participant occasionnel
- Date d'inscription: 7 Mar 2013
- Messages: 10
connexion à postgres et ajout d'une colonne à la table d'attribut
Bonjour tt le monde , je voulais savoir comment ajouter une colonne à la table d'attribut qui aura comme valeur un calcul à partir de postgres.
j'ai essayé avec ce code, mais je sais bien qu'il ya des erreurs la dessus , est ce qu'il y'a quelqu'un qui peut m'aider !! :
from PyQt4.QtCore import *
import psycopg2
#------------------------------------------------------------------------------#
# PARAMETERS #
#------------------------------------------------------------------------------#
# Name of the column to be created
# /!\ must not exceed 10 characters
NEW_COL = 'distance_route'
# Type of the new column (probably QVariant.Double or QVariant.Int)
COL_TYPE = QVariant.Double
# Function to calculate the new value
def myFunction(cur.execute) :
'''
Calculate the new field for the selected element
:param attrs: attributeMap with numeric keys replaced by column names
:returns: value of the new field
'''
#i_sante = attrs['i_sante'].toFloat()
#i_ecole = attrs['i_ecole'].toFloat()
#i_college = attrs['i_college'].toFloat()
#i_piste = attrs['i_piste'].toFloat()
#i_route = attrs['i_route'].toFloat()
#return (1.75 * i_route + 2 * i_piste + 1.5 * i_ecole + i_college + 1.75 * i_sante)
return(cur.execute)
#------------------------------------------------------------------------------#
# SCRIPT #
#------------------------------------------------------------------------------#
# Select layer
layer = qgis.utils.iface.activeLayer()
provider = layer.dataProvider()
# Create the new column
res = provider.addAttributes( [ QgsField(NEW_COL, COL_TYPE) ] )
# Select and map attributes
allAttrs = provider.attributeIndexes()
provider.select(allAttrs)
attrNames = [ str(provider.fields()[i].name()) for i in allAttrs ]
attrDict = dict(zip(attrNames, allAttrs))
# Connexion à Postgis
conn = psycopg2.connect("dbname='test2' user='postgres' host='localhost' password='postgres'")
cur = conn.cursor()
cur.execute("""Update douar as t1
SET distance_route= (SELECT ST_Distance(t1.the_geom, t2.the_geom) FROM routes as t2
ORDER BY ST_Distance(t1.the_geom, t2.the_geom) LIMIT 1);""")
# Iterate over the features
feat = QgsFeature()
feat_2_chg = {}
while provider.nextFeature(feat):
attrs = feat.attributeMap()
attrs = dict([ (i, attrs[attrDict[i]]) for i in attrDict ])
ind = myFunction(cur.execute)
if not ind == None :
feat_2_chg[feat.id()] = {attrDict[NEW_COL] : QVariant(ind)}
# Update the layer
provider.changeAttributeValues(feat_2_chg)
Hors ligne
Pages: 1
- Sujet précédent - connexion à postgres et ajout d'une colonne à la table d'attribut - Sujet suivant