Normally the OGR Shapefile driver treats a whole directory of shapefiles as a dataset, and a single shapefile within that directory as a layer. In this case the directory name should be used as the dataset name. However, it is also possible to use one of the files (.shp, .shx or .dbf) in a shapefile set as the dataset name, and then it will be treated as a dataset with one layer.
Note that when reading a Shapefile of type SHPT_ARC, the corresponding layer will be reported as of type wkbLineString, but depending on the number of parts of each geometry, the actual type of the geometry for each feature can be either OGRLineString or OGRMultiLineString. The same applies for SHPT_POLYGON shapefiles, reported as layers of type wkbPolygon, but depending on the number of parts of each geometry, the actual type can be either OGRPolygon or OGRMultiPolygon.
The new ESRI measure values are discarded if encountered.
If a .prj files in old Arc/Info style or new ESRI OGC WKT style is present, it will be read and used to associate a projection with features.
The read driver assumes that multipart polygons follow the specification, that is to say the vertices of outer rings should be oriented clockwise on the X/Y plane, and those of inner rings counterclockwise. If a Shapefile is broken w.r.t. that rule, it is possible to define the configuration option OGR_ORGANIZE_POLYGONS=DEFAULT to proceed to a full analysis based on topological relationships of the parts of the polygons so that the resulting polygons are correctly defined in the OGC Simple Feature convention.
The OGR Shapefile driver supports spatial indexing and a limited form of attribute indexing.
The spatial indexing uses the same .qix quadtree spatial index files that are used by UMN MapServer. It does not support the ESRI spatial index files (.sbn / .sbx). Spatial indexing can accelerate spatially filtered passes through large datasets to pick out a small area quite dramatically.
To create a spatial index, issue a SQL command of the form
CREATE SPATIAL INDEX ON tablename [DEPTH N]where optional DEPTH specifier can be used to control number of index tree levels generated. If DEPTH is omitted, tree depth is estimated on basis of number of features in a shapefile and its value ranges from 1 to 12.
To delete a spatial index issue a command of the form
DROP SPATIAL INDEX ON tablename
Otherwise, the MapServer shptree utility can be used:
shptree <shpfile> [<depth>] [<index_format>]
More information is available about this utility at the MapServer shptree page
Currently the OGR Shapefile driver only supports attribute indexes for looking up specific values in a unique key column. To create an attribute index for a column issue an SQL command of the form "CREATE INDEX ON tablename USING fieldname". To drop the attribute indexes issue a command of the form "DROP INDEX ON tablename". The attribute index will accelerate WHERE clause searches of the form "fieldname = value". The attribute index is actually stored as a mapinfo format index and is not compatible with any other shapefile applications.
As a special case attempts to create a new dataset with the extension .shp will result in a single file set being created instead of a directory.
ESRI shapefiles can only store one kind of geometry per layer (shapefile). On creation this is may be set based on the source file (if a uniform geometry type is known from the source driver), or it may be set directly by the user with the layer creation option SHPT (shown below). If not set the layer creation will fail. If geometries of incompatible types are written to the layer, the output will be terminated with an error.
Note that this can make it very difficult to translate a mixed geometry layer from another format into Shapefile format using ogr2ogr, since ogr2ogr has no support for separating out geometries from a source layer. See the FAQ for a solution.
Shapefile feature attributes are stored in an associated .dbf file, and so attributes suffer a number of limitations:
The OGR shapefile driver supports rewriting existing shapes in a shapefile
as well as deleting shapes. Deleted shapes are marked for deletion in
the .dbf file, and then ignored by OGR. To actually remove them permanently
(resulting in renumbering of FIDs) invoke the SQL 'REPACK
Attributes: The dbf format does not have any offsets in it, so it can be
arbitrarily large.
Size Issues
Geometry: The Shapefile format explicitly uses 32bit offsets and so cannot
go over 8GB (it actually uses 32bit offsets to 16bit words).
Hence, it is is not recommended to use a file size over 4GB.Dataset Creation Options
NoneLayer Creation Options
SHPT=type: Override the type of shapefile created. Can be one of
NULL for a simple .dbf file with no .shp file,
POINT, ARC, POLYGON or MULTIPOINT for 2D, or
POINTZ, ARCZ, POLYGONZ or MULTIPOINTZ for 3D. Shapefiles with measure
values are not supported, nor are MULTIPATCH files.Examples
A merge of two shapefiles 'file1.shp' and 'file2.shp' into a new file
'file_merged.shp' is performed like this:
% ogr2ogr file_merged.shp file1.shp
% ogr2ogr -update -append file_merged.shp file2.shp -nln file_merged
The second command is opening file_merged.shp in update mode, and trying to
find existing layers and append the features being copied.
The -nln option sets the name of the layer to be copied to.
See Also