16.2. Werken met de attributentabel

De attributentabel geeft informatie over de objecten van een geselecteerde laag weer. Elke regel in de tabel geeft één object (met of zonder geometrie) weer en elke kolom bevat een bepaald stukje informatie over het object. Objecten in de tabel kunnen worden opgezocht, geselecteerd, verplaatst of zelfs bewerkt.

16.2.1. Voorwoord: Ruimtelijke en niet ruimtelijke tabellen

QGIS stelt u in staat ruimtelijke en niet-ruimtelijke lagen te laden. Dit omvat momenteel ook tabellen die worden ondersteund door GDAL en gescheiden tekst, als ook de providers PostgreSQL, MS SQL Server, SpatiaLite en Oracle. Alle geladen lagen worden vermeld in het paneel Lagen. Of een laag ruimtelijk ingeschakeld is of niet bepaalt of u interactie kunt uitvoeren op de kaart.

Niet ruimtelijke tabellen kunnen gebladerd worden en ze kunnen worden bewerkt met de tabelweergave voor de attributen. Verder kunnen zij worden gebruikt voor het opzoeken van velden. Als voorbeeld kunt u kolommen van een niet ruimtelijke tabel gebruiken om waarden voor attributen te definiëren of een bereik van toegestane waarden die mogen worden toegevoegd aan een specifieke vectorlaag tijdens het digitaliseren. Bekijk de widget voor bewerken in Eigenschappen Formulier attributen wat nader voor meer informatie.

16.2.2. Introductie van de interface van de Attributentabel

Activeer, om de attributentabel voor een vectorlaag te openen, de laag door deze te selecteren in het Paneel Lagen. Open dan de attributentabel vanuit het menu Kaartlagen, kies openTable Attributentabel openen. Het is ook mogelijk door met de rechter muisknop op een laag in de legenda te klikken en openTable Attributentabel openen te kiezen uit het contextmenu of door te klikken op de knop openTable Attributentabel openen op de werkbalk Attributen. Als u liever met sneltoetsen werkt: F6 zal de attributentabel openen. Shift+F6 zal de attributentabel openen, maar gefilterd tot de geselecteerde objecten en Ctrl+F6 zal de attributentabel openen, maar gefilterd tot de zichtbare objecten.

Dit zal een nieuw venster openen dat de attributen voor de objecten van de laag weergeeft (figure_attributes_table). Overeenkomstig de instelling in het menu Extra ► Opties ► Databronnen, zal de attributentabel openen in een vastgezet venster of een normaal venster. Het totale aantal objecten op de laag en het aantal momenteel geselecteerde/gefilterde objecten wordt weergegeven in de titel van de attributentabel en ook of de laag ruimtelijk beperkt is.

../../../_images/vectorAttributeTable.png

Fig. 16.67 Attributentabel voor de laag regions

De knoppen boven in het venster van de attributentabel bieden de volgende functionaliteiten:

Tabel 16.1 Beschikbare gereedschappen

Pictogram

Label

Doel

Standaard snelkoppeling

toggleEditing

Bewerken aan/uitzetten

Schakel functionaliteiten voor Bewerken in

Ctrl+E

multiEdit

Schakelen naar modus Meervoudige bewerkingen

Meerdere velden van veel objecten bijwerken

saveEdits

Bewerkingen opslaan

Huidige aanpassingen opslaan

refresh

De tabel opnieuw laden

newTableRow

Object toevoegen

Object zonder geometrie toevoegen

deleteSelectedFeatures

Geselecteerde objecten verwijderen

Geselecteerde objecten op de laag verwijderen

editCut

Geselecteerde objecten naar klembord knippen

Ctrl+X

copySelected

Geselecteerde objecten naar klembord kopiëren

Ctrl+C

editPaste

Objecten vanaf klembord plakken

Nieuwe objecten vanuit gekopieerde invoegen

Ctrl+V

expressionSelect

Objecten selecteren m.b.v. reguliere expressie

selectAll

Alles selecteren

Alle objecten op de laag selecteren

Ctrl+A

invertSelection

Selectie omdraaien

De huidige selectie van de laag omdraaien

Ctrl+R

deselectActiveLayer

Alles deselecteren

Alle objecten op de huidige laag deselecteren

Ctrl+Shift+A

filterMap

Objecten filteren/selecteren met behulp van formulier

Ctrl+F

selectedToTop

Geselecteerde naar boven verplaatsen

Geselecteerde rijen naar boven in de tabel verplaatsen

panToSelected

Kaart naar de geselecteerde rijen verschuiven

Ctrl+P

zoomToSelected

Kaart naar de geselecteerde rijen zoomen

Ctrl+J

newAttribute

Nieuw veld

Nieuw veld aan de gegevensbron toevoegen

Ctrl+W

deleteAttribute

Veld verwijderen

Een veld uit de gegevensbron verwijderen

editTable

Kolommen schikken

Velden in de attributentabel weergeven/verbergen

calculateField

Veldberekening openen

Veld voor veel objecten in een rij bijwerken

Ctrl+I

conditionalFormatting

Voorwaardelijke opmaak

Opmaak voor de tabel inschakelen

dock

Attributentabel vast zetten

Maakt het mogelijk de attributentabel vast te zetten/los te maken

actionRun

Acties

Vermeldt de aan de laag gerelateerde acties

Notitie

Afhankelijk van de indeling van de gegevens en de bibliotheek van GDAL die is gebouwd met uw versie van QGIS, zouden sommige gereedschappen niet beschikbaar kunnen zijn.

Onder deze knoppen staat de werkbalk Veldberekening (alleen ingeschakeld in de modus Bewerken), die het mogelijk maakt berekeningen snel toe te passen op ofwel alle of de geselecteerde attributen in de tabel. Deze werkbalk gebruikt dezelfde expressies als calculateField Veldberekening (zie Attribuutwaarden bewerken).

De attributentabel ondersteunt scrollen met Shift+muiswiel in de attributentabel om te schakelen naar een horizontale scrollactie in plaats van verticaal.

16.2.2.1. Tabelweergave vs Formulierweergave

QGIS verschaft twee weergaven om eenvoudig gegevens in de attributentabel te bewerken:

  • De openTable Tabelweergave geeft waarden van meerdere objecten weer in een tabulaire modus, elke rij geeft een object weer en elke kolom een veld. Een klik met rechts op de kolomkop stelt u in staat de weergave van de tabel te configureren terwijl een klik met rechts op een cel interactie met het object verschaft.

  • De formView Formulierweergave geeft identificaties voor objecten weer in een eerste paneel en geeft alleen de attributen van de aangeklikte identificatie weer in het tweede paneel. Er is een keuzemenu aan de bovenzijde van het eerste paneel waar de “identificatie” kan worden gespecificeerd met een attribuut (Voorbeeld kolom) of een Expressie. Het keuzemenu bevat ook de laatste 10 expressies om die opnieuw te kunnen gebruiken. Formulierweergave gebruikt de configuratie van de velden van de laag (bekijk Eigenschappen Formulier attributen).

    U kunt door de identificaties van de objecten bladeren met de pijlen aan de onderzijde van het eerste paneel. De attributen van de objecten worden in het tweede paneel bijgewerkt terwijl u daar naartoe gaat. Het is ook mogelijk om het actieve object in het kaartvenster te identificeren of te verplaatsen door op een van de knoppen aan de onderzijde te drukken:

    • highlightFeature Huidige object op de kaart aacentueren indien zichtbaar in het kaartvenster

    • panTo Automatisch verschuiven naar huidige object

    • zoomTo Automatisch zoomen naar huidige object

