Digital Information Exchange STandard har utvecklats under lång tid och från början var det ett försök att samordna geodatautbyte mellan NATO länder. DIGEST standarden har sedan dess fått en mycket bredare spridning.
En del i DIGEST är FACC, vilket står för Feature Attribute Coding Catalogue, vilket är en kodningsstandard för geografiska objekt, och som dyker upp i många sammanhang när man exempelvis hanterar geodata i humanitära sammanhang.
Standarden kan man läsa mer om och ladda hem via https://www.dgiwg.org/digest/Overview2.htm. Jag är mest intresserad av bilaga 4 vilket är FACC katalogen (direktlänk).
Detta är inte en ny standard! Senaste uppdateringen kom 2000. Men det betyder inte att den är ”gammal”, snarare ”mogen”.
Standarden beskriver både objektsklasser och attribut, där det första tecknet delar in objekten i kategorier.
Det andra tecknet ger ytterligare en kategoriindelning, vilket sedan följs av en sifferkombination för de slutgiltiga detaljerna.
Attribut kan också beskrivas med FACC där ”allt” beskrivs med tre fält.
Attributkoden anger vad det är för typ av värde och värdeformatet anger… attributets värdeformat (exempelvis text eller integer). Därefter anges värdet i värdefältet.
Vi tar ett exempel. En enkelt byggnad:
FACC koden är således AL015. För att ge mer information om byggnaden så kan man exempelvis använda en attributkod.
Attributkoden är därmed BFC och då det är ett heltal så är typen I och värdet anger sedan vad byggnaden har för funktion. Just för byggnader så finns det flera hundra olika typer.
AL015 BFC I 6 – Byggnad, sjukhus.
Varför skriver man inte klasser och attribut i klartext?
Fördelen med att använda koder är att det är ”interoperabelt”. Oavsett vilket språk du normalt talar så betyder koderna samma sak. Du kan därför ha en FACC tabell anpassad för ditt eget språk om du tycker att det underlättar.
QGIS
Med QGIS så skulle man kunna skapa en funktion som tar ett Python Dictionary och översätter FACC koder till faktisk betydelse, och om man vill så översätter man denna betydelse till svenska. FACC funktionen kan man sedan använda på alla FACC attribut oavsett lager eller typ av geometri.
function facc(code): facc_dict = {"AL005":"Djurskyddsområde", "AL012":"Arkeologisk Plats", "AL015":"Byggnad"} return facc_dict[code]
Oavsett vilken typ av objekt du har, så länge det finns ett FACC attribut så kan du ta reda på vad objektet är för typ genom att anropa funktionen. En förutsättning är att du har hela FACC tabellen som ett dictionary.
På DIGEST nedladdningssida så finns det en databas med FACC… i Microsoft Access format. Var det inte interoperabilitet det var tal om?
Det kan gå att komma runt i Windows med någon form av mdb-läsare, men jag föredrar att konvertera tabellerna till csv.
Jag kan lista schemat för databasen med:
mdb-schema FACC_2.1.mdb
Sedan kan man konvertera tabeller direkt till csv med:
mdb-export FACC_2.1.mdb "tabell namn" > tabell.csv
Den tabell jag är mest intresserad av är ”Feature Description”, som innehåller ”FAC_Code”, ”FAC_Name” och ”FAC_Description”.
När jag använder pythonkonsolen i QGIS för att prova konceptet så verkar det fungera direkt från den skapade csv-filen.
Sedan är det ”bara” att baka in detta i en funktion. Som vanligt med Python så gäller det att vara noga med indragen, vilket var ett av mina problem när jag skapade funktionen.
Funktionen fungerar bara lokalt för mig, då sökvägen till csv-filen är lokal. Men detta bör vara den enda rad du behöver ändra för att det skall fungera.
Nu kan jag använda facc(”CODE”) för att klassa alla lager med objekten i klartext. Om attributfältet heter något annat än CODE så får man självklart byta ut det.
Jag har provat att spara csv-filen på samma sökväg som skriptfilen, vilket fungerar fint , men jag har inte lyckats få det att fungerar i QGIS expressions, får nog titta vidare på det.
För mina tester har jag använt exempeldata i GeoPackage format från https://portal.opengeospatial.org/files/?artifact_id=74863, vilket är data från Haiti.
Vill du testa mitt skript med csv-fil så kan du hämta den via GitHub och packa upp i katalogen .qgis2/python/expressions/. Om du använder Resource Sharing plug-in så kan du använda mitt repository för detta och få allt på köpet. För att det skall fungera för tillfället så måste sökvägen till csv-filen justeras i skriptet.