you can have it easier:
this should do:
#for 9.1, the instantiation of the gp object is different (win32com.dispatch
...blabla)
gp=arcgisscripting.create()
#change this to your dir or use sys.argv[1] to set it from the commandline
gp.workspace = "d:/MA_resevior"
fcs=gp.listfeatureclasses()
fc=fcs.next()
while fc:
gp.AddField_management(inputFC, "new_area", "DOUBLE")
gp.CalculateField_management(inputFC, "new_area",
"float(!SHAPE.AREA!)","PYTHON")
fc=fcs.next()
On Tue, May 18, 2010 at 11:40 AM, Félix <[email protected]> wrote:
> For 9.1 version
>
> # Para v9.1
> area = 0.0
> rows = gp.UpdateCursor(f5 + ".shp")
> row = rows.Next() # get the first one
> while row :
> area = float(row.Shape.Area)
> row.m2 = area
> row.Ha = area / 10000
> rows.UpdateRow(row)
> row = rows.Next()
> del rows,row
>
>
> 2010/5/18 Jeff Konnen <[email protected]>:
> > Hi
> >
> > Sean is right about the gp-creation overhead.
> >
> > arcgisscripting provides lists that you should use (i'll use the syntax
> for
> > arcgis 9.3, if you have an earlier version, the syntax is a bit
> different,
> > as native python lists were not supported and you'd have to use iterators
> > instead)
> >
> > import arcgisscripting,sys
> > #this only work in arcgis 9.3
> > gp=arcgisscripting.create(9.3)
> >
> > # change this to your dir or use sys.argv[1] to set it from the
> commandline
> > gp.workspace = "d:/MA_resevior"
> >
> > for inputFC in gp.listfeatureclasses():
> > gp.AddField_management(inputFC, "new_area", "DOUBLE")
> > gp.CalculateField_management(inputFC, "new_area",
> "float(!SHAPE.AREA!)",
> > "PYTHON")
> >
> > hope this helps
> > jeff
> >
> > On Tue, May 18, 2010 at 10:28 AM, Sean Gillies <[email protected]>
> > wrote:
> >> On Tue, May 18, 2010 at 7:58 AM, anita kean <[email protected]> wrote:
> >>> On Mon, May 17, 2010 at 09:29:51PM -0700, Jen wrote:
> >>>> Thank you for the comments, that's very helpful.
> >>>>
> >>>> I have 56 shapefiles, and I need to calculate area for each one.
> >>>> Therefore, could you explain the first method clearer: "to use the
> >>>> script as is, run it from the command line with the full path to the
> >>>> shapefile you want to calculate the area, e.g. from the command
> >>>> line:" ?
> >>>>
> >>>> I'd appreciate any help you might give me.
> >>>
> >>> If you've got 56 shapefiles (say they're called shape1,shp, ...
> >>> shape56.shp),
> >>> then you are either going to have to call the program
> >>> 56 times with 56 different shapefile names:
> >>>
> >>> python LU_PL_Exportcoef.py C:\path\to\shapefile\folder\shape1.shp
> >>> python LU_PL_Exportcoef.py C:\path\to\shapefile\folder\shape2.shp
> >>> python LU_PL_Exportcoef.py C:\path\to\shapefile\folder\shape3.shp
> >>> python LU_PL_Exportcoef.py C:\path\to\shapefile\folder\shape4.shp
> >>> python LU_PL_Exportcoef.py C:\path\to\shapefile\folder\shape5.shp
> >>> ...
> >>> python LU_PL_Exportcoef.py C:\path\to\shapefile\f older\shape56.shp
> >>>
> >>> (that looks like too much work!)
> >>>
> >>> or you could get python to do the work for you:
> >>>
> >>> If it were me, to make it easy for myself, I'd
> >>> put all the shapefiles in one folder,
> >>> copy the python program to the same folder,
> >>> and in that folder, write a little python file like :
> >>>
> >>> ============================
> >>> import os
> >>> import subprocess
> >>>
> >>> rootdir = os.getcwd()
> >>> files = os.listdir(rootdir)
> >>> for f in files:
> >>> if os.path.splitext(f)[1]=='.shp':
> >>> print 'shapefile', f
> >>> shapefile_area =
> >>> subprocess.call(['python','LU_PL_Exportcoef.py',f])
> >>> print 'area of %s is %s' % (f, shapefile_area)
> >>> ============================
> >>>
> >>> Then if you call this file get_area.py,
> >>> all you have to do is type, in that same folder,
> >>>
> >>> python get_area.py
> >>>
> >>> and you should see the areas associated with all 56 shapefiles.
> >>> - assuming your LU_... program prints out what you need.
> >>>
> >>> Hope that helps.
> >>> --
> >>> Anita
> >>>
> >>
> >> This is a good start, but I don't think subprocess is the way to go
> >> here. If your geoprocessing program was a C program or a Perl script,
> >> you would well make a system call to it. If it's Python code, and
> >> arcgisscripting in particular, it's better to stay in one Python
> >> process and call a Python function instead. This approach avoids the
> >> overhead of starting a new Python interpreter (not inconsiderable) or
> >> ArcGIS geoprocesser (very considerable overhead, I am told) for each
> >> shapefile.
> >>
> >> Cheers,
> >>
> >> --
> >> Sean
> >>
> >
> >
> >
> > --
> > Jeff Konnen
> >
> >
> >
>
--
Jeff Konnen