Créer un polygone tampon après les élévations à l'aide d'ArcGIS Desktop?

14

Ce que je cherche à faire, c'est de placer un tampon de 100 m sur un polygone, mais plutôt que le tampon soit à une largeur fixe "à vol d'oiseau", je veux qu'il suive les pentes de mon Lidar DEM.

J'ai ArcMap (avec 3D Analyst). Malheureusement, aucune extension Spatial ou Network Analyst avec ArcMap.

J'ai été en quelque sorte complètement tourné autour d'Internet en examinant l'analyse de proximité, l'analyse de distance de chemin et le coût cumulé anisotrope. Il semble que je doive en quelque sorte créer une grille de temps et savoir combien de temps il faudrait pour atteindre 100 m du polygone, mais cela semble plutôt en arrière. La grande majorité de ces outils semble être faite pour trouver l'itinéraire le plus simple entre deux points.

Quelqu'un a-t-il déjà fait cela?

R. Laird
la source
1
Lorsque vous dites que vous voulez «suivre les pentes», voulez-vous dire que si une cellule DEM est à 1 m de travers, sa pente est plate, vous compteriez cela comme 1 m dans votre tampon, mais si un côté est 1 m plus haut que l'autre, vous compterait cela comme 1,41 m (la distance le long de la surface)?
Dan C
Exactement, dans ce cas, nous devons montrer à 100 m d'une zone humide, et il y a une crête juste à côté. Je suppose que je pourrais utiliser la calculatrice raster de QGIS pour convertir le pourcentage de pente en mètres en fonction de la taille des cellules du raster. Je ne saurais pas comment les ajouter jusqu'à 100 m sans vérifier manuellement chaque pixel, mais oui, c'est exactement ce dont je parle.
R. Laird

Réponses:

7

Solution de contournement pour ce que vous décrivez en l'absence d'analyste spatial:

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

Exécutez ceci sur un nouveau champ (fixé le 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!)

Ajoutez des champs X et Y à lines_3D et remplissez-les en utilisant:

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

Créez une couche XY à partir des 2 champs ci-dessus, copiez-la dans la classe d'entités points et utilisez point à ligne pour créer une ligne tampon à l'intérieur de l'original:

PRODUCTION:

entrez la description de l'image ici

Conclusion:

À moins que votre terrain ne soit extrêmement raide, un simple tampon fera l'affaire, à moins que cela ne semble très probable que vous parliez réellement de la longueur du flux. Pas de chance, car pour cela vous avez besoin d'une boîte à outils d'analyse hydrologique d'analyste spatial

FelixIP
la source