使用ArcGIS Desktop在高程之后创建缓冲区多边形?


14

我想做的是在多边形上放置一个100 m的缓冲区,而不是“当乌鸦飞翔时”缓冲区保持固定宽度,我希望它遵循我的Lidar DEM的坡度。

我有ArcMap(带有3D Analyst)。遗憾的是,没有使用ArcMap的Spatial或Network Analyst扩展。

互联网使我无所适从,开始研究接近度分析,路径距离分析和各向异性累积成本。看来我需要以某种方式制作时间成本网格,并找出从多边形到达100 m所需的时间,但这似乎是倒退的。这些工具中的绝大多数似乎都是用来寻找两点之间最简单的路线。

有人做过吗?


1
当您说要“跟随坡度”时,是指如果DEM像元在其坡度上为1m是平坦的,则将其视为缓冲区中的1m,但是如果一侧比另一侧高1m,则表示会算为1.41m(沿表面的距离)吗?
Dan C

确实,在这种情况下,我们需要显示距离湿地100 m的位置,并且在其旁边有一个山脊。我想我可以使用QGIS的栅格计算器根据栅格像元大小将坡度百分比转换为米。我不知道如何在不手动检查每个像素的情况下增加100 m的距离,但这是我在说的。
R. Laird

Answers:


7

在没有空间分析器的情况下您所描述的解决方法:

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

在新字段上运行此命令(于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!)

将X和Y字段添加到lines_3D并使用以下命令填充它们:

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

从以上两个字段制作XY图层,将其复制到点要素类,并使用点对点线在原始文件内创建缓冲线:

输出:

在此处输入图片说明

结论:

除非您的地形非常陡峭,否则简单的缓冲区就可以完成这项工作,除非看起来您实际上是在谈论流量长度。运气不好,因为这需要空间分析人员的水文分析工具箱

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.