U kunt van de ene naar de andere modus schakelen door te klikken op het corresponderende pictogram aan de rechteronderzijde van het dialoogvenster.

U kunt ook de modus Standaard weergave specificeren voor het openen van de attributentabel in het menu Extra ► Opties ► Gegevensbronnen. Het kan de ‘Laatste weergave onthouden’, ‘Tabelweergave’ of ‘Formulierweergave’ zijn.

../../../_images/attribute_table_views.png

Fig. 16.68 Attributentabel in tabelweergave (boven) vs formulierweergave (onder)

16.2.2.2. De kolommen configureren

Klik met rechts op een kolomkop in de Tabelweergave om toegang te krijgen tot gereedschappen die u helpen beheren:

Breedte kolommen wijzigen

De breedte van kolommen kan worden ingesteld met een klik met rechts op de kolomkop en ofwel te selecteren:

  • Breedte instellen… om de gewenste waarde in te voeren. Standaard wordt in de widget de huidige waarde weergegeven

  • Alle kolombreedten instellen… op dezelfde waarde

  • of Autom. grootte om te wijzigen naar de best passende grootte voor de kolom.

  • Automatische grootte alle kolommen

Een grootte van een kolom kan ook worden gewijzigd door de begrenzing aan de rechterkant van de kop te slepen. De nieuwe grootte van de kolom wordt voor de laag behouden, en hersteld bij het opnieuw openen van de attributentabel.

Kolommen verbergen en beheren en acties inschakelen

Door met rechts te klikken op een kolomkop, kunt u kiezen voor Kolom verbergen in de attributentabel (in modus “Tabelweergave”). Voor meer geavanceerd beheer, druk op de knop editTable Kolommen beheren… op de werkbalk van het dialoogvenster of kies Kolommen beheren… in het contextmenu van een kolomkop. In het nieuwe dialoogvenster kunt u:

  • kolommen selecteren/deselecteren die u wilt weergeven of verbergen: een verborgen kolom zal verdwijnen uit elke instantie van het dialoogvenster van de attributentabel totdat hij actief wordt hersteld.

  • items slepen en neerzetten om de volgorde van de kolommen in de attributentabel te wijzigen. Onthoud dat deze wijziging slechts is bestemd voor het renderen van de tabel en niet de veldvolgorde in de gegevensbron van de laag wijzigt

  • een nieuwe virtuele kolom Acties toevoegen die in elke rij een keuzemenu of knoppenlijst met ingeschakelde acties weergeeft. Bekijk Acties voor meer informatie over acties.

Kolommen sorteren

De tabel kan worden gesorteerd op elke kolom, door te klikken op de kolomkop. Een kleine pijl geeft de sorteervolgorde aan (naar beneden wijzend betekent aflopende waarden vanaf de bovenste rij naar beneden, naar boven wijzend betekent oplopende waarden vanaf de bovenste rij naar beneden). U kunt er ook voor kiezen de rijen te sorteren met de optie Sorteren… van het contextmenu van de kolomkop en een expressie schrijven. Om bijvoorbeeld de rijen te sorteren op meerdere kolommen kunt u schrijven concat(col0, col1).

In formulierweergave kan de ID van de objecten worden gesorteerd met behulp van de optie sort Op expressie voor weergave sorteren.

Tip

Sorteren gebaseerd op kolommen van verschillende typen

Een attributentabel proberen te sorteren op kolommen van tekenreeksen of numerieke typen zou kunnen leiden tot onverwachte resultaten omdat de expressie concat("USE", "ID") waarden als tekenreeksen teruggeeft (d.i, 'Borough105' < 'Borough6'). U kunt daar omheen werken door bijv. concat("USE", lpad("ID", 3, 0)) te gebruiken, dat 'Borough105' > 'Borough006' teruggeeft.

16.2.2.3. Opmaken van tabelcellen met voorwaarden

Instellingen voor voorwaardelijke opmaak kunnen worden gebruikt om objecten in de attributentabel, waarop u een bijzonder focus wilt zetten, te accentueren met behulp van aangepaste voorwaarden op de object:

  • geometrie (bijv. identificeren van meerdelige objecten, zeer kleine gebieden of in een gedefinieerd kaartbereik…);

  • of veldwaarde (bijv. waarden vergelijken met een drempel, lege cellen identificeren…).

U kunt het paneel Voorwaardelijke opmaak inschakelen door te klikken op conditionalFormatting aan de rechterbovenkant van het venster Attributen in de tabelweergave (niet beschikbaar in de formulierweergave).

Het nieuwe paneel stelt de gebruiker in staat om nieuwe regels toe te voegen voor de opmaak van het renderen van het radioButtonOnVeld of de radioButtonOffVolledige rij. Toevoegen van een nieuwe regel opent een formulier om te definiëren:

  • de naam van de regel;

  • een voorwaarde met behulp van een van de functies van Expressie-string bouwer;

  • de opmaak: die kan worden gekozen uit een lijst met vooraf gedefinieerde opmaak of gemaakt worden, gebaseerd op eigenschappen zoals:

    • achtergrond- en tekstkleuren;

    • gebruik van pictogram;

    • vet, cursief onderstreept, of doorgehaald;

    • lettertype.

../../../_images/attribute_table_conditional_formating.png

Fig. 16.69 Voorwaardelijke opmaak van een attributentabel

16.2.3. Werken met objecten in een attributentabel

16.2.3.1. Objecten selecteren

In tabelweergave geeft elke regel in de attributentabel de attributen van een uniek object in de laag weer. Selecteren van een rij selecteert het object en soortgelijk, selecteren van een object in het kaartvenster (in het geval van een laag met ingeschakelde geometrie) selecteert de rij in de attributentabel. Als de set geselecteerde objecten in het kaartvenster (of attributentabel) wordt gewijzigd, dan wordt die selectie ook overeenkomstig bijgewerkt in de attributentabel (of het kaartvenster).

Rijen kunnen worden geselecteerd door te klikken op het rijnummer aan de linkerkant. Meerdere rijen kunnen worden geselecteerd met de Ctrl-toets ingedrukt gehouden. Een Opvolgende selectie kan worden gemaakt door de Shift-toets in te drukken en een rijnummer aan de linkerkant. Alle rijen tussen de rij waarin zich de cursor bevindt en de aangeklikte rij worden geselecteerd. Het veranderen van de cursorpositie, door in een andere cel van de tabel te klikken, zal de selectie niet aanpassen. Het wijzigen van de selectie in het kaartvenster, zal niet de cursorpositie in de attributentabel wijzigen.

In de formulierweergave van de attributentabel worden objecten standaard geïdentificeerd in het linkerpaneel aan de hand van hun weergegeven veld (zie Tonen). Deze identificatie kan worden vervangen met behulp van de keuzelijst aan de bovenzijde van het paneel, ofwel door een bestaand veld te kiezen of door een aangepaste expressie te gebruiken. U kunt er ook voor kiezen de lijst met objecten te sorteren vanuit de keuzelijst.

Klik op een waarde in het linkerpaneel om de attributen van het object in het rechter weer te geven. U dient binnen het vierkant aan de linkerkant van de identificatie te klikken om een object te selecteren. Standaard zal het symbool geel kleuren. Net zoals in de tabelweergave kunt u meervoudig selecteren van objecten uitvoeren met behulp van de reeds eerder weergegeven combinaties voor het toetsenbord.

