Is there a means in ogr2ogr
to "clip out" one shapefile from another?
I know ogr2ogr -clipsrc B.shp out.shp A.shp
will remove any part of A.shp
that is NOT in B.shp
.
Is there an ogr2ogr command to remove any part of A.shp
that intersects with B.shp
?
I have seen this called "reverse clip", "clip out", "erase" (ArcMap), or "difference".
Note: this question is about ogr2ogr
, the command line tool, NOT the OGR library, which requires programming.
Best Answer
Try this,
ogr2ogr -f "ESRI Shapefile" out.shp road.shp \ -dialect sqlite -sql "\ select ST_Diffrence(road.geometry, seg_buff.geometry) \ from road, 'seg_buff.shp'.seg_buff seg_buff \ "
Putting an extra
seg_buff
at the end makes the query work.This extra word is needed because
ogr2ogr
only automatically generates SQL table names for files passed to it directly. When specifying an additional file from within the SQL statement you must supply an arbitrary table name1 to refer to it elsewhere in the SQL statement. In this instance:1 The supplied table name doesn't have to match the filename (or its contained table). For example, the following works as well:
ogr2ogr -f "ESRI Shapefile" out.shp road.shp \ -dialect sqlite -sql "\ select ST_Diffrence(road.geometry, foo.geometry) \ from road, 'seg_buff.shp'.seg_buff foo \ "
In either example,
out.shp
will contain only the parts ofroad.shp
that are not contained withinseg_buff.shp
.