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 opgezocht, geselecteerd, verplaatst of zelfs bewerkt worden.

Voorwoord: Ruimtelijke en niet ruimtelijke tabellen

QGIS staat u toe om ruimtelijke en niet ruimtelijke lagen te laden. Dit betreffen momenteel door OGR ondersteunde tabellen, tekengescheiden tekst en de providers PostgreSQL, MSSQL SpatiaLite, DB2 en Oracle. Alle lagen worden vermeld in het paneel Lagen. Of de laag waarmee u werkt ruimtelijk is ingesteld of niet bepaalt of u daarmee kunt werken in het kaartvenster.

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 het widget voor bewerken in Eigenschappen Formulier attributen wat nader voor meer informatie.

Introductie van de interface van de Attributentabel

Activeer, om de attributentabel voor een vectorlaag te openen, de laag door deze te selecteren in de 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

Attributentabel voor de laag regions

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

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

Ctrl+S

draw

De tabel opnieuw laden

newTableRow

Object toevoegen

Object zonder geometrie toevoegen

deleteSelected

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

Selecteer objecten 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

deselectAll

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

Ctrl+L

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

Tabel Attribuut 1: Beschikbare gereedschappen

Notitie

Afhankelijk van de indeling van de gegevens en de bibliotheek van OGR 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).

Tabelweergave vs Formulierweergave

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

  • de openTable Tabelweergave, die waarden van verscheidene objecten in een tabulaire vorm weergeeft, elke rij staat voor een object en elke kolom voor een veld.

  • En de formView Formulierweergave die identificaties van objecten in een eerste paneel weergeeft en alleen de attributen van de aangeklikte identificatie in het tweede paneel laat zien. Formulierweergave gebruikt de configuratie van de velden van de laag (zie Eigenschappen Formulier attributen).

U kunt van de ene naar de andere modus schakelen door te klikken op het corresponderende pictogram aan de rechter onderzijde 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’.

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

Attributentabel in formulierweergave (boven) vs tabelweergave (onder)

De kolommen configureren

Klik met rechts, in tabelweergave, op een kolomkop om toegang te krijgen tot gereedschappen die u helpen te configureren wat kan worden weergegeven in de attributentabel en hoe.

Kolommen verbergen en beheren en acties inschakelen

Door met rechts te klikken op een kolomkop kunt u er voor kiezen om die te verbergen in de attributentabel. In één keer het gedrag van verscheidene kolommen wijzigen, het verbergen van een kolom opheffen of de volgorde van de kolommen wijzigen, kies Kolommen beheren…. In het nieuwe dialoogvenster kunt u:

  • kolommen selecteren/deselecteren die u wilt weergeven of verbergen

  • 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 inschakelen die in elke rij een keuze- of knoppenlijst weergeeft met acties voor elke rij, zie Acties voor meer informatie over acties.

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 het widget de huidige waarde weergegeven

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

Het kan ook worden gewijzigd door met de grens aan de rechterzijde van de kolomkop te slepen. De nieuwe grootte van de kolom wordt behouden voor de laag, en herstelt zich bij het opnieuw openen van de attributentabel.

Kolommen sorteren

De tabel kan gesorteerd worden op elke kolom, door een kolomkop te selecteren. Een kleine pijl wijst de sorteervolgorde aan (een pijltje omhoog betekent, de waarden zijn oplopend gesorteerd van boven naar beneden, pijltje omlaag betekent, de waarden zijn aflopend gesorteerd van boven naar beneden). U kunt er ook voor kiezen de rijen te sorteren met de optie Sorteren in het contextmenu van de kolomkop en een expressie te schrijven, bijv. om de rij 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.

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 rechter bovenkant 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

Voorwaardelijke opmaak van een attributentabel