Naast het selecteren van objecten met de muis, kunt u automatische selecties uitvoeren, gebaseerd op de attributen van het object met behulp van de beschikbare gereedschappen in de werkbalk van de attributentabel, zoals (zie gedeelte Automatisch selecteren en volgende voor meer informatie en gebruiksgevallen):

  • expressionSelect Objecten selecteren m.b.v. een reguliere expressie

  • formSelect Objecten selecteren d.m.v. waarde…

  • deselectActiveLayer Objecten deselecteren van huidige actieve laag

  • selectAll Alle objecten selecteren

  • invertSelection Selectie van objecten omdraaien

Het is ook mogelijk objecten te selecteren met behulp van Objecten filteren en selecteren met formulieren.

16.2.3.2. Objecten filteren

Als u eenmaal objecten hebt geselecteerd in de attributentabel, wilt u misschien alleen die records in de tabel weergeven. Dat kan eenvoudig worden gedaan met behulp van het item Geselecteerde objecten weergeven uit de keuzelijst aan de linkeronderzijde van het dialoogvenster Attributentabel. Deze lijst biedt de volgende filters:

  • openTable Alle objecten tonen

  • openTableSelected Geselecteerde objecten tonen - hetzelfde als het gebruiken van Attributentabel openen (Geselecteerde objecten) vanuit het menu Kaartlagen of de Werkbalk Attributen of te drukken op Shift+F6

  • openTableVisible Op kaart zichtbare objecten tonen - hetzelfde als het gebruiken van Attributentabel openen (Zichtbare objecten) vanuit het menu Kaartlagen of de Werkbalk Attributen of te drukken op Ctrl+F6

  • openTableEdited Bewerkte en nieuwe objecten tonen - hetzelfde als het gebruiken van Attributentabel openen (Bewerkte en nieuwe objecten) vanuit het menu Kaartlagen of de Werkbalk Attributen

  • Veldfilter - stelt de gebruiker in staat te filteren op basis van een waarde van een veld: kies een kolom uit een lijst, typ of selecteer een waarde en druk op Enter om te filteren. Daarna worden alleen de objecten die overeenkomen met de expressie num_field = value of string_field ilike '%value%' weergegeven in de attributentabel. U kunt checkbox Case sensitive selecteren om minder mogelijkheden in teksttekenreeksen toe te staan.

  • Geavanceerd filter (Expressie) - Opent het dialoogvenster voor de Expressie-string bouwer. Daarin kunt u complexe expressies maken waaraan rijen van de tabel moeten voldoen. U kunt, bijvoorbeeld, de tabel filteren met behulp van meer dan één veld. Indien toegepast verschijnt de expressie van het filter aan de onderzijde van het formulier.

  • Opgeslagen filterexpressies ►: een sneltoets naar opgeslagen expressies frequent gebruikt voor het filteren van uw attributentabel.

Het is ook mogelijk objecten te filteren met formulieren.

Notitie

Filteren van records uit de attributentabel filtert niet de objecten uit de laag weg; zij worden eenvoudigweg tijdelijk verborgen in de tabel en er kan toegang tot verkregen worden vanuit het kaartvenster of door het filter te verwijderen. Voor filters die wel objecten van de laag verbergen, gebruik de Querybouwer.

Tip

Gegevensbron bijwerken door te filteren met Op kaart zichtbare objecten tonen

Indien om redenen van uitvoering objecten die worden weergegeven in de attributentabel ruimtelijk zijn beperkt tot het kaartvenster bij het openen (zie Instellingen voor databronnen voor een how-to), zal selecteren van Op kaart zichtbare objecten tonen op een nieuw kaartbereik de ruimtelijke beperking bijwerken.

16.2.3.3. Filterexpressies opslaan

Expressies die u gebruikt voor het filteren van de attributentabel kunnen worden opgeslagen voor toekomstig gebruik. Bij het gebruiken van de items Veldfilter of Geavanceerd filter (expressie) wordt de gebruikte expressie weergegeven in een widget Tekst aan de onderzijde van het dialoogvenster van de attributentabel. Druk op handleStoreFilterExpressionUnchecked Expressie opslaan met tekst als naam naast het vak om de expressie in het project op te slaan. Drukken op het keuzemenu naast de knop maakt het mogelijk de expressie op te slaan met een aangepaste naam (Expressie opslaan als…). Wanneer een opgeslagen expressie wordt weergegeven, wordt de knop handleStoreFilterExpressionChecked geactiveerd en het keuzemenu daarvan stelt u in staat om Expressie bewerken en een naam te geven, of Opgeslagen expressie verwijderen.

Opgeslagen filterexpressies worden opgeslagen in het project en zijn beschikbaar via het menu Opgeslagen filterexpressies van de attributentabel. Ze zijn anders dan de gebruikersexpressies, die worden gedeeld door alle projecten van het actieve gebruikersprofiel.

16.2.3.4. Objecten filteren en selecteren met formulieren

Klikken op filterMap Objecten met behulp van formulier filteren/selecteren of drukken op Ctrl+F in het dialoogvenster van de attributentabel zal dat schakelen naar de formulierweergave en elk widget vervangen door zijn variant om te zoeken.

Vanaf dit punt is de functionaliteit van dit gereedschap soortgelijk aan die welke werd beschreven in Objecten selecteren d.m.v. waarde, waar u beschrijvingen kunt vinden van alle operatoren en modi voor selecteren.

../../../_images/tableFilteredForm.png

Fig. 16.70 Attributentabel gefilterd door het filterformulier

Bij het selecteren / filteren van objecten in de attributentabel is er een knop Objecten filteren die het mogelijk maakt filters te definiëren en te verfijnen. Gebruiken ervan activeert de optie Geavanceerd filter (Expressie) en geeft de overeenkomende expressie voor het filteren weer in een bewerkbaar tekstwidget aan de onderzijde van het formulier.

Indien er al gefilterde objecten zijn, kunt u het filter verfijnen met behulp van de keuzelijst naast de knop Objecten filteren. De opties zijn:

  • Filteren binnen (“AND”)

  • Filter uitbreiden (“OR”)

Selecteer, om het filter op te heffen, ofwel de optie Alle objecten tonen uit de keuzelijst aan de linkeronderzijde, of maak de expressie leeg en klik op Toepassen of druk op Enter.

16.2.4. Acties op objecten gebruiken

Gebruikers hebben verscheidene mogelijkheden om objecten te bewerken met het contextmenu, zoals:

  • Alles selecteren (Ctrl+A) alle objecten selecteren;

  • De inhoud van een cel naar het klembord te kopiëren met Celinhoud kopiëren;

  • Naar object inzoomen zonder het eerst te hebben geselecteerd;

  • Naar object verplaatsen zonder het eerst te hebben geselecteerd;

  • Flitsmogelijkheid, om het in het kaartvenster te accentueren;

  • Formulier openen: Het schakelt de attributentabel naar formulierweergave met de focus op het aangeklikte object.

../../../_images/copyCellContent.png

Fig. 16.71 Knop Celinhoud kopiëren

Indien u gegevens van attributen wilt gebruiken in externe programma’s (zoals Excel, LibreOffice, QGIS of een eigen webtoepassing), selecteer één of meer rij(en) en gebruik de knop copySelected Geselecteerde rijen naar klembord kopiëren of druk op Ctrl+C.

In het menu Extra ► Opties ► Databronnen kunt u uit de keuzelijst de opmaak definiëren die moet worden geplakt met Objecten kopiëren als:

  • Platte tekst, geen geometrie,

  • Platte tekst, WKT-geometrie,

  • GeoJSON

U kunt ook een lijst met acties weergeven in dit contextmenu. Dit wordt ingeschakeld op de tab Laageigenschappen ► Acties. Bekijk Acties voor meer informatie over acties.

16.2.4.1. Geselecteerde objecten als nieuwe laag opslaan

