Criando polígono de buffer após elevações usando o ArcGIS Desktop?

14

O que estou procurando fazer é colocar um buffer de 100 m em um polígono, mas, em vez de o buffer ter uma largura fixa "conforme o corvo voa", quero que ele siga as inclinações do meu Lidar DEM.

Eu tenho o ArcMap (com 3D Analyst). Infelizmente, nenhuma extensão espacial ou de analista de rede com o ArcMap.

Eu meio que fui revirado pela internet olhando para Análise de Proximidade, Análise de Distância de Caminho e Custo Anisotrópico Cumulativo. Parece que preciso, de alguma forma, fazer uma grade de custo de tempo e descobrir quanto tempo levaria para atingir 100 m do polígono, mas isso parece um pouco atrasado. A grande maioria dessas ferramentas parece ser feita para encontrar a rota mais fácil entre dois pontos.

Alguém já fez isso antes?

R. Laird
fonte
1
Quando você diz que deseja "seguir as inclinações", você quer dizer que, se uma célula DEM estiver 1m em sua inclinação é plana, você contaria isso como 1m em seu buffer, mas se um lado for 1m mais alto que o outro, você contaria isso como 1,41m (a distância ao longo da superfície)?
Dan C
Exatamente, neste caso, precisamos nos mostrar a 100 m de distância de um pântano, e há uma cordilheira ao lado dele. Suponho que eu poderia usar a Calculadora de Varredura do QGIS para converter a porcentagem da inclinação em metros com base no tamanho da célula da varredura. Eu não saberia como adicioná-los até 100 m sem verificar manualmente cada pixel, mas sim, é exatamente disso que estou falando.
R. Laird

Respostas:

7

Solução alternativa para o que você descreve na ausência 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")

Execute isso no novo campo (corrigido em 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!)

Adicione os campos X e Y às linhas_3D e preencha-os usando:

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

Faça a camada XY acima de 2 campos, copie-a para a classe de recurso de pontos e use ponto para linha para criar uma linha de buffer dentro do original:

RESULTADO:

insira a descrição da imagem aqui

Conclusão:

A menos que seu terreno seja extremamente íngreme, o buffer simples fará o trabalho, a menos que pareça muito provável que você esteja realmente falando sobre o comprimento do fluxo. Azar, porque para isso você precisa da caixa de ferramentas de análise hidrológica do analista espacial

FelixIP
fonte