# -*- coding: utf-8 -*-
from qgis.core import *
from PyQt4.QtCore import *
from qgis.utils import iface
"""
Ce module permet d'inverser le sens d'une polyligne en fonction d'un MNT
Pour que la polyligne soit orienter du point le plus haut vers le point le plus bas
Auteur : L. Granjon
2015/09/03
"""
##coucheRiv=vector
##mnt=raster
#Ouverture du MNT
mntInfo = QFileInfo(mnt)
mntBaseName = mntInfo.baseName()
rlayer = QgsRasterLayer(mnt, mntBaseName)
if not rlayer.isValid():
print "Layer failed to load!"
#Ouverture du vecteur
vlayer = QgsVectorLayer(coucheRiv, "line", "ogr")
#On passe en edition
vlayer.startEditing()
#On parcours la couche
for el in vlayer.getFeatures():
#On recupere la geometrie de la ligne
ligne = el.geometry().asPolyline()
#On recupere le pixel du mnt correspondant au premier noeud
ident = rlayer.dataProvider().identify(QgsPoint(ligne[0]), QgsRaster.IdentifyFormatValue)
if ident.isValid():
amont = ident.results()
#On recupere le pixel du mnt correspondant au dernier noeud
ident = rlayer.dataProvider().identify(QgsPoint(ligne[len(ligne) -1]), QgsRaster.IdentifyFormatValue)
if ident.isValid():
aval = ident.results()
#si la hauteur du premier neud < au dernier noeud
if amont[1] < aval[1]:
#on inverse la geometrie
ligne.reverse()
geom = el.geometry().asPolyline()
#on modifie la geometrie de l'entite
vlayer.changeGeometry(el.id(), QgsGeometry.fromPolyline(ligne))
#on valide les changements
vlayer.commitChanges()
#On rafraichit la carte
iface.mapCanvas().refresh()