De geselecteerde objecten kunnen worden opgeslagen in alle door OGR ondersteunde vectorindelingen en ook worden omgezet naar een ander Coördinaten ReferentieSysteem (CRS). In het contextmenu van de laag uit het paneel Lagen, klik op Exporteren ► Geselecteerde objecten opslaan als… om vervolgens een naam voor het uitvoer gegevensbestand op te geven, de gewenste indeling en het CRS (zie het gedeelte Nieuwe lagen uit een bestaande laag maken). U zult zien dat het keuzevak checkbox Alleen geselecteerde objecten opslaan is geselecteerd. Het is ook mogelijk om opties voor het maken van GDAL op te geven in het dialoogvenster.

16.2.5. Attribuutwaarden bewerken

Bewerken van waarden van attributen kan worden gedaan door:

  • het direct typen van de nieuwe waarde in de cel, zowel in de tabel als in de formulierweergave. Wijzigingen worden daarom per cel uitgevoerd, object na object;

  • met Veldberekening: bijwerken van een rij van een veld dat al kan bestaan of dat kan worden gemaakt, maar voor meerdere objecten. Het kan worden gebruikt om virtuele velden te maken;

  • met de werkbalk Snelle veldberekening: hetzelfde als hierboven maar alleen voor bestaande velden;

  • of met de modus Meervoudige bewerkingen: meerdere velden voor meerdere objecten bijwerken in een rij.

16.2.5.1. Veldberekening gebruiken

De knop calculateField Veldberekening in de attributentabel geeft de mogelijkheid om berekeningen uit te voeren van bestaande waarden van attributen of gedefinieerde functies, bijvoorbeeld om de lengte of oppervlakte van objecten geometrie te berekenen. De resultaten kunnen worden gebruikt om een bestaand veld bij te werken of worden geschreven naar een nieuw veld (dat een virtueel veld mag zijn).

Veldberekening is beschikbaar op elke laag die bewerken ondersteunt. Wanneer u op het pictogram Veldberekening klikt opent het dialoogvenster (zie Fig. 16.72). Als de laag niet in de modus Bewerken staat, wordt een waarschuwing weergegeven en het gebruiken van Veldberekening zal er voor zorgen dat de laag in de modus Bewerken wordt gezet vóórdat de berekening wordt uitgevoerd.

Gebaseerd op het dialoogvenster Expressie-string bouwer, biedt het dialoogvenster Veldberekening een volledige interface om een expressie te definiëren en die toe te passen op een bestaand of nieuw gemaakt veld. U moet eerst, om Veldberekening te kunnen gebruiken, selecteren:

  1. berekening toepassen op de gehele laag of alleen op de geselecteerde objecten

  2. een nieuw veld voor de berekening maken of een bestaand veld bijwerken.

../../../_images/fieldcalculator.png

Fig. 16.72 Veldberekening

Als u er voor kiest een nieuw veld toe te voegen, dient een veldnaam, een veldtype (geheel getal, decimaal getal, datum of tekst) en, indien nodig, de totale veldlengte en de precisie te worden opgegeven. Als u bijvoorbeeld voor een veldlengte van 10 en een precisie van 3 kiest, betekent dit dat u ruimte heeft voor 7 tekens voor de punt, en 3 tekens voor het decimale gedeelte.

Een kort voorbeeld illustreert het gebruik van Veldberekening bij het gebruiken van de tab Expressie. We willen de lengte van de laag railroads van de voorbeeld dataset van QGIS berekenen in km:

  1. Laad het shapefile railroads.shp in QGIS en selecteer openTable Attributentabel openen.

  2. Klik op toggleEditing Bewerken aan/uitzetten en open het dialoogvenster calculateField Veldberekening.

  3. Selecteer het keuzevak checkbox Nieuw veld aanmaken om berekeningen op te slaan in het nieuwe veld.

  4. Stel Naam voor veld in op length_km

  5. Selecteer Decimaal getal (real) als Type voor veld

  6. Stel de Lengte van veld voor uitvoer in op 10 en de Precisie op 3

  7. Dubbelklik op $length in de groep Geometrie om de lengte van de geometrie toe te voegen in het expressievak van Veldberekening (u zult een begin zien van een voorbeeld van de uitvoer, tot maximaal 60 tekens, onder het vak voor de expressie die real-time wordt bijgewerkt als de expressie wordt samengesteld).

  8. Voltooi de expressie compleet door “/1000” in te typen in het vak voor de expressie van de berekening en druk op OK.

  9. U zult nu een nieuw veld length_km in de attributentabel terugvinden.

16.2.5.2. Een virtueel veld maken

Een virtueel veld is een veld dat is gebaseerd op een direct berekende expressie, wat betekent dat zijn waarde automatisch wordt bijgewerkt zodra een onderliggende parameter wijzigt. De expressie wordt één keer ingesteld; u hoeft het veld niet langer elke keer opnieuw te berekenen als de onderliggende waarde wijzigt. U zou, bijvoorbeeld, een virtueel veld willen gebruiken als u gebieden wilt laten evalueren bij het digitaliseren van objecten of om automatisch een duur te laten berekenen tussen datums die zouden kunnen wijzigen (bijv. bij het gebruiken van de functie now()).

Notitie

Virtuele velden gebruiken

  • Virtuele velden staan niet permanent in de attributen van de laag, wat betekent dat zij alleen worden opgeslagen en beschikbaar zijn in het projectbestand waarin zij zijn gemaakt.

  • Een veld kan allen virtueel worden ingesteld bij het maken. Virtuele velden zijn gemarkeerd met een paarse achtergrond op de tab Velden van het dialoogvenster Laageigenschappen om ze te kunnen onderscheiden van normale fysieke of samengestelde velden. Hun expressie kan later worden bewerkt door te drukken op de knop Expressie in de kolom Opmerking. Een venster voor het bewerken van de expressie zal worden geopend om de expressie van het virtuele veld aan te kunnen passen.

16.2.5.3. De werkbalk Snelle veldberekening gebruiken

Waar Veldberekening altijd beschikbaar is, is de werkbalk Snelle veldberekening, boven in de attributentabel, alleen zichtbaar als de laag in de modus Bewerken staat. Dankzij het programma voor de expressie, biedt het snelle toegang voor het bewerken van een reeds bestaand veld:

  1. Selecteer het bij te werken veld in de keuzelijst.

  2. Vul het tekstvak met een waarde, een expressie die u direct schrijft of bouwt met de knop voor de expressie expression

  3. Klik op de knop Alles bijwerken, Geselecteerde bijwerken of Gefilterde bijwerken, overeenkomstig uw wensen.

../../../_images/fieldcalculatorbar.png

Fig. 16.73 De werkbalk Snelle veldberekening

16.2.5.4. Meerdere velden bewerken

Anders dan met de vorige gereedschappen, staat de modus Meervoudige bewerkingen toe dat meerdere attributen van verschillende objecten tegelijkertijd worden bewerkt. Wanneer de laag is geschakeld naar de modus Bewerken, zijn mogelijkheden voor Meervoudige bewerkingen toegankelijk:

  • met de knop multiEdit Schakelen naar modus Meervoudige bewerkingen vanaf de werkbalk binnen het dialoogvenster Attributentabel;

  • of door het selecteren van het menu Bewerken ► multiEdit Attributen van geselecteerde objecten aanpassen.

Notitie

Anders dan het gereedschap vanuit de attributentabel zal drukken op de optie Bewerken ► Attributen van geselecteerde objecten aanpassen u een modaal dialoogvenster verschaffen om wijzigingen aan de attributen in te vullen. Daarom is het selecteren van objecten vereist vóór het uitvoeren.

