Bienvenue! Inscrivez-vous et rejoignez notre communaut :)
  • Login:

Bienvenue sur Forum SIG - Systmes d'Information Gographique et Gomatique.

Bienvenue sur le forumSIG. S'il s'agit de votre premire visite, assurez vous de faire une recherche pralable dans les FAQ SIG. Vous devez vous inscrire avant de pouvoir poster.

Affichage des rsultats 1 5 sur 5

Discussion: Problme calcul de cot

  1. #1

    Date d'inscription
    avril 2015
    Emploi
    Charg d'tude
    Messages
    56

    Par dfaut Problme calcul de cot

    Bonjour tous,

    Depuis quelques jours maintenant je fais face un problme que je n'arrive pas a grer. Je tente de calculer un cot distance entre deux points avec un raster d'altitude qui fait office de contrainte pour le "cot".
    Je travaille sous QGIS.2.6.1.

    J'ai ces donnes en entres :

    - Mon raster avec les donnes d'altitude (format .asc)
    - Une couche avec moin point de dpart (.shp)
    - Une autre couche avec le point d'arrive (.shp galement)

    Toutes ces couches sont senses tre sous l'EPSG 2154 (je dis "senses" car lorsque j'excute mon code, l'erreur semble lie au terme "crs")

    J'utilise le script suivant :


    import processing

    path = "C:/.../cost/"

    # Digital Elevation Model
    dem = path + "dem.asc"

    # Starting point of our path
    start = path + "start-point.shp"

    # End of our path
    finish = path + "end-point.shp"

    # Get the DEM extent
    demLyr = QgsRasterLayer(dem, "DEM")
    ext = demLyr.extent()
    xmin = ext.xMinimum()
    ymin = ext.yMinimum()
    xmax = ext.xMaximum()
    ymax = ext.yMaximum()
    box = "%s,%s,%s,%s" % (xmin,xmax,ymin,ymax)

    a = QgsVectorLayer(start, "Start", "ogr")
    b = QgsVectorLayer(finish, "End", "ogr")

    # Cummulative cost raster to temp file
    cost = path + "cost.tif"
    tmpCost = processing.runalg("grass:r.cost",dem,a,b,False,False,box,0,-1,0.0001,cost)

    # Merge start and end point layers into one layer for SAGA least cost path algorithm
    merge = path + "merge.shp"
    tmpMerge = processing.runalg("qgis:mergevectorlayers",start,finish,merge)


    # Least cost path analysis
    vLyr = QgsVectorLayer(merge, "Destination Points", "ogr")
    rLyr = QgsRasterLayer(cost, "Accumulated Cost")
    line = path + "path.shp"
    points = path + "profilePts.shp"
    results = processing.runalg("saga:leastcostpaths",vLyr,rLyr,dem,points,line)
    lcp = QgsVectorLayer(line, "Least Cost Path", "ogr")
    QgsMapLayerRegistry.instance().addMapLayers([vLyr, lcp, demLyr])


    Je ne vois pas vraiment ce qui pose problme dans ce script. J'ai eu pas mal d'erreurs lies au fait que la couche "cost.shp" n'avait pas la mme tendue que mon raster mais je pense aovir rsolu ce problme. Voici l'erreur qui s'affiche dans mam console la fin de l'excution de mon script :


    Traceback (most recent call last):
    File "<input>", line 1, in <module>
    File "C:/.../code.py", line 45, in <module>
    results = processing.runalg("saga:leastcostpaths",vLyr,rLyr,decoupage,points,line)
    File "C:/PROGRA~1/QGISBR~1/apps/qgis/./python/plugins\processing\tools\general.py", line 71, in runalg
    alg = Processing.runAlgorithm(algOrName, None, *args)
    File "C:/PROGRA~1/QGISBR~1/apps/qgis/./python/plugins\processing\core\Processing.py", line 326, in runAlgorithm
    if not alg.checkInputCRS():
    File "C:/PROGRA~1/QGISBR~1/apps/qgis/./python/plugins\processing\core\GeoAlgorithm.py", line 382, in checkInputCRS
    crs = dataobjects.getObject(item).crs()
    AttributeError: 'NoneType' object has no attribute 'crs'


    Si quelqu'un ayant l'habitude de raliser ce type de traitement pouvait me dire ce qui ne va pas dans mes manip' ce serait gnial

    Merci d'avance et bon week end tous !
    Dernire modification par gene ; 14/02/2016 09h54.

  2. #2
    Modrateur et rdacteur Supporter(rice)


    Date d'inscription
    octobre 2005
    Localisation
    Louvain-la-neuve
    Emploi
    Gologue
    Organisme
    Universit Catholique de Louvain - Rgion Wallonne
    Messages
    2 558

    Par dfaut Re : Problme calcul de cot

    L'erreur vous indique simplement que le rsultat de la commande


    results = processing.runalg("saga:leastcostpaths",vLyr,rLyr,dem,points,line)


    est nul

    a et b sont-elles des nouvelles couches ou des couches dans le canevas ?

    Si ce sont des des couches dans le canevas, ce n'est pas la bonne formulation avec processing
    "Caminante, no hay camino, el camino se hace al andar" A. Machado

  3. #3

    Date d'inscription
    avril 2015
    Emploi
    Charg d'tude
    Messages
    56

    Par dfaut Re : Problme calcul de cot

    a et b sont effectivement des couches dj existantes.

    je met ci-dessous une capture d'ecran de mes donnes disponibles :

    Cliquez sur l'image pour la voir en taille relle 

