Problemumgehung für das, was Sie in Abwesenheit eines räumlichen Analysten beschreiben:
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")
Führen Sie dies in einem neuen Feld aus (behoben am 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!)
Fügen Sie lines_3D X- und Y-Felder hinzu und füllen Sie sie mit:
!XY!.split(" ")[0] and !XY!.split(" ")[1]
Erstellen Sie eine XY-Ebene aus den obigen 2 Feldern, kopieren Sie sie in die Point-Feature-Class und verwenden Sie Point-to-Line, um eine Pufferlinie innerhalb des Originals zu erstellen:
AUSGABE:
Fazit:
Sofern Ihr Gelände nicht extrem steil ist, erledigt der einfache Puffer die Aufgabe, es sei denn, es ist sehr wahrscheinlich, dass Sie tatsächlich über die Fließlänge sprechen. Pech, denn dafür brauchen Sie eine hydrologische Analyse-Toolbox von einem Raumforscher