Om meerdere velden in één rij te bewerken:

  1. Selecteer de objecten die u wilt bewerken.

  2. Klik, op de werkbalk van de Attributentabel, op de knop multiEdit. Dit zal het dialoogvenster naar de formulierweergave schakelen. Selecteren van objecten zou ook in deze stap gedaan kunnen worden.

  3. Aan de rechterkant van de attributentabel worden velden (en waarden) van geselecteerde objecten weergegeven. Nieuwe widgets verschijnen naast elk veld, wat het mogelijk maakt de huidige status voor Meervoudige bewerkingen weer te geven:

    • multiEditMixedValues Het veld bevat verschillende waarden voor de geselecteerde objecten. Het wordt leeg weergegeven en elk object behoudt zijn originele waarde. U kunt de waarde van het veld herstellen uit de keuzelijst van de widget.

    • multiEditSameValues Alle geselecteerde objecten hebben dezelfde waarde voor dit veld en de weergegeven waarde in het formulier zal worden behouden.

    • multiEditChangedValues Het veld is bewerkt en de ingevoerde waarde zal worden toegepast op alle geselecteerde objecten. Er verschijnt een bericht aan de bovenzijde van het dialoogvenster dat u zal vragen uw wijziging toe te passen of te herstellen.

    Klikken op een van deze widgets stelt u in staat ofwel de huidige waarde voor het veld in te stellen of de originele waarde te herstellen, wat betekent dat u wijzigingen kunt terugdraaien op een veld-na-veld-basis.

    ../../../_images/attribute_multiedit.png

    Fig. 16.74 Velden van meerdere objecten bewerken

  4. Maak de wijzigingen in de velden die u wilt.

  5. Klik op Wijzigingen toepassen in het bericht bovenaan of enig ander object in het linkerpaneel.

Wijzigingen zullen worden toegepast op alle geselecteerde objecten. Indien er geen object is geselecteerd wordt de gehele tabel met uw wijzigingen bijgewerkt. Aanpassingen worden gemaakt als één enkele opdracht tot bewerken. Het drukken op undo Ongedaan maken zal dus de wijzigingen aan de attributen voor alle objecten in één keer terugdraaien.

Notitie

Modus Meervoudige bewerkingen is alleen beschikbaar voor automatisch gegenereerde en formulieren van Slepen en neerzetten (zie Een formulier voor uw gegevens aanpassen); het wordt niet ondersteund in aangepaste formulieren voor de UI.

16.2.6. Een tot veel- of veel-tot-veel-relaties maken

Relaties zijn een techniek die veel gebruikt wordt in databases. Het concept is dat objecten (rijen) van verschillende lagen (tabellen) aan elkaar kunnen behoren.

16.2.6.1. 1-N-relaties introduceren

Als voorbeeld heeft u een laag met alle regio’s van Alaska (polygoon) die verschillende attributen verschaft over de naam ervan en het type regio en een unieke ID (die dient als primaire sleutel).

Dan krijgt u een andere laag met punten of tabel met informatie over vliegvelden die in de regio’s liggen en u wilt ook deze bijhouden. Als u ze wilt toevoegen aan de laag van de regio’s, dient u een één tot veel-relatie te maken met behulp van secundaire sleutels, omdat er meerdere vliegvelden in de meeste regio’s liggen.

../../../_images/relations1.png

Fig. 16.75 Regio Alaska met vliegvelden

Lagen in 1-N-relaties

QGIS maakt geen verschil tussen een tabel en een vectorlaag. In feite is een vectorlaag een tabel met een geometrie. Dus kunt u uw laag tabel als een vectorlaag toevoegen. U kunt, om de 1-N-relatie te demonstreren, het shapefile regions laden en de csv-tabel airports dat een veld voor een secundaire sleutel (fk_region) voor de laag regions heeft. Dit betekent dat elk vliegveld tot precies één regio behoort terwijl elke regio een onbepaald aantal vliegvelden kan hebben (een typische een tot veel-relatie).

Vreemde sleutels in 1-N-relaties

In aanvulling op de reeds bestaande attributen in de attributentabel van de vliegvelden heeft u nog een ander veld fk_region nodig dat optreedt als een secundaire sleutel (als u een database heeft, wilt u er waarschijnlijk een voorwaarde aan verbinden).

Dit veld fk_region zal altijd een ID van een regio bevatten. Het kan worden gezien als een verwijzing naar de regio waartoe het behoort. En u kunt een aangepaste vorm voor bewerken ontwerpen en QGIS zorgt dan voor de instellingen. Het werkt voor verschillende providers (dus u kunt het ook gebruiken met Shapefile- en csv-bestanden) en alles wat u hoeft te doen is QGIS de relaties tussen uw tabellen te vertellen.

1-N-relaties definiëren

Het eerste dat gaan we doen is om QGIS in kennis te stellen van de relaties tussen de lagen. Dit wordt gedaan in Project ► Eigenschappen…. Open de tab Relaties en klik op symbologyAdd Relatie toevoegen.

  • Naam zal worden gebruikt als de titel. Het zou een door mensen te lezen tekenreeks moeten zijn, die beschrijft waar de relatie voor wordt gebruikt. We zullen het in dit geval eenvoudigweg vliegveld_relatie noemen.

  • Referentielaag (Ouder), ook wel beschouwd als de ouderlaag, is die waarnaar de primaire sleutel verwijst, dus hier is het de laag regions. U moet de primaire sleutel voor de referentielaag definiëren, dus is het ID.

  • Referentielaag (Kind), ook wel beschouwd als de kindlaag, is die met het veld voor de vreemde sleutel erop. In ons geval is dit de laag airports. Voor deze laag dient u een verwijzingsveld toe te voegen dat naar de andere laag verwijst, dus is dit fk_region.

    Notitie

    Soms heeft u meer dan één enkel veld nodig om objecten op een laag uniek te kunnen identificeren. Maken van een relatie met een dergelijke laag vereist een samengestelde sleutel, d.i. meer dan één enkel paar van overeenkomende velden. Gebruik de knop symbologyAdd Nieuw veldpaar toevoegen als deel van een samengestelde sleutel om net zoveel paren toe te voegen als nodig is.

  • ID zal worden gebruikt voor interne doeleinden en moet uniek zijn. U zou mogelijk aangepaste formulieren moeten maken. Als u het leeg laat zal er een voor u worden gegenereerd maar u kunt er zelf een toewijzen om er een te krijgen die voor u eenvoudiger is.

  • Sterkte relatie stelt de sterkte in van de relatie tussen de ouder- en kindlaag. Het standaard type Associatie betekent dat de ouderlaag eenvoudig is gekoppeld aan de kindlaag, terwijl het type Compositie u in staat stelt ook de kindobjecten te dupliceren bij het dupliceren van die van de ouderlaag en bij het verwijderen van een object ook de kinderen worden verwijderd, resulterend in trapsgewijze over alle niveaus (wat betekent dat kinderen van kinderen van… ook worden verwijderd).

../../../_images/relations2.png

Fig. 16.76 Toevoegen van een relatie tussen de lagen regions en airports

Op de tab Relaties kunt u ook drukken op de knop symbologyAdd Relaties ontdekken om de beschikbare relaties van de geladen lagen op te halen. Dit is mogelijk voor lagen die zijn opgeslagen in gegevensproviders zoals PostgreSQL of SpatiaLite.

Formulieren voor 1-N-relaties

