Suite

Calcul de la pente pour les points avec des pentes descendantes rendues comme négatives dans ArcGIS

Calcul de la pente pour les points avec des pentes descendantes rendues comme négatives dans ArcGIS


J'ai un DEM et une série de points. Je voudrais mesurer le changement de pente le long de la série de points. La distinction entre les pentes montantes et descendantes est importante pour moi, et la fonction de pente d'ArcGIS rend toutes les pentes en valeurs absolues.

Je travaille avec les boîtes à outils Spatial Analyst et 3D Analyst d'ArcGIS.

C'est ce que j'ai fait jusqu'à présent.

  1. Points créés
  2. Exécutez l'outil "interpoler la forme"
  3. Exécutez l'outil "pente"
  4. Exécutez l'outil "extraire plusieurs valeurs en points" pour ajouter deux champs Elévation et Pente à la classe d'entités points.

J'ai suivi les conseils ici (http://blogs.esri.com/esri/supportcenter/2012/03/09/calculating-the-slope-of-a-hiking-trail/) pour changer les valeurs de pente de descente en négatifs , mais n'ont pas réussi. Lorsque j'exécute le code (ci-dessous), rien ne se passe.

fc = r"C:PointsTest.gdbPoints_3d" cursor = arcpy.da.UpdateCursor (fc, ["Elevation","Slope"]) firstRun = True pour la ligne dans le curseur : if firstRun : oldValue = row[ 0] firstRun = False else : if oldValue < row[0] : row[1] = row[1] else : row[1] = (-1)*row[1] oldValue = row[0] cursor.updateRow( ligne) del ligne del curseur


Vous n'avez pas besoin de mettre à jourligne[1]pour chaque fonctionnalité, donccurseur.updateRow(ligne)devrait être sous la finaleautredéclaration. Aussi, je suggère d'utiliseravecles instructions car la fermeture est mieux prise en charge :

fc = r"C:PointsTest.gdbPoints_3d" avec arcpy.da.UpdateCursor (fc, ["Elevation","Slope"]) comme curseur : firstRun = True pour la ligne dans le curseur : si firstRun : oldValue = row[0] firstRun = False else: #Nous n'avons pas besoin de vérifier moins que puisque nous ne l'annulons pas. si ancienneValeur > ligne[0] : ligne[1] *= -1 curseur.updateRow(ligne) ancienneValeur = ligne[0]

J'ai vérifié un code similaire sur un exemple de jeu de données (voir ci-dessous) et il a correctement annulé les fonctionnalités basées sur lesidéclaration. Si cela ne fonctionne toujours pas, je vérifierais si votresidéclaration évalue jamais àVrai.