Werken met objecten in een attributentabel

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 linker paneel 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 linker paneel 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…

  • deselectAll Objecten uit alle lagen deselecteren

  • selectAll Alle objecten selecteren

  • invertSelection Selectie van objecten omdraaien

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

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 linker onderzijde van het dialoogvenster Attributentabel. Deze lijst biedt de volgende filters:

  • Alle objecten tonen

  • Geselecteerde objecten weergeven

  • Op kaart zichtbare objecten tonen

  • Gewijzigde en nieuwe objecten tonen

  • Veldfilter - stelt de gebruiker in staat te filteren, gebaseerd op de waarde van een veld: kies een kolom uit de lijst, typ een waarde en druk op Enter om te filteren. Daarna zullen alleen de overeenkomende objecten worden weergegeven in de attributentabel.

  • 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.

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.

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

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 linker onderzijde, of maak de expressie leeg en klik op Apply of druk op Enter..

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

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.

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 Referentie Systeem (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 OGR op te geven in het dialoogvenster.

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.

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 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 figure_field_calculator). 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

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 nu op de $length in de groep Geometrie om de lengte van de geometrie toe te voegen aan het vak voor de expressie van de Veldberekening.

  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.

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 bereken 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 alleen als virtueel worden ingesteld bij het maken ervan en de gebruikte expressie kan later niet worden gewijzigd: u zult het veld moeten verwijderen en dat veld opnieuw aan moeten maken.

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

De werkbalk Snelle veldberekening

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 model 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 het 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

    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 linker paneel.

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.

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.

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

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 shape- en csv-bestanden) en alles wat u hoeft te doen is QGIS de relaties tussen uw tabellen te vertellen.

1-N-relaties definiëren (Relatiebeheer)

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 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 Vliegvelden noemen.

  • Referentielaag (Parent), ook wel beschouwd als de ouderlaag, is die waarnaar de primaire sleutel verwijst, dus hier is het de laag regions

  • Referentieveld is de primaire sleutel van de laag waarnaar verwezen wordt, dus dit is ID

  • Referentielaag (Child) , ook wel beschouwd als de kindlaag, is die met het veld voor de secundaire sleutel erin. In ons geval is dat de laag airports

  • Referentieveld wil zeggen welk veld naar de andere laag verwijst dus dat is in dit geval fk_region

  • 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 van de relatie in tussen de ouder- en de kindlaag. Het standaard type Associatie betekent dat de ouderlaag simpelweg is gekoppeld aan de kindlaag, terwijl het type Compositie u in staat stelt ook de kindobjecten te dupliceren wanneer u die van de ouderlaag dupliceert.

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

Relatiebeheer

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 standaard methode 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

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.

  • De knop newTableRow zal een nieuw record aan de attributentabel van de laag airports toevoegen. En het zal standaard het nieuwe vliegveld toevoegen aan de huidige regio.

  • De knop duplicateFeature stelt u in staat één of meer kindobjecten te kopiëren.

  • De knop deleteSelected zal het geselecteerde vliegveld permanent verwijderen.

  • Het symbool link zal een nieuw dialoogvenster openen waar u een bestaand vliegveld kunt selecteren dat dan zal worden toegevoegd aan de huidige regio. Dit kan handig zijn als u per ongeluk eerder het vliegveld in de verkeerde regio maakte.

  • Het symbool unlink zal het geselecteerde vliegveld loskoppelen van de huidige regio en het daarna als niet toegewezen beschouwen (de secundaire sleutel wordt op NULL gezet).

  • 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 tabelweergave en de formulierweergave waarbij de laatste u de vliegvelden laat zien in hun respectievelijke formulier.

In het bovenstaande voorbeeld heeft de referentielaag 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 op met de tabel Airports is het 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

Dialoogvenster Identificatieresultaten Airports met relatie naar Regions

Het 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 naar de modus Bewerken van de laag Airports, heeft het veld fk_region ook een functie Automatisch invullen: tijdens het typen ziet u alle waarden van het veld ID van de laag Regions.

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,m 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 enkele velden gebruikt voor helderheid. 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 met Database ‣ DB Manager…. In GeoPackage zijn geen schema’s, dus het voorvoegsel locations is niet nodig.

Voorwaarden voor vreemde 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…, type 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:ref:een-tot-veel relaties <one_to_many_relation> moeten instellen zoals hierboven uitgelegd:

  • een relatie tussen de tabel airlines en de draaitabel;

  • en een tweede tussen de tabel airlports 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

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 de Laageigenschappen ‣ Formulier attributen 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

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

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) voor de velden met vreemde 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.