Nu QGIS van de relatie weet zal het worden gebruikt om de formulieren te verbeteren die het genereert. Als we de standaardmethode voor het formulier niet wijzigden (automatisch gegenereerd) zal het eenvoudigweg een nieuw widget in ons formulier maken. Dus laten we de laag regions selecteren in de legenda en het gereedschap Objecten identificeren gebruiken. Afhankelijk van uw instellingen zou het formulier direct kunnen openen of u moet het kiezen om het openen in het dialoogvenster Identificatieresultaten onder Acties.

../../../_images/relations3.png

Fig. 16.77 Dialoogvenster Identificatieresultaten regions met relatie naar vliegvelden

Zoals u kunt zien worden de vliegvelden die tot deze bepaalde regio zijn toegewezen weergegeven in een tabel. En er zijn ook enkele knoppen beschikbaar. Laten we die even kort bekijken:

  • De knop toggleEditing is voor het aan of uitzetten van het bewerken. Onthoud dat het de modus Bewerken voor de laag airports schakelt, hoewel we in het objectformulier van een object uit de laag regions staan. Maar de tabel geeft objecten weer uit de laag airports.

  • De knop saveEdits is voor het opslaan van alle bewerkingen in de kindlaag (airport).

  • De knop capturePoint laat u de geometrie van het vliegveld digitaliseren in het kaartvenster en wijst het nieuwe object standaard toe aan de huidige region. Merk op dat het pictogram zal wijzigen, overeenkomstig het type geometrie.

  • De knop newTableRow voegt een nieuw record in de attributentabel van de laag airports in en wijst het nieuwe object standaard toe aan de huidige region. De geometrie kan later worden getekend met het gereedschap voor digitaliseren Deel toevoegen.

  • De knop duplicateFeature maakt het voor u mogelijk om één of meer kindobjecten te kopiëren en te plakken in de kindlaag. Ze kunnen later worden toegewezen aan een ander ouderobject of hun attributen kunnen worden aangepast.

  • De knop deleteSelectedFeatures verwijdert het/de geselecteerde vliegveld(en) permanent.

  • Het symbool link opent een nieuw dialoogvenster waar u een bestaand vliegveld kunt selecteren dat dan zal worden toegewezen aan de huidige region. Dit zou handig kunnen zijn als u het vliegveld per ongeluk in de verkeerde region maakte.

  • Het symbool unlink ontkoppelt het/de geselecteerde vliegveld(en) van de huidige region, hen effectief laten staan als niet toegewezen (de vreemde sleutel wordt ingesteld op NULL).

  • Met de knop zoomToSelected kunt u op de kaart inzoomen op de geselecteerde kindobjecten.

  • De twee knoppen formView en openTable aan de rechterkant schakelen tussen de tabel- en formulierweergave van de gerelateerde kind-objecten.

Als u de Ontwerper Slepen en neerzetten gebruikt voor het object regions, kunt u selecteren welke gereedschappen beschikbaar zijn. U kunt zelfs beslissen of een nieuw formulier moet worden geopend wanneer een nieuw object wordt toegevoegd met de optie Formulier verbergen bij toevoegen object. Onthoud dat deze optie impliceert dat attributen niet Null een geldige waarde moeten hebben om correct te werken.

../../../_images/relations11.png

Fig. 16.78 Ontwerper Slepen en neerzetten voor het configureren van gereedschappen voor relaties regions-airports

In het bovenstaande voorbeeld heeft de verwijzingslaag geometrieën (en is het niet slechts een alfanumerieke tabel), dus zullen de bovenvermelde stappen een item maken in de attributentabel van de laag dat geen overeenkomend geometrisch object heeft. De geometrie toevoegen:

  1. Kies openTable Attributentabel openen voor de referentielaag.

  2. Selecteer het record dat eerder werd toegevoegd in het objectformulier van de verwijzingslaag.

  3. Gebruik het gereedschap voor digitaliseren addPart Deel toevoegen om een geometrie te verbinden met het geselecteerde record van de attributentabel.

Als u werkt met de tabel Airports is de widget Relatie-verwijzing automatisch ingesteld voor het veld fk_region (dat werd gebruikt om de relatie te maken), bekijk widget Relatie-verwijzing.

In het formulier Airports zult u de knop formView zien aan de rechterkant van het veld fk_region: als u op de knop klikt zal het formulier van de laag Regions worden geopend. Dit widget stelt u in staat eenvoudig en snel de formulieren van de gekoppelde ouderobjecten te openen.

../../../_images/relations4.png

Fig. 16.79 Dialoogvenster Identificatieresultaten Airports met relatie naar Regions

De widget Relatie-verwijzing heeft ook een optie om het formulier van de ouderlaag in te bedden in de kindlaag. Het is beschikbaar in het menu Eigenschappen ► Formulier attributen van de laag Airports: selecteer het veld fk_region en selecteer de optie Ingebed formulier weergeven.

Als u nu kijkt naar het dialoogvenster van het object, zult u zien dat het formulier van de regio nu is ingebed in het formulier van de vliegvelden en zelfs een combinatievak zal hebben, wat u in staat stelt het huidige vliegveld aan een andere regio toe te wijzen.

../../../_images/relations5.png

Meer nog, als u schakelt met de modus Bewerken van de laag airports, heeft het veld fk_region ook een functie automatisch aanvullen: tijdens het typen zult u alle waarden zien van het veld id van de laag regions. Hier is het mogelijk een polygoon te digitaliseren voor de laag regions met de knop symbologyAdd als u kiest voor de knop Toevoegen nieuwe objecten toestaan in het menu Eigenschappen ► Formulier attributen van de laag airports.

De kindlaag kan ook worden gebruikt in het gereedschap Objecten selecteren d.m.v. waarde om objecten van de ouderlaag te selecteren, gebaseerd op attributen van hun kinderen.

In Fig. 16.80 zijn alle regio’s, waarvan de gemiddelde hoogte van de vliegvelden groter is dan 500 meter boven zeeniveau, geselecteerd.

U zult merken dat veel verschillende functies voor samenvoegen in het formulier beschikbaar zijn.

../../../_images/relation_select_by_value.png

Fig. 16.80 Ouderobjecten selecteren met waarden van hun kind

16.2.6.2. Introduceren van relaties veel-tot-veel (N-M)

N-M-relaties zijn veel-tot-veel-relaties tussen twee tabellen. Bijvoorbeeld voor de lagen airports en airlines: een vliegveld ontvangt verscheidene luchtvaartmaatschappijen en een luchtvaartmaatschappij vliegt naar verscheidene vliegvelden.

Deze code voor SQL maakt de drie tabellen die we nodig hebben voor een relatie N-M in schema voor PostgreSQL/PostGIS, genaamd locations. U kunt de code uitvoeren met Database ► DB Manager… voor PostGIS of met externe programma’s als pgAdmin. De tabel airports slaat de laag airports op en de tabel airlines slaat de laag airlines op. In beide tabellen worden voor helderheid enkele velden gebruikt. Het moeilijke gedeelte is de tabel airports_airlines. We dienen er voor te zorgen dat die alle airlines voor alle airports vermeld (of vice versa). Dit soort tabel staat bekend als een draaitabel. De voorwaarden in deze tabel forceren dat een airport alleen kan worden geassocieerd met een airline als beide al in hun lagen bestaan.

CREATE SCHEMA locations;

CREATE TABLE locations.airports
(
   id serial NOT NULL,
   geom geometry(Point, 4326) NOT NULL,
   airport_name text NOT NULL,
   CONSTRAINT airports_pkey PRIMARY KEY (id)
);

CREATE INDEX airports_geom_idx ON locations.airports USING gist (geom);

