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

14

Lo que estoy buscando hacer es poner un búfer de 100 m en un polígono, pero en lugar de que el búfer tenga un ancho fijo "a vuelo de pájaro", quiero que siga las pendientes de mi LID DEM.

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

Internet me ha dado un giro total en el análisis de proximidad, el análisis de distancia de trayectoria y el costo acumulativo anisotrópico. Parece que necesito hacer una cuadrícula de costos de tiempo y descubrir cuánto tardaría en llegar a 100 m desde el 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?

    
pregunta R. Laird 02.06.2017 - 21:52

1 respuesta

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

Ejecuta esto en el nuevo campo (fijado el 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!)

Agregue los campos X e Y a lines_3D y rellénelos usando:

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

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

SALIDA:

Conclusión:

A menos que su terreno sea extremadamente empinado, un amortiguador 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 del analista espacial

    
respondido por el FelixIP 03.06.2017 - 02:02

Lea otras preguntas en las etiquetas