Skip to Content

inverseSensPolyligneMNT.py

  1. # -*- coding: utf-8 -*-
  2.  
  3. from qgis.core import *
  4. from PyQt4.QtCore import *
  5. from qgis.utils import iface
  6.  
  7. """
  8. Ce module permet d'inverser le sens d'une polyligne en fonction d'un MNT
  9. Pour que la polyligne soit orienter du point le plus haut vers le point le plus bas
  10. Auteur : L. Granjon
  11. 2015/09/03
  12. """
  13.  
  14. ##coucheRiv=vector
  15. ##mnt=raster
  16.  
  17. #Ouverture du MNT
  18. mntInfo = QFileInfo(mnt)
  19. mntBaseName = mntInfo.baseName()
  20. rlayer = QgsRasterLayer(mnt, mntBaseName)
  21. if not rlayer.isValid():
  22. print "Layer failed to load!"
  23.  
  24. #Ouverture du vecteur
  25. vlayer = QgsVectorLayer(coucheRiv, "line", "ogr")
  26.  
  27. #On passe en edition
  28. vlayer.startEditing()
  29. #On parcours la couche
  30. for el in vlayer.getFeatures():
  31. #On recupere la geometrie de la ligne
  32. ligne = el.geometry().asPolyline()
  33. #On recupere le pixel du mnt correspondant au premier noeud
  34. ident = rlayer.dataProvider().identify(QgsPoint(ligne[0]), QgsRaster.IdentifyFormatValue)
  35. if ident.isValid():
  36. amont = ident.results()
  37. #On recupere le pixel du mnt correspondant au dernier noeud
  38. ident = rlayer.dataProvider().identify(QgsPoint(ligne[len(ligne) -1]), QgsRaster.IdentifyFormatValue)
  39. if ident.isValid():
  40. aval = ident.results()
  41. #si la hauteur du premier neud < au dernier noeud
  42. if amont[1] < aval[1]:
  43. #on inverse la geometrie
  44. ligne.reverse()
  45. geom = el.geometry().asPolyline()
  46. #on modifie la geometrie de l'entite
  47. vlayer.changeGeometry(el.id(), QgsGeometry.fromPolyline(ligne))
  48. #on valide les changements
  49. vlayer.commitChanges()
  50. #On rafraichit la carte
  51. iface.mapCanvas().refresh()