Creazione di poligono buffer dopo elevazioni usando ArcGIS Desktop?


14

Quello che sto cercando di fare è mettere un buffer di 100 m su un poligono, ma piuttosto che il buffer abbia una larghezza fissa "in linea d'aria", voglio che segua le pendenze del mio DEM Lidar.

Ho ArcMap (con 3D Analyst). Purtroppo nessuna estensione per analista di rete o spaziale con ArcMap.

In un certo senso sono stato girato da Internet cercando in Proximity Analysis, Path Distance Analysis e Anisotropic Cumulative Cost. Sembra che in qualche modo debba creare una griglia di costo-tempo e scoprire quanto tempo ci vorrebbe per raggiungere i 100 m dal poligono, ma sembra piuttosto arretrato. La stragrande maggioranza di questi strumenti sembra essere stata creata per trovare il percorso più semplice tra due punti.

Qualcuno l'ha già fatto?


1
Quando dici di voler "seguire le pendenze", vuoi dire che se una cella DEM è 1 m attraverso la sua pendenza è piatta, la consideri come 1 m nel buffer, ma se una parte è 1 m più alta dell'altra, tu lo considererebbe come 1,41 m (la distanza lungo la superficie)?
Dan C

Esatto, in questo caso dobbiamo mostrare a 100 m da una zona umida, e c'è una cresta proprio accanto ad essa. Suppongo di poter usare il calcolatore raster di QGIS per convertire la percentuale di pendenza in metri in base alla dimensione della cella del quadro. Non saprei aggiungere quelli fino a 100 m senza controllare manualmente ogni pixel, ma sì, è esattamente quello di cui sto parlando.
R. Laird,

Risposte:


7

Soluzione alternativa per ciò che descrivi in ​​assenza di analista spaziale:

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

Esegui questo nuovo campo (risolto il 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!)

Aggiungi i campi X e Y a lines_3D e popolali usando:

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

Crea un livello XY da sopra 2 campi, copialo nella classe caratteristica punti e usa punto a linea per creare una linea di buffer all'interno dell'originale:

PRODUZIONE:

inserisci qui la descrizione dell'immagine

Conclusione:

A meno che il tuo terreno non sia estremamente ripido, il semplice buffer farà il lavoro, a meno che ciò non sembri molto probabile che tu stia effettivamente parlando della lunghezza del flusso. Sfortuna, perché per questo è necessario un toolbox di analisi idrologica dell'analista spaziale

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.