Shapefile
Filename extension |
.shp, .shx, .dbf |
---|---|
Developed by | Esri |
Type of format | GIS |
Standard(s) | Shapefile Technical Description |
The Esri shapefile, or simply a shapefile, is a popular geospatial vector data format for geographic information system software. It is developed and regulated by Esri as a (mostly) open specification for data interoperability among Esri and other GIS software products.[1] Shapefiles spatially describe vector features: points, lines, and polygons, representing, for example, water wells, rivers, and lakes. Each item usually has attributes that describe it, such as name or temperature.
Overview
A shapefile is a digital vector storage format for storing geometric location and associated attribute information. This format lacks the capacity to store topological information. The shapefile format was introduced with ArcView GIS version 2 in the early 1990s. It is now possible to read and write shapefiles using a variety of free and paid programs.
Shapefiles are simple because they store the primitive geometric data types of points, lines, and polygons. They are of limited use without any attributes to specify what they represent. Therefore, a table of records will store properties/attributes for each primitive shape in the shapefile. Shapes (points/lines/polygons) together with data attributes can create infinitely many representations about geographic data. Representation provides the ability for powerful and accurate computations.
While the term "shapefile" is quite common, a "shapefile" is actually a set of several files. Three individual files are mandatory to store the core data that comprise a shapefile: .shp, .shx, and .dbf. The actual shapefile relates specifically to .shp files but alone is incomplete for distribution, as the other supporting files are required.
There are further optional files which store primarily index data to improve performance. Each individual file should conform to the DOS 8.3 filename convention (8 character filename prefix, period, 3 character filename suffix such as "shp") in order to be compatible with past applications that handle shapefiles, though many recent software applications accept files with longer names. For this same reason, all files should be located in the same folder.
Mandatory files :
- .shp — shape format; the feature geometry itself
- .shx — shape index format; a positional index of the feature geometry to allow seeking forwards and backwards quickly
- .dbf — attribute format; columnar attributes for each shape, in dBase IV format
Optional files :
- .prj — projection format; the coordinate system and projection information, a plain text file describing the projection using well-known text format
- .sbn and .sbx — a spatial index of the features
- .fbn and .fbx — a spatial index of the features for shapefiles that are read-only
- .ain and .aih — an attribute index of the active fields in a table
- .ixs — a geocoding index for read-write shapefiles
- .mxs — a geocoding index for read-write shapefiles (ODB format)
- .atx — an attribute index for the .dbf file in the form of shapefile.columnname.atx (ArcGIS 8 and later)
- .shp.xml — geospatial metadata in XML format, such as ISO 19115 or other XML schema
- .cpg — used to specify the code page (only for .dbf) for identifying the character encoding to be used
In each of the .shp, .shx, and .dbf files, the shapes in each file correspond to each other in sequence (i.e., the first record in the .shp file corresponds to the first record in the .shx and .dbf files, etc.). The .shp and .shx files have various fields with different endianness, so an implementor of the file formats must be very careful to respect the endianness of each field and treat it properly.
Shapefiles deal with coordinates in terms of X and Y, although they are often storing longitude and latitude.
Shapefile shape format (.shp)
The main file (.shp) contains the primary geographic reference data in the shapefile. The file consists of a single fixed length header followed by one or more variable length records. Each of the variable length records includes a record header component and a record contents component. A detailed description of the file format is given in the Esri Shapefile Technical Description.[1] This format should not be confused with the AutoCAD shape font source format, which shares the .shp extension.
The main file header is fixed at 100 bytes in length and contains 17 fields; nine 4-byte (32-bit signed integer or int32) integer fields followed by eight 8-byte (double) signed floating point fields:
Bytes | Type | Endianness | Usage |
---|---|---|---|
0–3 | int32 | big | File code (always hex value 0x0000270a) |
4–23 | int32 | big | Unused; five uint32 |
24–27 | int32 | big | File length (in 16-bit words, including the header) |
28–31 | int32 | little | Version |
32–35 | int32 | little | Shape type (see reference below) |
36–67 | double | little | Minimum bounding rectangle (MBR) of all shapes contained within the shapefile; four doubles in the following order: min X, min Y, max X, max Y |
68–83 | double | little | Range of Z; two doubles in the following order: min Z, max Z |
84–99 | double | little | Range of M; two doubles in the following order: min M, max M |
The file then contains any number of variable-length records. Each record is prefixed with a record-header of 8 bytes:
Bytes | Type | Endianness | Usage |
---|---|---|---|
0–3 | int32 | big | Record number (1-based) |
4–7 | int32 | big | Record length (in 16-bit words) |
Following the record header is the actual record:
Bytes | Type | Endianness | Usage |
---|---|---|---|
0–3 | int32 | little | Shape type (see reference below) |
4– | – | – | Shape content |
The variable length record contents depend on the shape type. The following are the possible shape types:
Value | Shape type | Fields |
---|---|---|
0 | Null shape | None |
1 | Point | X, Y |
3 | Polyline | MBR, Number of parts, Number of points, Parts, Points |
5 | Polygon | MBR, Number of parts, Number of points, Parts, Points |
8 | MultiPoint | MBR, Number of points, Points |
11 | PointZ | X, Y, Z, M |
13 | PolylineZ | Mandatory: MBR, Number of parts, Number of points, Parts, Points, Z range, Z array Optional: M range, M array |
15 | PolygonZ | Mandatory: MBR, Number of parts, Number of points, Parts, Points, Z range, Z array Optional: M range, M array |
18 | MultiPointZ | Mandatory: MBR, Number of points, Points, Z range, Z array Optional: M range, M array |
21 | PointM | X, Y, M |
23 | PolylineM | Mandatory: MBR, Number of parts, Number of points, Parts, Points Optional: M range, M array |
25 | PolygonM | Mandatory: MBR, Number of parts, Number of points, Parts, Points Optional: M range, M array |
28 | MultiPointM | Mandatory: MBR, Number of points, Points Optional Fields: M range, M array |
31 | MultiPatch | Mandatory: MBR, Number of parts, Number of points, Parts, Part types, Points, Z range, Z array Optional: M range, M array |
The "Z" types are three-dimensional. The "M" types contain a user-defined measurement which coincides with the point being referenced. Three-dimensional shapefiles are rather uncommon, and the measurement functionality has been largely superseded by more robust databases used in conjunction with the shapefile data.
Shapefile shape index format (.shx)
The shapefile index contains the same 100-byte header as the .shp file, followed by any number of 8-byte fixed-length records which consist of the following two fields:
Bytes | Type | Endianness | Usage |
---|---|---|---|
0–3 | int32 | big | Record offset (in 16-bit words) |
4–7 | int32 | big | Record length (in 16-bit words) |
Using this index, it is possible to seek backwards in the shapefile by, first, seeking backwards in the shape index (which is possible because it uses fixed-length records), then reading the record offset, and using that offset to seek to the correct position in the .shp file. It is also possible to seek forwards an arbitrary number of records using the same method.
Shapefile attribute format (.dbf)
Attributes for each shape are stored in dBase format. An alternative format that can also be used is the xBase format, which has an open specification, and is used in open source shapefile libraries, such as the Shapefile C library.[2]
Shapefile projection format (.prj)
The information contained in the .prj file specifies the geographic coordinate system of the geometric data in the .shp file. Although optional, it is usually provided, as it is not necessarily possible to guess the coordinate system of any given features. The file is created in well-known text (WKT) format when generated with ArcGIS Desktop versions 9 and later. Previous ArcGIS versions and some third-party software generate it in another format, shown here:
Older projection file format example:
Projection UTM
Zunits NO
Units METERS
Spheroid CLARKE1866
Xshift 0.0000000000
Yshift -4000000.0000000000
Parameters
-108 0 0.000 /* longitude
36 0 0.000 /* latitude
New WKT format example:
GEOGCS["GCS_North_American_1927",DATUM["D_North_American_1927",SPHEROID["Clarke_1866",6378206.4,294.9786982],PRIMEM["Greenwich",0],UNIT["Degree",0.0174532925199433]]]
The information contained in the .prj file specifies the:
- Name of Geographic coordinate system or Map projection
- Datum (geodesy)
- Spheroid
- Prime meridian
- Units used
- Parameters necessary to define the map projection, for example:
- Latitude of origin
- Scale factor
- Central meridian
- False northing
- False easting
- Standard parallels
Shapefile spatial index format (.sbn)
This is a binary spatial index file, which is used only by Esri software. The format is not documented by Esri. However it has been reverse-engineered and documented [3] by the open source community. It is not currently implemented by other vendors. The .sbn file is not strictly necessary, since the .shp file contains all of the information necessary to successfully parse the spatial data.
Limitations
Topology and shapefiles
Shapefiles do not have the ability to store topological information. ArcInfo coverages and personal/file/enterprise geodatabases do have the ability to store feature topology.
Spatial representation
The edges of a polyline or polygon are composed of points. The spacing of the points implicitly determines the scale at which the feature is useful visually. Exceeding that scale results in jagged representation. Additional points would be required to achieve smooth shapes at greater scales. For features better represented by smooth curves, the polygon representation requires much more data storage than, for example, splines, which can capture smoothly varying shapes efficiently. None of the shapefile types supports splines.
Data storage
The size of both .shp and .dbf component files cannot exceed 2 GB (or 231 bits) — around 70 million point features at best.[4] The maximum number of feature for other geometry types varies depending on the number of vertices used.
The attribute database format for the .dbf component file is based on an older dBase standard. This database format inherently has a number of limitations:[4]
- While the current dBase standard, and GDAL/OGR (the main open source software library for reading and writing shapefiles) support null values, ESRI software represents these values as zeros—a very serious issue for analyzing quantitative data, as it may skew representation and statistics if null quantities are represented as zero
- Poor support for Unicode field names or field storage
- Maximum length of field names is 10 characters
- Maximum number of fields is 255
- Supported field types are: floating point (13 character storage), integer (4 or 9 character storage), date (no time storage; 8 character storage), and text (maximum 254 character storage)
- Floating point numbers may contain rounding errors since they are stored as text
Mixing shape types
Because the shape type precedes each record, a shape file is physically capable of storing a mixture of different shape types. However, the specification states, "All the non-Null shapes in a shapefile are required to be of the same shape type." Therefore this ability to mix shape types must be limited to interspersing null shapes with the single shape type declared in the file's header. A shape file must not contain both polyline and polygon data, for example, and the descriptions for a well (point), a river (polyline), and a lake (polygon) would be stored in three separate files.
See also
- Geographic information system
- Open Geospatial Consortium
- Open Source Geospatial Foundation (OSGeo)
- List of geographic information systems software
- Comparison of geographic information systems software
References
- ↑ 1.0 1.1 Esri (July 1998). Esri Shapefile technical description. Retrieved 2007-07-04.
- ↑ "Shapefile C Library V1.2".
- ↑ http://pyshp.googlecode.com/files/sbn_format.pdf
- ↑ 4.0 4.1 "ArcGIS Desktop 9.3 Help – Geoprocessing considerations for shapefile output". Esri. April 24, 2009.
External links
- Shapefile file extensions – Esri Webhelp docs for ArcGIS 10.0 (2010)
- Esri Shapefile Technical Description – Esri White Paper, July 1998
- Esri – Understanding Topology and Shapefiles
- shapelib.maptools.org – Free c library for reading/writing shapefiles
- ShpDump – online utility that lets you see shapefile binary values
- Python Shapefile Library – Open Source (MIT License) Python library for reading/writing shapefiles