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
>
>
>

Reply via email to