Erstellen eines Pufferpolygons nach Erhöhungen mit ArcGIS Desktop?

14

Ich versuche, einen Puffer von 100 m Länge auf ein Polygon zu setzen, aber anstatt dass der Puffer eine feste Breite aufweist, möchte ich, dass er den Hängen meines Lidar DEM folgt.

Ich habe ArcMap (mit 3D Analyst). Leider keine Spatial- oder Network Analyst-Erweiterung mit ArcMap.

Ich habe mich im Internet mit Näherungsanalysen, Pfadentfernungsanalysen und anisotropen kumulativen Kosten beschäftigt. Es sieht so aus, als müsste ich irgendwie ein Zeit-Kosten-Raster erstellen und herausfinden, wie lange es dauern würde, bis ich 100 m vom Polygon entfernt bin, aber das scheint eher rückständig zu sein. Die überwiegende Mehrheit dieser Werkzeuge scheint dafür gemacht zu sein, den einfachsten Weg zwischen zwei Punkten zu finden.

Hat das schon mal jemand gemacht?

R. Laird
quelle
1
Wenn Sie sagen, dass Sie den Hängen folgen möchten, bedeutet dies, dass eine DEM-Zelle, die 1 m über dem Hang liegt, flach ist, dies als 1 m in Ihrem Puffer angibt. Wenn jedoch eine Seite 1 m höher ist als die andere, sind Sie würde das als 1,41 m (die Entfernung entlang der Oberfläche) zählen?
Dan C
Genau in diesem Fall müssen wir 100 m von einem Feuchtgebiet entfernt zeigen, und es gibt einen Kamm direkt daneben. Ich nehme an, ich könnte den Raster-Rechner von QGIS verwenden, um die prozentuale Neigung in Meter zu konvertieren, basierend auf der Zellengröße des Rasters. Ich würde nicht wissen, wie man diese bis zu 100 m addiert, ohne jedes Pixel manuell zu überprüfen, aber ja, genau das ist es, worüber ich spreche.
R. Laird

Antworten:

7

Problemumgehung für das, was Sie in Abwesenheit eines räumlichen Analysten beschreiben:

arcpy.Buffer_analysis("target","../buffer.shp", "100 Meters")
arcpy.FeatureVerticesToPoints_management("buffer","../points.shp","ALL")
arcpy.AddField_management("points", "PID", "LONG")
arcpy.CalculateField_management("points", "PID", "[FID]")
arcpy.Near_analysis("points", "target","LOCATION")
arcpy.MakeXYEventLayer_management("points","NEAR_X","NEAR_Y","points_Layer")
arcpy.CopyFeatures_management("points_Layer","../from_points.shp")
arcpy.Merge_management("from_points;points","../pairs.shp")
arcpy.PointsToLine_management("pairs","../lines_2D.shp", "PID")
arcpy.InterpolateShape_3d("DEM","lines_2D","../lines_3D.shp")
arcpy.AddField_management("lines_3D", "XY", "TEXT")

Führen Sie dies in einem neuen Feld aus (behoben am 05/02/2018):

def getPoint(shp):
 part=shp.getPart(0)
 n=len(part);L=0
 for i in xrange(n):
  p=part.getObject(i)
  x=p.X;y=p.Y;z=p.Z
  if i >0:
    dX=X-x;dY=Y-y;dZ=Z-z;dL=pow((dX*dX+dY*dY+dZ*dZ),0.5);L+=dL
  if L>=100: break
  X,Y,Z=x,y,z 
 xNew=x+dX/dL*(L-100);yNew=y+dY/dL*(L-100)
 return '%s %s' %(xNew,yNew)
#-----------------
getPoint( !Shape!)

Fügen Sie lines_3D X- und Y-Felder hinzu und füllen Sie sie mit:

!XY!.split(" ")[0] and !XY!.split(" ")[1]

Erstellen Sie eine XY-Ebene aus den obigen 2 Feldern, kopieren Sie sie in die Point-Feature-Class und verwenden Sie Point-to-Line, um eine Pufferlinie innerhalb des Originals zu erstellen:

AUSGABE:

Bildbeschreibung hier eingeben

Fazit:

Sofern Ihr Gelände nicht extrem steil ist, erledigt der einfache Puffer die Aufgabe, es sei denn, es ist sehr wahrscheinlich, dass Sie tatsächlich über die Fließlänge sprechen. Pech, denn dafür brauchen Sie eine hydrologische Analyse-Toolbox von einem Raumforscher

FelixIP
quelle