Autonummering van een veld in QGIS

Autonummering om veld een uniek nummer te geven, is iets heel gewoon in databases zoals bijvoorbeeld PostgreSQL met een Serial veldtype, maar ook voor andere databronnen kan dit heel handig zijn. Hieronder geef ik een voorbeeld van hoe je dat in QGIS kan doen. Dit is een manier van autonummering in QGIS die voor alle soorten vectorkaartlagen bruikbaar is, dus ook voor bijvoorbeeld shapefiles.

Dit voorbeeld is opgesplitst in twee delen. In het eerste deel wordt uitgelegd hoe je een uniek nummer kan toevoegen aan al bestaande features. In het tweede deel van dit voorbeeld staat uitgelegd hoe je een autonummering toevoegt aan nieuwe features.

Een uniek nummer toevoegen aan bestaande features

Als je een kaartlaag hebt met daarin al bestaande features (punten, lijnen of vlakken), is de eerste stap die we moeten doen een veld toevoegen met daarin een uniek nummer voor die al bestaande features.

Dit gaan we doen met behulp van de Field Calculator (Veldberekening).

  • Als je de Field Calculator geopend hebt voor je kaartlaag, vink je eerst aan dat je een nieuw veld wil aanmaken (Create a new field). 
  • Daarna geef je het nieuwe veld een naam. Voor dit voorbeeld geven we dat de naam “nummering”.
  • Zorg ervoor dat het type veld (Output field type) op integer staat. 
  • Daarna zet je in het Expression vak @row_number.
  • Klik op OK

Een autonummering toevoegen voor nieuwe features

In dit deel zullen we een automatisch een uniek nummer toevoegen als er een feature wordt toegevoegd aan een kaartlaag.  Voor dit deel van het voorbeeld gaan we er van uit dat de kaartlaag een veld van het type integer bevat waarin we de unieke nummers willen zetten.  Dit kan door uit te voeren wat er in het eerste deel van dit voorbeeld staat of door zelf een extra veld van het type integer toe te voegen aan je kaartlaag.  Voor dit voorbeeld gaan we er van uit dat het veld voor de unieke waarden “nummering” heet.

  • Open de Properties (Eigenschappen) van je kaartlaag en ga daar naar het tabblad Attributes Form (Formulier attributen).
  • Selecteer bij de Available Widgets (Beschikbare widgets) het veld waaraan je de autonummering wil toevoegen. In dit voorbeeld is dat “nummering”.
  • Vink het vakje Editable onder General (Aanpasbaar onder Algemeen) uit.
  • Zet in het vakje Default value (Standaardwaarde): maximum(“nummering”)+1. (Een verbeterde formule kan onderaan dit artikel gevonden worden). Hierbij is “nummering” de naam van het veld waarvoor we de autonummering willen instellen.
  • Klik op OK

Wat we hiermee doen, is dat we kijken wat tot nu toe de maximumwaarde is in het veld “nummering” en voor de nieuwe feature geven we dat veld een waarde dat 1 hoger is dan dat maximum.

Als je nu nieuwe features toevoegt, krijgen die automatisch een uniek nummer in het veld “nummering”.

BELANGRIJK: Dit trucje werkt alleen maar als je manueel intekent. Als je bijvoorbeeld features toevoegt via Copy-Paste, dan zal het veld nummering leeg zijn.

EDIT (22 februari 2021): Een betere formule die ook gebruikt kan worden voor nieuwe kaartlagen zonder items in is:

if(count(@layer_id)=0,1,maximum(“nummering”)+1)

Dit zal 1 als standaardwaarde gebruiken indien er nog geen items zitten.

Het is ook belangrijk om het vakje “Apply default value on update” (“Standaard waarde toepassen bij bijwerken”) aan te vinken.

2 antwoorden op “Autonummering van een veld in QGIS”

  1. Bij het volgen van de handleiding “Een uniek nummer toevoegen aan bestaande features” krijg ik een foutmelding “Het toeveogen van een nieuw veld aan de provider is mislukt”

    Wat nu?

    1. @Wilhelm
      Van hieruit is het natuurlijk moeilijk om in te schatten wat het probleem juist is, maar dat betekent waarschijnlijk dat je onvoldoende rechten hebt om een veld toe te voegen aan die kaartlaag. Dus als het een bestand is, is die misschien schrijfbeveiligd of al open in een ander programma. Als het een databank is, heb je niet de juiste rechten om een veld toe te voegen.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.