# -*- 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()