Vi arbejder i en GIS- og geodatabranche som de seneste 20 år har udviklet og forandret sig kolossalt: Teknologien giver os muligheder for at designe og udvikle GIS- og it-løsninger på et helt andet niveau end for 20 år siden. Open source- og open data-tankegangen har låst op for software og data som før var lukket land. Og ikke mindst er der kommet nye datasæt til, i en kvalitet og aktualitet og med et volumen, som vi tidligere kun kunne drømme om.

Alligevel er der noget som ikke har forandret sig: Filformatet “shapefile” er fortsat en de facto geospatial standard, på trods af dets irriterende og åbenbare mangler.

Gennem årene er der gjort mange forsøg på at erstatte shapefilen med andre spatiale dataformater. Når det ikke er lykkedes er det fordi “shape” på en række parametre stadig er bedre end alternativerne.

Det ændrer ikke ved, at shapefilen jo har alvorlige begrænsninger som vi ikke bør være tvunget til at leve med de næste 20 år: i maksimal filstørrelse, i håndtering af tegnsæt, i antal tegn i feltnavne, i størrelsen af attributværdier, i håndtering af værden ’NULL’ osv.

Derfor har min kollega, Björn Harrtell, udviklet et nyt filformat som hedder ”FlatGeobuf”. Det nye filformat har shapefilens gode egenskaber, men overvinder og eliminerer begrænsningerne, samtidig med, at det tilbyder flere nye features, som der er behov for i dag.

Eksempel på læsning af øverst: GeoPackage, midten: FlatGeobuf og nederst: shapefil.

FlatGeobuf understøttes nu af en række open-source platforme, herunder GDAL, GeoServer, Fiona, Geo Data Viewer og nu også QGIS. Formatet kan også bruges i OpenLayers og Leaflet.

GDAL’s adoption af FlatGeobuf er især vigtig fordi GDAL ligger i ”maven” af en vifte af geo-software, som derfor efterhånden, helt automatisk, også vil understøtte FlatGeobuf. Et eksempel er QGIS, hvor seneste version 3.16 ”Hannover”, der blev publiceret den 24. oktober, læser og skriver FlatGeobuf.

FlatGeobuf_QGIS

Men hvad er det, FlatGeobuf gør bedre?

Enkelhed: Ligesom shapefilen, håndterer FlatGeobuf én featuretype pr. fil, fx jordstykker, bygninger eller vejmidter. FlatGeobuf består imidlertid kun af én fil, hvor hver shapefile består af flere filer – som man skal huske at have med allesammen.

Hastighed: FlatGeobuf er top-tunet til streaming af geodata, dvs. fx hvor et stort datasæt bare skal udstilles og vises i en webklient. Hastigheden er bedre end shapefilen, både når data skal præsenteres i et GIS eller kortvindue og når filen skal skrives. FlatGeobuf performer også bedre end GeoPackage, som er en anden ”konkurrent”.

FlatGeobuf_speed

Sammenligning af læse-/skrivehastigheder foretaget på knap 1 mio. vejmidte-features fra Open Street Map Danmark.

MapService: Flatgeobuf kan bruges som et meget hurtigt alternativ til WFS (Web Feature Service), ved hjælp af en særlig extension til GeoServer. Det kan shapefilen ikke.

Ingen max størrelse: Til forskel fra shapefilen, som har en max størrelse omkring 2 Gb, er FlatGeobuf så godt som grænseløs - formentlig med en praktisk grænse omkring 1 Terrabyte. Det betyder at alle matriklens jordstykker, som ikke kan rummes i en shapefil, nemt og bekvent kan ligge i en FlatGeobuf-fil.

Intet max på feltnavne: I en shapefil er der max 10 tegn til et feltnavn, hvilket betyder at nogle feltnavne forkortes og bliver uforståelige. I FlatGeobuf er der (næsten) ingen begrænsninger på længden – et feltnavn kan derfor hedde ”datafordelerOpdateringstid” eller ”strandbeskyttelsesareal” – dvs. at man kan bruge samme attributnavn som i Datafordeleren.

Intet max på tekst: Shapefilen har et max på 254 tegn i et felt. Ligesom flere af de øvrige begrænsninger skyldes det at shapefilen bygger på et udtjent databasesystem, dBase.I FlatGeobuf kan attributværdier have (næsten) vilkårlig længde - teoretisk dog med et max omkring 2 Gb.

Konsistent encoding: FlatGeobuf anvender encoding UTF-8, hvilket betyder at der aldrig er problemer med oversættelse af internationale tegnsæt. Shapefilen er berygtet for at give problemet med ulæselige data på grund af problemer med encoding.

Håndtering af Null: Shapefiler kan ikke håndtere værdien ”Null”. Det betyder at en attribut som har værdien ”Null” oversættes til tallet ’nul’, til et blanktegn eller til det laveste negative værdi – alt efter attributtens datatype. FlatGeobuf håndterer Null-værdier korrekt, så de kan skelnes fra fx et nul (0) eller en tom tekststreng.

Nævnte jeg at FlatGeobuf naturligvis udvikles som open source? Det gør det – se bl.a. på GitHub, hvor du både finder en udtømmende og åben dokumentation og implementeringseksempler på flere sprog.

Og så er FlatGeobuf – ligesom shapefilen – aktiv på Twitter

FlatGeobuf

Af og til er de to geodata-kamphaner, FlatGeobuf og Shapefile i venskabelig og drillende infight som fx her.