# Shapefile

De ESRI Shapefile is een veelgebruikt uitwisselingsformaat voor geografische informatie. De door ESRI gepubliceerde specificaties van juli 1998 vermelden drie componenten waaruit een shapefile bestaat:
* een .shp-bestand met de ligging van objecten;
* een .dbf-bestand met attributen van die objecten in XBase-formaat;
* een .shx-bestand dat voor elk object de index in het .shp-bestand bevat.
De drie bestanden hebben behalve de laatste drie letters de rest van de naam gemeenschappelijk.
Shapefiles zijn geschikt voor geometrieën die bestaan uit stuksgewijs rechte lijnen of polygonen van stuksgewijs rechte lijnen. Of punten.

## Codering

Shapefiles zijn binaire bestanden, dat betekent dat ze niet met een standaard tekstverwerkingsprogramma te lezen zijn. Het .dbf-bestand kan wel geopend worden met werkbladprogramma's zoals LibreOffice Calc en Microsoft Excel.
Het .shp-bestand heeft een kop van 100 bytes met daarin de grootte van de omhullende rechthoek en de lengte van het bestand. Curieus is dat in de bytevolgorde de eerste 28 bytes big-endian is en de rest little-endian. Na de kop volgen de records, die elk bestaan uit een kop met daarin het volgnummer en de lengte van het record. Deze kop is opnieuw big-endian gecodeerd, de feitelijke inhoud van het record little-endian.
Elk record in het .shp-bestand bevat een type-indicator die aangeeft of de geometrie die volgt een punt, een stuksgewijs rechte lijn, een polygoon of nog iets anders is. Dat maakt het in theorie mogelijk elk object een ander type geometrie te geven, maar de specificatie van 1998 maakt duidelijk dat dat niet de bedoeling is. In elk .shp-bestand kunnen maar twee geometrietypen voorkomen: het type dat ook in de kop van het bestand wordt genoemd en daarnaast het zogenaamde null-type, een geometrie zonder inhoud, die gebruikt wordt waar er wel attribuutgegevens zijn (in het .dbf-bestand) maar de bijbehorende geometrie ontbreekt.

## Beperkingen

Shapefiles hebben belangrijke beperkingen voor wat betreft de beschikbare geometrietypen: krommen kunnen er niet in worden weergegeven en ook voor teksten is geen voorziening. Deze beperkingen kunnen min of meer worden omzeild door krommen te verdelen in een groot aantal rechten die de kromme benaderen, respectievelijk teksten te vervangen door lijnen waarmee de letters in feite worden getekend. Bij het geometrietype 'punt' kan geen hoek worden opgegeven, zodat de oriëntatie van symbolen e.d. op een andere manier moeten worden overgebracht. Ook lijnstijlen en kleuren kunnen niet als zodanig worden opgeslagen.
In de praktijk maken programma's die shapefiles lezen gebruik van gegevens in het .dbf-bestand om de beperkingen te omzeilen. De operator moet dan opgeven welk van de attributen een aanvullend gegeven bevat, bijvoorbeeld het label bij een punt en te gebruiken hoeken voor oriëntatie van labels en symbolen.

## Aanvullingen

Shapefiles gaan soms vergezeld van extra bestanden, die de shapefiles aanvullen met metagegevens:
* .prj: een platte-tekstbestand, met daarin gegevens over de gebruikte projectie, dat nodig is om de betekenis van de coördinaten te weten te komen;
* .shp.xml: algemene gegevens over de shapefile, in xml-formaat;
* .sbn / .sbx: ruimtelijke indexen.
Een .prj-bestand kan bijvoorbeeld de volgende inhoud hebben als de coördinaten gegeven zijn als geografische lengte en breedte (voor de overzichtelijkheid zijn regeleinden en inspringingen toegevoegd):