Skip to main content
4 of 4
added 1225 characters in body
SharonB
  • 725
  • 1
  • 6
  • 19

Erase features from feature classes based on record ID?

This is the challenge: I have two feature classes, which have the same number of polygon features, that when overlaid form concentric "rings." I need to erase the inner circle from the outer circle for each feature, matching them by their record ID. So, if both feature classes 1 and 2 have records A, B, and C, I want to erase the polygon of Record A in FC2 from Record A in FC1, RecordB in FC2 from Record B in FC1, etc.

ArcGIS' Erase function will only take the entirety of the feature class and erase from them - I can't find a way to link up records by their feature ID. I'm working with Arc10.1 with all licenses.

LATEST EDITS: I've replaced the useless code from before with this revised snippet below, but now I need a bit of guidance - I can't find where in here that I am over-writing the output. It works! However the script leaves me with a single donut feature output. Can you help me spot my error?

#Test script: select record from a VTR and erase it from another, matching selected record

import os
import sys
import arcpy
from arcpy import env
import time

#Set overwrote output
arcpy.env.overwriteOutput = True
print arcpy.env.overwriteOutput

workspace = "C:\\BOEM\\pt_buff3\\"


fileList = []
buffersd4 = []
buffersd3 = []
recordID3 = []
recordID4 = []

buffs = workspace+"buffer.gdb"
directorypath = buffs

#create new results_feature class

for dirpath, dirnames, buffs in arcpy.da.Walk(directorypath,
                                              datatype="FeatureClass",
                                              type="Polygon"):
for buff in buffs:
    
    if buff.endswith(str("d4")):
       # buffersd4.append(buff)
        #print buffersd4
       print buff
       buffbits4=buff.split('_')
       print buffbits4[2]
       buffersd4.append(buff)
       field = ['APR16_ID']
       APR16_ID = [row[0] for row in arcpy.da.SearchCursor(workspace+"buffer.gdb\\"+buff,(field))]
       print APR16_ID
       for ID4 in APR16_ID:
           ID4split = ID4.split('_')
           selectID4 = ID4split[1]
           #print selectID4

    if buff.endswith(str("d3")):
       # buffersd4.append(buff)
        #print buffersd4
       print buff
       buffbits3=buff.split('_')
       print buffbits3[2]
       buffersd3.append(buff)
       field = ['APR16_ID']
       APR16_ID = [row[0] for row in arcpy.da.SearchCursor(workspace+"buffer.gdb\\"+buff,(field))]
       print APR16_ID
       for ID3 in APR16_ID:
           ID3split = ID3.split('_')
           selectID3 = ID3split[1]
          # print selectID3
print selectID4
print selectID3
if selectID4 == selectID3:
    print "yay they match!"
    
    #make feature layer of feature d4 for FCs in buffersd4:
    for fc in buffersd4:
        in_feat=workspace+"buffer.gdb\\"+fc
        out_layer4= fc+"_lyr"
        arcpy.MakeFeatureLayer_management(in_feat,out_layer4)
        print arcpy.GetMessages()
    #select record in fc_layer
        #where_clause4=""" "APR16_ID" = """ + str(selectID4)
        where_clause4=""" "APR16_ID" = """ + "'"+ID4+"'"
        arcpy.SelectLayerByAttribute_management(out_layer4,"NEW_SELECTION",where_clause4)
        print arcpy.GetMessages()
      
    #make feature layer of feature d3
    for fc in buffersd3:
        in_feat=workspace+"buffer.gdb\\"+fc
        out_layer3= fc+"_lyr"
        arcpy.MakeFeatureLayer_management(in_feat,out_layer3)
        print arcpy.GetMessages()
    #select record in fc_layer
        #where_clause3=""" "APR16_ID" = """ + str(selectID3)
        where_clause3=""" "APR16_ID" = """ + "'"+ID3+"'"
        arcpy.SelectLayerByAttribute_management(out_layer3,"NEW_SELECTION",where_clause3)
        print arcpy.GetMessages()
    
 #execute Erase function(erase d3 from d4)
        out_feat = "C:\\BOEM\\Donuts\\donuts_output.gdb\\"+"donut_d4_"+ID4
        arcpy.Erase_analysis(out_layer4, out_layer3,out_feat,"")
        print arcpy.GetMessages()
        
    print "done rolling through records in this feature class."

    print "done going through the buffers in the fGDB"
    

    #celebrate
  
        
        
        
           
            `

I hope this handy diagram will help illustrate what the heck I'm trying to do...

SharonB
  • 725
  • 1
  • 6
  • 19