Nom : 		donnees_entree.jpg 
Affichages :	34 
Taille :		51,5 Ko 
ID : 			8046

    Je ne comprend pas pourquoi ce script ne fontionne pas, il faut juste creer une ligne entre ces deux points et que celle-ci suive les valeurs d'altitude les moins leves.

    Dans le script que j'ai mis prcdement, il faut savoir que les couches "merge.shp" et "cost.tif" sont cres et que c'est aprs que survient l'erreur. Elle doit donc effectivement se trouver dans le

    results = processing.runalg("saga:leastcostpaths",vLyr,rLyr,dem,points,line)
    .

    Une ide de ce que je dois modifier pour faire apparatre cette maudite ligne de cot ? :p
    Dernire modification par gene ; 14/02/2016 18h12.

  4. #4
    Modrateur et rdacteur Supporter(rice)


    Date d'inscription
    octobre 2005
    Localisation
    Louvain-la-neuve
    Emploi
    Gologue
    Organisme
    Universit Catholique de Louvain - Rgion Wallonne
    Messages
    2 558

    Par dfaut Re : Problme calcul de cot

    Parce que le module processing, extrieur QGIS, ne connait pas le canevas des couches, donc a = QgsVectorLayer(start, "Start", "ogr") donne une valeur nulle. Examinez comment sont fait les scripts de la Boite outil;

    La solution est


    a = processing.getObject("start_point")
    b = processing.getObject("end_point")


    ou alors, vous crez un QgsVectorLayer partir du fichier shapefile original.
    Dernire modification par gene ; 14/02/2016 18h38.
    "Caminante, no hay camino, el camino se hace al andar" A. Machado

  5. #5

    Date d'inscription
    avril 2015
    Emploi
    Charg d'tude
    Messages
    56

    Par dfaut Re : Problme calcul de cot

    J'ai essay cette solution et cela ne fonctionne toujours pas J'obtiens le message d'erreur suivant :

    avec :
    Code:
    a = processing.getObject("start-point")
    b = processing.getObject("end-point")
    Error: Wrong parameter value: None
    Error: Wrong parameter value: /Users/loulo/Desktop/cost3/end-point.shp
    Traceback (most recent call last):
    File "<input>", line 1, in <module>
    File "C:/Users/loulo/Desktop/cost3/code.py", line 40, in <module>
    results = processing.runalg("saga:leastcostpaths",vLyr,rLyr, dem,points,line)
    File "C:/PROGRA~1/QGISBR~1/apps/qgis/./python/plugins\processing\tools\general.py", line 71, in runalg
    alg = Processing.runAlgorithm(algOrName, None, *args)
    File "C:/PROGRA~1/QGISBR~1/apps/qgis/./python/plugins\processing\core\Processing.py", line 326, in runAlgorithm
    if not alg.checkInputCRS():
    File "C:/PROGRA~1/QGISBR~1/apps/qgis/./python/plugins\processing\core\GeoAlgorithm.py", line 382, in checkInputCRS
    crs = dataobjects.getObject(item).crs()
    AttributeError: 'NoneType' object has no attribute 'crs'

    De la mme manire j'ai essay en crant un QgsVectoLayer partir du fichier shapefile original et j'obtiens le mme problme :

    avec
    Code:
    a = QgsVectorLayer("C:/.../start-point.shp", "start_point", "ogr")
    b = QgsVectorLayer("C:/.../end-point.shp", "end_point", "ogr")
    Traceback (most recent call last):
    File "<input>", line 1, in <module>
    File "C:/Users/loulo/Desktop/cost3/code.py", line 29, in <module>
    tmpCost = processing.runalg("grass:r.cost",dem,a,b,False,Fal se,box,0,-1,0.0001,cost)
    File "C:/PROGRA~1/QGISBR~1/apps/qgis/./python/plugins\processing\tools\general.py", line 71, in runalg
    alg = Processing.runAlgorithm(algOrName, None, *args)
    File "C:/PROGRA~1/QGISBR~1/apps/qgis/./python/plugins\processing\core\Processing.py", line 326, in runAlgorithm
    if not alg.checkInputCRS():
    File "C:/PROGRA~1/QGISBR~1/apps/qgis/./python/plugins\processing\core\GeoAlgorithm.py", line 382, in checkInputCRS
    crs = dataobjects.getObject(item).crs()
    AttributeError: 'NoneType' object has no attribute 'crs'

    Il est toujours question d'un "CRS" et je ne vois vraimetn pas d'o ca vient .. une ide ?


    EDIT

    J'ai finalement russi rsoudre ce problme de " 'NoneType' object hs no attribute 'crs ' en effectuant les modifications proposes par Gene (il suffisait de mettre a = QgsVectorLayer ( path + "start-point.shp") et non pas le chemin .

    Mais aprs tout cela il y a encore une erreur qui apparat l'avant dernire ligne de mon script. les couches "merge.shp" et "cost.tif" sont bien cres, mais aprs cela il m'est affich le message d'erreur suivant :

    "Unable to execute algorithm
    Les couches en entre n'ont pas la mme emprise de grille"

    J'ai tent de dcouper mon raster d'origine en fonction de la couche "cost.tif" mais cela ne fonctionne pas. D'o vient ce problme "d'emprise de grille" et comment puis-je le rsoudre ?
    Dernire modification par louloupzh18 ; 14/02/2016 23h34. Motif: Mise jour

 

 

Discussions similaires

  1. [ArcGIS 10.x] Calcul de cot en fonction de la topographie
    Par Blackmapex dans le forum Assistance Technique
    Rponses: 7
    Dernier message: 04/12/2014, 21h02
  2. [ArcGIS 10.x] Chemin de cout / distance de cout / distance de chemin
    Par Sophie59 dans le forum Assistance Technique
    Rponses: 11
    Dernier message: 26/06/2013, 07h53
  3. [ArcGIS 10.x] Outil de distance de cot
    Par Mat_SK dans le forum Assistance Technique
    Rponses: 1
    Dernier message: 10/01/2012, 07h53
  4. [QGIS 1.x] Calcul de cot de dplacement
    Par CartOrchid dans le forum Assistance et Programmation
    Rponses: 3
    Dernier message: 25/07/2011, 16h50

Les tags pour cette discussion

Liens sociaux

Rgles de messages

  • Vous ne pouvez pas crer de nouvelles discussions
  • Vous ne pouvez pas envoyer des rponses
  • Vous ne pouvez pas envoyer des pices jointes
  • Vous ne pouvez pas modifier vos messages
  •