I made a loop to buffer several times a certain network using arcpy. What I noticed is that when I run the code, the output files do not have the attribute fields "Shape_Area" and "Shape_Length" that I get if I perform it directly via ArcMap with the geoprocessing tool "Buffer". Still, the area is shown on the map (therefore its Shape_Area and Shape_Length cannot be zero). Is there an easy way to solve this problem, since I need the "Shape_Area" parameter to work with? My buffer code is simply:
#Enter the name of the fields I want to use to buffer (they exist in "network")
Buffers = ['Name1','Name1','Name1','Name1','Name1']
env.workspace = "C:\Mydirectory"
# Enter the network to be buffered. It contains the fields listed in "Buffers"
network = "FileinMyDirectory.shp"
out = "C:\Anotherdirectory.gdb"
for buff in Buffers:
arcpy.Buffer_analysis(network, os.path.join(out,buff), buff,)
-
Please edit your question and use code block to clarify your question.ahmadhanb– ahmadhanb2016年04月26日 08:52:16 +00:00Commented Apr 26, 2016 at 8:52
-
There seems to be some stuff missing in the code you posted. What is Buffers? Also, you keep buffering the exact same file (network) each time. Normally it should create Shape_Area and Shape_Length.BritishSteel– BritishSteel2016年04月26日 09:10:43 +00:00Commented Apr 26, 2016 at 9:10
-
I modified my question adding what you suggested me, indeed there was a part of the code missing. And yes, I am buffering the same network several timesPatapunfate– Patapunfate2016年04月26日 09:22:21 +00:00Commented Apr 26, 2016 at 9:22
-
shapearea and shapeperimiter are automatically appended to the feature class when they are in a geodatabase. You can follow @BritishSteel for outputting to a geodatabase. If you need to use a shapefile, then you can run the Add Geometry Attributes tool with your outputs. pro.arcgis.com/en/pro-app/tool-reference/data-management/…dslamb– dslamb2016年04月26日 14:46:50 +00:00Commented Apr 26, 2016 at 14:46
1 Answer 1
Here is a script that would achieve it:
import arcpy
import os
arcpy.env.workspace = r"D:\Test\Data_Points"
Buffers = arcpy.ListFeatureClasses()
out = r'D:\Test\data.gdb'
for buff in Buffers:
arcpy.Buffer_analysis(buff, os.path.join(out,buff[:-4] + '_buffer'), '20 kilometers')
print 'done'
This script takes all shapefiles from directory, buffers them, and the saves them into a geodatabase. Note that I strip the ending (.shp) of the input shapefile and that I add _buffer to the output. Both Shape_Area and Shape_Length are created.
You can see input and output here:
-
Thank you, according to what I understood the problem was that I was not performing the geoprocessing inside a geodatabase. Now I set everything in it and it works.Patapunfate– Patapunfate2016年04月30日 20:16:43 +00:00Commented Apr 30, 2016 at 20:16