Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

I have created a new shapefile and want to add shape attribute from another existing shapefile. It will be a recursive process with update of shape attributes of new shapefile (ofc) more than 2 times. Any help is appreciative. Following is what I am trying to make work:

Import arcpy
ofc = "C:/outFC.shp"
ifc = "C:/inFC.shp"
fields = arcpy.ListFields(ifc,"*","ALL")
for f in fields:
    shape = f.Shape
    query = '"Shape" = \'' + str(shape) + '\''
    cur = arcpy.UpdateCursor(ofc,query)

del f, fields

Diagram: I want to get FID (0) from first table and add it to second table of new shapefile and only need FID, Shape, and id fields in second table.

enter image description here enter image description here

share|improve this question
    
Have you investigated Join Field? –  PolyGeo Mar 11 '13 at 22:33
    
Join field runs ok but don't update attributes based on join table layer. Further, I need only one row of interest from existing shapefile to be written to new shapefile. –  Ibe Mar 11 '13 at 23:17
    
Can you clarify your requirements by adding a diagram to your Question, please? If you are only wanting a subset to be updated perhaps think about Select By Attribute and Calculate Field - but without a diagram I'm taking stabs in the dark. –  PolyGeo Mar 12 '13 at 0:01
    
It sounds like you need to do a select and then paste into your destination feature class, using python of course, but this is the essence of what you want to do. Since there are a couple of different ID fields listed, it would help if you specified the desired source ID field. For the selection of FID's, are there specific ones that you want to copy, or all of them, or based on an attribute selection? This information would be useful in structuring the first part of the script to feed the loading process into the target shapefile. –  Get Spatial Mar 12 '13 at 0:43
    
Right. I want to select first FID from the parent layer and paste it into target layer. Above parent table will change after each run of geoprocessing and I want to get first row FID every time and paste it to target layer. So the number of rows for FID, Shape, and id fields in target layer will keep growing until required. –  Ibe Mar 12 '13 at 0:53

1 Answer 1

up vote 1 down vote accepted

So, you want the FID from the first table to be in the Id column in the second table? And you are inserting a new row into the second table, not updating an existing row in that table?

import arcpy
ofc = "C:/outFC.shp"
ifc = "C:/inFC.shp"
searchcursor = arcpy.da.SearchCursor(ifc,("OID@","SHAPE@"))
firstrow = searchcursor.next()
insertcursor = arcpy.da.InsertCursor(ofc,("Id","SHAPE@"))
insertcursor.insertRow(firstrow)
del firstrow,insertcursor,searchcursor

OID@ is a token representing the ObjectID field (so you don't have to worry if it is FID, OBJECTID, or some other value). SHAPE@ is a token representing the shape field.

Order matters. That is why I made the search cursor ("OID@","SHAPE@") and the update cursor ("Id","SHAPE@"). That way, the fields map appropriately to each other.

share|improve this answer
    
Thankyou. It worked as required. –  Ibe Mar 13 '13 at 2:41

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.