Wat is een shapefile en welke bestanden horen erbij?
Een shapefile is een vectorformaat voor GIS dat Esri begin jaren negentig heeft ontwikkeld. Het is een groep bestanden met één naam: .shp bevat de geometrie, .shx een index en .dbf de attributen. Een .prj-bestand geeft het coördinatenstelsel en een .cpg de tekstcodering. FileReshape kan een shapefile in uw browser bekijken of omzetten naar GeoJSON, KML of GeoPackage, zonder hem te uploaden.
Waar de shapefile vandaan komt
Esri introduceerde de shapefile begin jaren negentig met zijn desktopprogramma ArcView, als een eenvoudige manier om punten, lijnen en polygonen samen met een attributentabel op te slaan. In 1998 publiceerde Esri de ESRI Shapefile Technical Description, een whitepaper die de opbouw van de geometrie- en indexbestanden beschrijft. Omdat de beschrijving openbaar was en het formaat eenvoudig, kon andere software het zonder licentie lezen en schrijven, en werd de shapefile het gangbare uitwisselingsformaat van desktop-GIS.
Dat is nog steeds de grootste kracht. Opendataportalen van overheden, landmeters, planbureaus en nutsbedrijven publiceren shapefiles, omdat bijna elk GIS-programma ze kan lezen, van QGIS en ArcGIS Pro tot GDAL, laadprogramma's voor PostGIS en veel CAD-programma's. Het formaat laat ook zijn leeftijd zien, en de grenzen die hieronder worden beschreven, zijn de reden dat er nieuwere formaten bestaan.
De bestanden waaruit een shapefile bestaat
Een shapefile is een set bestanden met dezelfde basisnaam, zoals parcels.shp, parcels.shx en parcels.dbf. Drie ervan zijn verplicht. Het .shp-bestand slaat de geometrie van elk object op als een lijst coördinaten. Het .shx-bestand is een index met de positie van elk record in de .shp, zodat programma's direct naar object nummer 5.000 kunnen springen in plaats van alles daarvoor te lezen. Het .dbf-bestand is de attributentabel in het dBASE-formaat, met één rij per object in dezelfde volgorde als de vormen. De koppeling tussen een vorm en haar rij is niets meer dan die volgorde.
De andere bestanden zijn optioneel. Het .prj-bestand bevat het coördinatenstelsel als één regel well-known text (WKT), in het dialect dat Esri gebruikt. Het .cpg-bestand is een piepklein tekstbestand dat de tekencodering van de .dbf noemt, zoals UTF-8 of 1252. De .sbn- en .sbx-bestanden zijn een ruimtelijke index die Esri-software gebruikt, en .qix is een andere ruimtelijke index die door GDAL en MapServer wordt geschreven; beide versnellen alleen het tekenen en zoeken in grote bestanden. Het .shp.xml-bestand bevat metadata zoals een beschrijving, de auteur en de datum. U kunt ook .atx-bestanden tegenkomen voor attribuutindexen. Ontbreekt een optioneel bestand, dan kunnen programma's de gegevens nog steeds lezen, maar zonder .prj is de ligging giswerk, en zonder .cpg kunnen speciale tekens misgaan.
De basisnamen moeten precies overeenkomen, inclusief hoofdletters en kleine letters op systemen die daar onderscheid in maken. Als u alleen roads.shp hernoemt naar streets.shp, is de set kapot. Hernoem, kopieer en verstuur alle onderdelen samen; de eenvoudigste manier om ze bij elkaar te houden is een .zip van de hele set.
Eén geometrietype per shapefile
Elke shapefile legt in zijn kop één vormtype vast, en elk object moet van dat type of leeg zijn. De belangrijkste typen zijn Point, MultiPoint, PolyLine (lijnen) en Polygon, elk in een gewone 2D-versie, een versie met Z-waarden voor de hoogte en een versie met M-waarden voor maten, zoals de afstand langs een route. Een zelden gebruikt type, MultiPatch, beschrijft 3D-oppervlakken. Een bestand kan geen punten en polygonen door elkaar bevatten, dus een dataset met gebouwen en hun ingangen moet als twee shapefiles worden opgeslagen.
Polygonen worden opgeslagen als ringen. Volgens de gepubliceerde beschrijving loopt de buitengrens met de klok mee en lopen gaten tegen de klok in, en een polygoon met meerdere losse delen, zoals een land met eilanden, is één object met meerdere ringen. Het formaat slaat geen topologie op: twee aangrenzende percelen slaan hun gemeenschappelijke grens elk apart op, en niets in het bestand garandeert dat de lijnen overeenkomen.
Grenzen van de .dbf-attributentabel
Veel eigenaardigheden van de shapefile komen van het dBASE-tabelformaat, dat uit de jaren tachtig stamt. Veldnamen mogen maximaal 10 tekens hebben, dus Population_2020 moet iets als POP_2020 worden, en sommige programma's zetten ze ook in hoofdletters. Tekstvelden bevatten maximaal 254 tekens. Ook het aantal velden is beperkt; meestal wordt 255 genoemd.
Er zijn maar weinig gegevenstypen. Tekst wordt opgeslagen als tekenvelden met een vaste breedte, getallen als numerieke of drijvendekommavelden met een vaste breedte en een vast aantal decimalen, waar en onwaar als logische velden, en datums als datumvelden in de vorm jaar, maand, dag. Er is geen tijdstip en geen tijdzone, dus een tijdstempel moet als tekst worden opgeslagen of over velden worden verdeeld. Er is ook geen echte null-waarde: een leeg getal wordt meestal als spaties of als nul geschreven, afhankelijk van het programma, en sommige lezers tonen dan 0 waar de waarde eigenlijk onbekend was. Er zijn geen lijsten, geneste waarden of binaire velden.
Grenzen voor de bestandsgrootte
De koppen van de .shp- en .shx-bestanden slaan posities en lengtes op als 32-bitsgetallen, wat leidt tot de gangbare regel dat elk onderdeel van een shapefile, met name de .shp en de .dbf, onder de 2 GB moet blijven. Sommige programma's, waaronder GDAL, kunnen bestanden tot ongeveer 4 GB lezen en schrijven als u dat aangeeft, maar andere software kan ze weigeren. Een grotere dataset moet over meerdere shapefiles worden verdeeld of in een ander formaat worden opgeslagen. In de praktijk bereikt de .dbf vaak als eerste de grens, omdat elk tekstveld in elke rij zijn volledige breedte inneemt, ook als de meeste waarden kort zijn.
Tekstcodering en het .cpg-bestand
Het .dbf-formaat is ouder dan Unicode. Tekst wordt als bytes opgeslagen, en de kop heeft één byte, vaak de language driver ID genoemd, die een codetabel kan aanwijzen, zoals Windows-1252 of een DOS-codetabel. Veel programma's laten die leeg of vullen hem verkeerd in. Het .cpg-bestand is later toegevoegd om de codering duidelijk te vermelden, en moderne software schrijft UTF-8 met een .cpg die dat zegt.
Als noch de .cpg noch de byte in de kop klopt, moet een programma raden, en namen als Malmö, Ærø of São Paulo veranderen in reeksen vreemde tekens. Ziet u dat, dan zijn de gegevens meestal intact. Geef uw GIS-programma bij het openen van de laag aan welke codering het moet gebruiken, bijvoorbeeld in de eigenschappen van de laag in QGIS, of voeg een .cpg-bestand met de juiste naam toe. Schrijft u zelf shapefiles, kies dan UTF-8 en houd de .cpg bij de andere onderdelen.
Coördinatenstelsels en het .prj-bestand
Het .shp-bestand slaat kale getallen op zonder te zeggen wat ze betekenen. Het kunnen lengte- en breedtegraden in graden zijn, meters in een UTM-zone of feet in een Amerikaans State Plane-stelsel. Alleen het .prj-bestand vertelt programma's welk coördinaatreferentiesysteem van toepassing is, en doet dat als WKT-tekst in plaats van als EPSG-code. De meeste software kan gangbare definities aan een EPSG-code koppelen, maar ongebruikelijke of met de hand bewerkte .prj-bestanden leiden soms tot een iets andere interpretatie.
Zonder .prj kan een programma van WGS84 uitgaan of het u vragen. Waarden tussen -180 en 180 en tussen -90 en 90 zijn waarschijnlijk graden; grote waarden van honderdduizenden of miljoenen zijn geprojecteerde meters of feet. Een coördinatenstelsel toekennen geeft de gegevens alleen een label. Herprojecteren rekent de coördinaten echt om, en die twee moet u niet verwarren.
Alternatieven voor de shapefile
GeoPackage is een open standaard van het Open Geospatial Consortium, gebouwd op een SQLite-database in één .gpkg-bestand. Het kan meerdere lagen, lange veldnamen, echte datums en tijden, null-waarden en grote datasets bevatten, en het is het standaardformaat van QGIS. Het is een goede keuze om een heel project over te dragen. GeoJSON is een JSON-formaat in platte tekst, gestandaardiseerd als RFC 7946. Het is makkelijk te lezen in een teksteditor en het vanzelfsprekende formaat voor webkaarten en API's, maar de standaard verwacht WGS84-coördinaten en de bestanden worden groot. FlatGeobuf is een nieuwer binair formaat in één bestand met een ingebouwde ruimtelijke index, ontworpen om snel te lezen en via het web te streamen; de ondersteuning groeit, maar is nog niet zo universeel als bij de andere.
Geen van deze formaten is voor elk geval geschikt. De shapefile blijft de veiligste keuze als u niet weet welke software de ontvanger gebruikt, of als een systeem of een opdrachtgever er uitdrukkelijk om vraagt. Zitten de grenzen ervan in de weg, zoals afgekapte veldnamen, verloren tijdstempels of bestanden die tegen de 2 GB aan zitten, dan is omzetten naar GeoPackage meestal de minst pijnlijke stap.
Met shapefiles werken in uw browser met FileReshape
De shapefiletools van FileReshape lezen de onderdelen met GDAL dat voor het web is gecompileerd, dus de bestanden worden op uw eigen apparaat verwerkt en niet geüpload. Shapefile bekijken toont de objecten op een kaart en de attributentabel, met het type van elk veld. De converters Shapefile naar GeoJSON converteren, Shapefile naar KML converteren en Shapefile naar GeoPackage converteren schrijven dezelfde gegevens in die formaten; GeoJSON en KML worden in WGS84 geschreven, en de GeoPackage behoudt het coördinatenstelsel. KML naar shapefile converteren werkt de andere kant op en schrijft een .zip met .shp-, .shx-, .dbf-, .prj- en .cpg-bestanden, één shapefile per geometrietype. U kunt een .zip naar het vak slepen of de onderdelen tegelijk selecteren, en namen die al tot 10 tekens zijn ingekort, kan geen enkele conversie herstellen.
Veelgestelde vragen
Welke bestanden van een shapefile zijn verplicht?
De .shp-, .shx- en .dbf-bestanden zijn verplicht. De .prj- en .cpg-bestanden zijn optioneel maar aanbevolen, en .sbn, .sbx, .qix en .shp.xml zijn indexen en metadata die u kunt weglaten.
Kan een shapefile punten, lijnen en polygonen samen bevatten?
Nee. Elke shapefile heeft één vormtype in zijn kop. Gemengde gegevens moeten worden verdeeld over één shapefile per type, of worden opgeslagen in een formaat zoals GeoPackage of GeoJSON.
Waarom toont mijn shapefile vreemde tekens in plaats van letters met accenten?
Het programma heeft de .dbf met de verkeerde codering gelezen. Kies de juiste codering bij het openen van de laag, of voeg een .cpg-bestand toe met de juiste naam, zoals UTF-8 of 1252.
Kan een shapefile datum en tijd opslaan?
Een datum wel, maar geen tijdstip. Tijdstempels worden meestal als tekstvelden bewaard, of de gegevens worden overgezet naar GeoPackage, dat een echt type voor datum en tijd heeft.
Is de shapefile een open formaat?
De geometrie- en indexbestanden zijn beschreven in een technische beschrijving die Esri in 1998 heeft gepubliceerd, en de attributentabel gebruikt het bekende dBASE-formaat, dus veel gratis en commerciële programma's lezen en schrijven shapefiles.