Вирішення того, що ви описуєте у відсутності просторового аналітика:
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")
Виконайте це в новому полі (зафіксовано 02.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 до рядків_3D і заповніть їх, використовуючи:
!XY!.split(" ")[0] and !XY!.split(" ")[1]
Створіть шар XY з вище двох полів, скопіюйте його у клас особливості точок та використовуйте пункт-рядок для створення лінії буфера всередині оригіналу:
ВИХІД:
Висновок:
Якщо ваша місцевість є надзвичайно крутою, простий буфер виконає цю роботу, якщо тільки це не дуже схоже, ви насправді говорите про довжину потоку. Невдача, адже для цього вам потрібен набір інструментів гідрологічного аналізу від просторового аналітика