CREATE TABLE locations.airlines
(
   id serial NOT NULL,
   geom geometry(Point, 4326) NOT NULL,
   airline_name text NOT NULL,
   CONSTRAINT airlines_pkey PRIMARY KEY (id)
);

CREATE INDEX airlines_geom_idx ON locations.airlines USING gist (geom);

CREATE TABLE locations.airports_airlines
(
   id serial NOT NULL,
   airport_fk integer NOT NULL,
   airline_fk integer NOT NULL,
   CONSTRAINT airports_airlines_pkey PRIMARY KEY (id),
   CONSTRAINT airports_airlines_airport_fk_fkey FOREIGN KEY (airport_fk)
      REFERENCES locations.airports (id)
      ON DELETE CASCADE
      ON UPDATE CASCADE
      DEFERRABLE INITIALLY DEFERRED,
   CONSTRAINT airports_airlines_airline_fk_fkey FOREIGN KEY (airline_fk)
      REFERENCES locations.airlines (id)
      ON DELETE CASCADE
      ON UPDATE CASCADE
      DEFERRABLE INITIALLY DEFERRED
 );

In plaats van PostgreSQL kunt u ook GeoPackage gebruiken. In dit geval kunnen de drie tabellen handmatig worden gemaakt met Database ► DB Manager…. In GeoPackage zijn geen schema’s, dus het voorvoegsel locations is niet nodig.

Voorwaarden voor secundaire sleutels in de tabel airports_airlines kunnen niet worden gemaakt met Tabel ► Tabel maken… of Tabel ► Tabel bewerken… dus zouden zij moeten worden gemaakt met Database ► SQL-venster…. GeoPackage ondersteunt geen argumenten ADD CONSTRAINT, dus de tabel airports_airlines zou in twee stappen moeten worden gemaakt:

  1. Maak de tabel met alleen het veld ID met Tabel ► Tabel maken…

  2. Met Database ► SQL-venster…, typ en voer deze code voor SQL uit:

    ALTER TABLE airports_airlines
       ADD COLUMN airport_fk INTEGER
       REFERENCES airports (id)
       ON DELETE CASCADE
       ON UPDATE CASCADE
       DEFERRABLE INITIALLY DEFERRED;
    
    ALTER TABLE airports_airlines
       ADD COLUMN airline_fk INTEGER
       REFERENCES airlines (id)
       ON DELETE CASCADE
       ON UPDATE CASCADE
       DEFERRABLE INITIALLY DEFERRED;
    

Dan, in QGIS, zou u twee een-tot-veel relaties moeten instellen zoals hierboven uitgelegd:

  • een relatie tussen de tabel airlines en de draaitabel;

  • en een tweede tussen de tabel airports en de draaitabel.

Een gemakkelijker manier om dit te doen (alleen voor PostgreSQL) is met Relaties ontdekken in Project ► Eigenschappen ► Relaties. QGIS zal automatisch alle relaties in uw database lezen en u hoeft alleen de twee te kiezen die u nodig hebt. Vergeet niet eerst de drie tabellen in het project van QGIS in te lezen.

../../../_images/relations6.png

Fig. 16.81 Relaties en automatisch ontdekken

In het geval u een airport of een airline wilt verwijderen, zal QGIS het/de geassocieerde record(s) in de tabel airports_airlines niet verwijderen. Deze taak zal door de database worden uitgevoerd als we de juiste voorwaarden specificeren bij het maken van de draaitabel, zoals in het huidige voorbeeld.

Notitie

N-M-relatie combineren met automatische transactie groep

U zou de modus voor transacties in moeten schakelen in Eigenschappen ► Databronnen ► bij het werken met een dergelijke context. QGIS zou in staat moeten zijn rij(en) in alle tabellen (airlines, airports en de draaitabel) toe te voegen en bij te werken.

Tenslotte moeten we de juiste kardinaliteit selecteren in Laageigenschappen ► Attributen formulier voor de lagen airports en airlines. Voor de eerste zouden we de optie airlines (id) kiezen en voor de tweede de optie airports (id).

../../../_images/relations7.png

Fig. 16.82 Kardinaliteit relatie instellen

Nu kunt u een airport aan een airline koppelen (of een airline aan een airport) met Kindobject toevoegen of Bestaand kindobject koppelen in de subformulieren. Een record zal automatisch worden ingevoegd in de tabel airports_airlines.

../../../_images/relations8.png

Fig. 16.83 N-M-relaties tussen airports en airlines

Notitie

Kardinaliteit Veel-tot één-relatie gebruiken

Soms is het verbergen van de draaitabel in een N-M-relatie niet gewenst. Voornamelijk omdat er attributen in de relatie kunnen staan die alleen waarden hebben als er een relatie is. Als uw tabellen lagen zijn (een veld geometrie hebben) zou het interessant kunnen zijn om de optie Op kaart identificeren (Laageigenschappen ► Formulier attributen ► Beschikbare widgets ► Velden) te activeren voor de velden met secundaire sleutels in de draaitabel.

Notitie

Primaire sleutel draaitabel

Vermijd het gebruiken van meerdere velden voor de primaire sleutel in een draaitabel. QGIS gaat uit van één enkele sleutel, dus een voorwaarde als constraint airports_airlines_pkey primary key (airport_fk, airline_fk) zal niet werken.

16.2.6.3. Polymorfische-relaties introduceren

Polymorfische relaties zijn een speciaal geval van 1-N-relaties, waar één enkele verwijzings- (document)laag de objecten bevat voor meerdere lagen waarnaar verwezen wordt. Dit verschilt van normale relaties die een verschillende verwijzingslaag vereisen voor elke laag waarnaar verwezen wordt. Één enkele verwijzings- (document)laag kan worden verkregen door een aanvullende kolom layer_field toe te voegen in de verwijzings- (document)laag die informatie opslaat om de laag waarnaar verwezen wordt te identificeren. In zijn meest eenvoudige vorm zal de verwijzings- (document)laag eenvoudigweg de laagnaam, van de laag waarnaar verwezen wordt, in dit veld invoegen.

Om meer precies te zijn, een polymorfische relatie is een set van normale relaties die dezelfde verwijzingslaag hebben, maar hebben de laag waarnaar verwezen wordt dynamisch gedefinieerd. De polymorfische instelling van de laag wordt opgelost door een expressie te gebruiken die overeen moet komen met enkele eigenschappen van de laag waarnaar verwezen wordt, zoals de naam van de tabel, laag-ID, laagnaam.

Stel u voor dat we naar het park gaan en foto’s willen nemen van verschillende soorten plants en animals die we daar zien. Elke plant of dier heeft meerdere foto’s aan zich verbonden, dus als we de normale 1:N-relaties zouden gebruiken om de foto’s op te slaan, zouden we twee afzonderlijke tabellen nodig hebben, animal_images en plant_images. Dit zou misschien geen probleem zijn voor 2 tabellen, maar stel u voor dat we afzonderlijke foto’s willen maken van paddenstoelen, vogels etc.

Polymorfische relaties lossen dit probleem op omdat alle objecten waarnaar verwezen wordt zijn opgeslagen in dezelfde tabel documents. Voor elk object wordt de laag waarnaar verwezen wordt opgeslagen in het veld referenced_layer en het verwezen object-ID in het veld referenced_fk.

Polymorfische-relaties definiëren

Eerst moeten we QGIS laten weten van de polymorfische relaties tussen de lagen. Dat wordt gedaan in Project ► Eigenschappen…. Open de tab Relaties en klik op de kleine pijl die naar beneden wijst naast de knop symbologyAdd Relatie toevoegen, zodat u de optie Polymorfische relatie toevoegen kunt selecteren in het nieuw verschenen keuzemenu.

