Giải pháp cho những gì bạn mô tả khi không có nhà phân tích không gian:
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")
Chạy này trên lĩnh vực mới (cố định vào ngày 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!)
Thêm các trường X và Y vào lines_3D và điền chúng bằng cách sử dụng:
!XY!.split(" ")[0] and !XY!.split(" ")[1]
Tạo lớp XY từ 2 trường trên, sao chép nó vào lớp tính năng điểm và sử dụng điểm tới dòng để tạo dòng đệm bên trong bản gốc:
ĐẦU RA:
Phần kết luận:
Trừ khi địa hình của bạn rất dốc, bộ đệm đơn giản sẽ thực hiện công việc, trừ khi có vẻ như rất có thể bạn đang thực sự nói về chiều dài dòng chảy. Thật không may, vì điều đó bạn cần hộp công cụ phân tích thủy văn từ nhà phân tích không gian