Here is the tool like it is it in ESRI. the input driver could be modified to your needs. Also no projection is enforced on the output currently.
def erase(baseFile, eraseFile, outFile): #this class performs the erase tool from ARCGIS// erasefile must be polygon
import os
import sys
import functions
try:
from osgeo import ogr
except ImportError:
import ogr
driver = ogr.GetDriverByName('Mapinfo File')
driver2 = ogr.GetDriverByName('ESRI Shapefile')
feat1 = driver.Open(baseFile, 0)
if feat1 is None:
print 'Could not open feat1.tab'
sys.exit(1)
feat2 = driver2.Open(eraseFile, 0)
if feat2 is None:
print 'Could not open feat2.tab'
sys.exit(1)
feat1Layer = feat1.GetLayer()
feat2Layer = feat2.GetLayer()
feature2 = feat2Layer.GetFeature(0)
geomfeat2 = feature2.GetGeometryRef()
feat1Layer.ResetReading()
# create a new data source and layer
fn = outFile
if os.path.exists(fn):
driver.DeleteDataSource(fn)
outDS = driver.CreateDataSource(fn)
if outDS is None:
print 'Could not create file'
sys.exit(1)
outLayer = outDS.CreateLayer('roads', geom_type=ogr.wkbLineString)
functions.copyFields(feat1Layer, outLayer)
# get the FeatureDefn for the output shapefile
featureDefn = outLayer.GetLayerDefn()
#loop through input layer
for inFeature in feat1Layer:
# create a new feature
outFeature = ogr.Feature(featureDefn)
# copy the attributes and set geometry
functions.copyAttributes(inFeature, outFeature)
#get Geometry of feature and apply the difference method on that feature
inGeom = inFeature.GetGeometryRef()
GeomDiff = inGeom.Difference(geomfeat2)
#Set geometry of the outfeature
outFeature.SetGeometry(GeomDiff)
# add the feature to the output layer
outLayer.CreateFeature(outFeature)