../../../_images/relations9.png

Fig. 16.84 Toevoegen van een polymorfische relatie door een laag documents als verwijzing en animals en plants als lagen waarnaar verwezen wordt.

  • ID zal worden gebruikt voor interne doeleinden en moet uniek zijn. U zou mogelijk aangepaste formulieren moeten maken. Als u het leeg laat zal er een voor u worden gegenereerd maar u kunt er zelf een toewijzen om er een te krijgen die voor u eenvoudiger is.

  • Referentielaag (Kind), ook wel beschouwd als de kindlaag, is die met het veld voor de vreemde sleutel erop. In ons geval is dit de laag documents. Voor deze laag dient u een verwijzingsveld toe te voegen dat naar de andere laag verwijst, dus is dit referenced_fk.

    Notitie

    Soms heeft u meer dan één enkel veld nodig om objecten op een laag uniek te kunnen identificeren. Maken van een relatie met een dergelijke laag vereist een samengestelde sleutel, d.i. meer dan één enkel paar van overeenkomende velden. Gebruik de knop symbologyAdd Nieuw veldpaar toevoegen als deel van een samengestelde sleutel om net zoveel paren toe te voegen als nodig is.

  • Veld laag is het veld in de verwijzingstabel dat het resultaat van de expressie voor de geëvalueerde laag opslaat, wat de verwijzingstabel is waartoe dit object behoort. In ons voorbeeld zou dit het veld referenced_layer zijn.

  • Expressie veld laag evalueert naar een unieke identificatie van de laag. Dit mag zijn de laagnaam @layer_name, de laag-ID @layer_id, de naam van de tabel van de laag decode_uri(@layer, 'table') of elk ander ding dat een laag uniek kan identificeren.

  • Sterkte relatie stelt de sterkte in van de gemaakte relaties tussen de ouder- en kindlaag. Het standaard type Associatie betekent dat de ouderlaag eenvoudig is gekoppeld aan de kindlaag, terwijl het type Compositie u in staat stelt ook de kindobjecten te dupliceren bij het dupliceren van die van de ouderlaag en bij het verwijderen van een object ook de kinderen worden verwijderd, resulterend in trapsgewijze over alle niveaus (wat betekent dat kinderen van kinderen van… ook worden verwijderd).

  • Verwezen lagen ook wel beschouwd als ouderlagen, zijn die waar de primaire sleutel naartoe wijst, dus hier zouden dat de lagen plants en animals zijn. U moet de primaire sleutel definiëren van de verwezen lagen vanuit de keuzelijst, dus is het fid. Onthoud dat de definitie van een geldige primaire sleutel vereist dat alle verwezen lagen een veld hebben met die naam. Als er niet zo’n veld is, kunt u geen polymorfische relatie opslaan.

Eenmaal toegevoegd kan de polymorfische relatie worden bewerkt via het menu-item Polymorfische relatie bewerken.

../../../_images/relations10.png

Fig. 16.85 Voorbeeld van de nieuw gemaakte polymorfische relatie en zijn kind-relaties voor animals en plants.

Het voorbeeld hierboven gebruikt het volgende databaseschema:

CREATE SCHEMA park;

CREATE TABLE park.animals
(
   fid serial NOT NULL,
   geom geometry(Point, 4326) NOT NULL,
   animal_species text NOT NULL,
   CONSTRAINT animals_pkey PRIMARY KEY (fid)
);

CREATE INDEX animals_geom_idx ON park.animals USING gist (geom);

CREATE TABLE park.plants
(
   fid serial NOT NULL,
   geom geometry(Point, 4326) NOT NULL,
   plant_species text NOT NULL,
   CONSTRAINT plants_pkey PRIMARY KEY (fid)
);

CREATE INDEX plants_geom_idx ON park.plants USING gist (geom);

CREATE TABLE park.documents
(
   fid serial NOT NULL,
   referenced_layer text NOT NULL,
   referenced_fk integer NOT NULL,
   image_filename text NOT NULL,
   CONSTRAINT documents_pkey PRIMARY KEY (fid)
);

16.2.7. Een externe bron opslaan en ophalen

Een veld kan als doel een bron hebben die is opgeslagen op een extern opslagsysteem. Formulier attributen kunnen worden geconfigureerd zodat zij acteren als een cliënt voor een extern opslagsysteem om deze bronnen op te slaan en op te halen, op aanvraag van de gebruiker, direct vanuit de formulieren.

16.2.7.1. Een externe opslag configureren

Voor het instellen van een externe opslag, moet u het eerst configureren vanuit de vector eigenschappen Formulier attributen en de widget Bijlage selecteren.

../../../_images/external_storage_configuration.png

Fig. 16.86 Bewerken van een WebDAV externe opslag voor een bepaald veld

In de widget Bijlage moet u eerst het Type opslag selecteren:

  • Bestaand bestand selecteren: De doel-URL die al bestaat. Wanneer u een bron selecteert, wordt geen bewerking voor opslaan uitgevoerd, het attribuut wordt eenvoudigweg bijgewerkt met de URL.

  • Eenvoudig kopiëren: Slaat een kopie van de bron op een bestemming op een bestandsschijf op (wat een lokaal of een gedeeld netwerk-systeem zou kunnen zijn) en het attribuut wordt bijgewerkt met het te kopiëren pad.

  • WebDAV-opslag: De bron wordt gepusht naar een HTTP-server die het protocol WebDAV ondersteunt en het attribuut wordt bijgewerkt met de URL daarvan. Nextcloud, Pydio of andere software voor het hosten van bestanden ondersteunen dit protocol.

Dan moet u de parameter URL opslaan instellen, die de te gebruiken URL verschaft als een nieuwe bron moet worden opgeslagen. Het is mogelijk om een expressie in te stellen met de widget Data-bepaalde override om specifieke waarden te krijgen, overeenkomstig attributen van de objecten.

De variabele @selected_file_path zou in die expressie kunnen worden gebruikt en het absolute bestandspad weergeven van het door de gebruiker geselecteerde bestand (met bestandsselectie of slepen-en-neerzetten).

Notitie

Bij het gebruiken van de WebDAV externe opslag, als de URL eindigt op een “/”, wordt het beschouwd als een map en zal de geselecteerde bestandsnaam worden toegevoegd om de uiteindelijke URL te verkrijgen.

Als het externe opslagsysteem dat nodig heeft, is het mogelijk een authenticatie te configureren.

16.2.7.2. Een externe opslag gebruiken

Eenmaal geconfigureerd kunt u een lokaal bestand selecteren met de knop bij het bewerken van een attribuut van een object. Afhankelijk van het geconfigureerde type opslag, zal het bestand worden opgeslagen op het externe opslagsysteem (behalve wanneer Bestaand bestand selecteren werd geselecteerd) en het veld zal worden bijgewerkt met de nieuwe URL van de bron.

../../../_images/external_storage_store.png

Fig. 16.87 Een bestand opslaan op een WebDAV externe opslag

Notitie

De gebruiker kan hetzelfde resultaat ook bereiken als hij een bestand sleept en neerzet in de widget Bijlage.

Gebruik de knop taskCancel Annuleren om het proces van opslaan af te breken. Het is mogelijk om een viewer te configureren met een Geïntegreerde documentviewer zodat de bron automatisch zal worden opgehaald vanaf het externe opslagsysteem en wordt weergegeven direct onder de URL. Het bovenstaande pictogram warning geeft aan dat de bron niet kan worden opgehaald van het externe opslagsysteem. In dat geval zouden meer details kunnen verschijnen in het Paneel Logboekmeldingen.