Relationer – En dokusåpa?

Definitivt inte en dokusåpa, det här handlar om relationer mellan data och mer specifikt mellan geometrier och andra tabelldata.

Under QGIS användarträff så pekade man på en nyhet som jag knappt märkt när jag jobbade med boken om QGIS 2.2 på Svenska.

Det ligger dessutom lite utanför omfattningen av boken, men ändå väldigt användbart.

Vad det handlar om är helt enkelt geografiska objekt av olika typ, där man vill kunna lagra information kopplat till dessa, men där det inte räcker att använda vanliga attribut.

Ett exempel från ”mkuhn” fungerar bra för att belysa vad det handlar om:

Du har ett avloppsnät i form av linjer i QGIS, där varje segment representerar en del av systemet och dessa har attribut som diameter, material och ett unikt id för att hålla reda på dem. Men förr eller senare så behöver man underhålla dessa rör och då vill man gärna ha uppföljning på det underhåll som görs för att se om det är något segment som kräver extra mycket underhåll.

Det går att göra detta i ett attribut, men det blir ofta i form av en enda lång textsträng, vilket inte bara blir otydligt utan även svårt att sköta om och följa upp. Då är det bättre att lägga uppföljningen av underhåll i en egen tabell och bara hänvisa till de unika id som används i avloppsnätet. Då kan man dessutom ha hur många rader som helst som hänvisar till samma segment i lagret.

Det man gör är att den nya underhållstabellen ges ett ”externt id” (fk = foreign key) i en kolumn, som skall överensstämma med det id som finns i tabellen med avloppssegment. Sedan kopplar man de båda tabellerna till varandra med en ”relation” i QGIS.

Skärmbild från 2014-04-23 15:08:03Relationer skapas i projektegenskaperna.

Relationen definieras med underhållstabellen (utan geometrier) som ”child” och avloppsnätet (med geometrier) som ”parent”. Observera att det skall vara det externa id för underhållstabellen som skall fyllas i.

Underhållstabellen kan vara i stort sett vilket tabell eller databasformat som helst, men jag har testat med dBase (*.dbf) och det fungerade bra. Jag hade däremot lite strul med kommaseparerade textfiler.

Skärmbild från 2014-04-23 15:17:31

När man redigerar eller som i bilden ovan använder ”identifiera objekt” på de olika avloppssegmenten så kan man visa objektsformuläret och då finns det med den eller de relationer man skapat till olika tabeller. Det går att redigera och därmed skapa nya tillägg till underhållstabellen (i exemplet) direkt i detta formulär utan att behöva redigera geometrierna.

Som jag antydde ovan så går det faktiskt att ha relationer till massor av olika tabeller och det går även att skapa så kallade N:N eller ”många till många” relationer om man vill eller behöver det (exempelvis för att ha en underhållsrapport som täcker flera avloppssegment. Dock ej helt praktiskt i QGIS 2.2).

Skärmbild från 2014-04-23 15:19:48

Om man vill så kan man välja att visa det utförda underhållet som tabell, eller som i bilden ovan som formulär. När man klickar på datum i listan till vänster så får man upp formuläret till höger och vill man kan man som sagt direkt göra uppdateringar och eller redigeringar.

En finess med detta sätt att arbeta är att man kan använda QGIS för att planera underhållet och sedan skapa en arbetsorder där id för varje segment framgår. Den som sedan utför underhållet behöver inte göra något i QGIS utan kan via exempelvis ett webbformulär fylla i sin rapport om det utförda underhållet på sin surfplatta eller telefon direkt på plats. Att skapa ett webbformulär i PHP är inte särskilt svårt och det enda som behövs är en webbserver och gärna en databas där man kan skapa sina tabeller (exempelvis Postgresql/PostGIS).

Erfarenheter: Som nämnts så hade jag problem med csv-filer, men det kanske inte är det vanligaste filformatet för detta. Det finns inget självklart sätt att skapa en tabell utan geometri inifrån QGIS, men det är ganska lätt att skapa exempelvis en Postgresql tabell via PgAdminIII eller för den delen en dbf från Excel/Calc. Det går inte direkt att skapa en post i den relaterade tabellen om man skapar ett nytt geografiskt objekt om man som jag valt att dölja fk_id fältet i objektformuläret. Det borde även gå att koppla två tabeller med geometrier till varandra med relationer. Detta har jag däremot inte provat.

Annonser

Taggar:,

Trackbacks / Pingbacks

  1. Val 2014 | Geosupportsystem - 4 augusti, 2014

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

%d bloggare gillar detta: