¿Crear un polígono de búfer después de elevaciones usando ArcGIS Desktop?

14

Lo que estoy buscando hacer es colocar un búfer de 100 m en un polígono, pero en lugar de que el búfer tenga un ancho fijo "como vuela el cuervo", quiero que siga las pendientes de mi Lidar DEM.

Tengo ArcMap (con 3D Analyst). Lamentablemente no hay extensión espacial o de Network Analyst con ArcMap.

Internet me ha dado un vuelco buscando el análisis de proximidad, el análisis de distancia de ruta y el costo acumulativo anisotrópico. Parece que de alguna manera necesito hacer una cuadrícula de costo de tiempo y descubrir cuánto tiempo tomaría llegar a 100 m del polígono, pero eso parece bastante atrasado. La gran mayoría de estas herramientas parecen estar hechas para encontrar la ruta más fácil entre dos puntos.

¿Alguien ha hecho esto antes?

R. Laird
fuente
1
Cuando dice que quiere "seguir las pendientes", ¿quiere decir que si una celda DEM está a 1 m de su pendiente es plana, lo contaría como 1 m en su búfer, pero si un lado es 1 m más alto que el otro, usted contaría eso como 1.41m (la distancia a lo largo de la superficie)?
Dan C
Exactamente, en este caso, debemos mostrarnos a 100 m de distancia de un humedal, y hay una cresta justo al lado. Supongo que podría usar la Calculadora ráster de QGIS para convertir el porcentaje de pendiente a metros en función del tamaño de celda del ráster. No sabría cómo agregarlos hasta 100 m sin verificar manualmente cada píxel, pero sí, eso es exactamente de lo que estoy hablando.
R. Laird

Respuestas:

7

Solución para lo que describe en ausencia de analista espacial:

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")

Ejecute esto en un nuevo campo (corregido el 02/05/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!)

Agregue los campos X e Y a lines_3D y complételos con:

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

Haga una capa XY de los 2 campos anteriores, cópiela en la clase de entidad de puntos y use punto a línea para crear una línea de búfer dentro del original:

SALIDA:

ingrese la descripción de la imagen aquí

Conclusión:

A menos que su terreno sea extremadamente empinado, el búfer simple hará el trabajo, a menos que parezca muy probable que realmente esté hablando de la longitud del flujo. Mala suerte, porque para eso necesitas una caja de herramientas de análisis hidrológico de un analista espacial

FelixIP
fuente