#!/usr/bin/env python
# encoding: utf-8
"""
creastyle.py
permet la création de fichier style (.qml) de Quantum GIS à partir d'un
fichier texte avec des valeurs RGB du type (FORM, R, G, B):
AE,250,125,32
etc.
par Martin Laloux
version du 10/2011 pour le Portail SIG
"""
from xml.etree import cElementTree as ET
from string import *
""" création des élements de la balise qgis"""
intro = ET.Element("qgis")
transp = ET.SubElement(intro,"transparencyLevelInt")
transp.text = '255'
classatr = ET.SubElement(intro, "classificationattribute")
classatr.text= "FORM"
typec = ET.SubElement(intro,"uniquevalue")
classif = ET.SubElement(typec,"classificationfield")
classif.text="FORM"
class symbol:
"""création des éléments de la balise symbole"""
def __init__(self,valeurs=[]):
self.typec= typec
self.valeurs = valeurs
self.cle = ['FORM','R','G','B']
self.donnees = dict(zip(self.cle,self.valeurs))
self.symb = ET.SubElement(typec,"symbol")
self.lower = ET.SubElement(self.symb, "lowervalue")
self.upper = ET.SubElement(self.symb, "uppervalue")
self.outline = ET.SubElement(self.symb,"outlinecolor")
self.outsty = ET.SubElement(self.symb, "outlinestyle")
self.outtail = ET.SubElement(self.symb, "outlinewidth")
self.fillc = ET.SubElement(self.symb,"fillcolor")
self.fillp = ET.SubElement(self.symb,"fillpattern")
def creation(self):
self.lower.text = self.donnees['FORM']
self.upper.text = self.donnees['FORM']
self.outsty.text="SolidLine"
self.outtail.text="0.26"
self.outline.set("red",self.donnees['R'])
self.outline.set("green",self.donnees['G'])
self.outline.set("blue",self.donnees['B'])
self.fillc.set("red",self.donnees['R'])
self.fillc.set("green",self.donnees['G'])
self.fillc.set("blue",self.donnees['B'])
self.fillp.text = "SolidPattern"
def traitement():
"""traitement du fichier texte et écriture du fichier style"""
# ouverture du fichier texte et remplissage de la balise symbol
fichier = "test.txt"
for elem in [split(line,',') for line in open(fichier,"r")]:
symb = symbol(elem)
symb.creation()
# écriture du ficher style final
fich_style = ET.ElementTree(intro)
fich_style.write("monstyle.qml")
if __name__ == '__main__':
traitement()