Belangrijk
Vertalen is een inspanning van de gemeenschap waaraan u deel kunt nemen. Deze pagina is momenteel voor 99.49% vertaald.
12.4. Gegevens tussen lagen verbinden en bewerken
De mogelijkheid om gegevens tussen lagen te verbinden is een van de plichten van GIS-software. Een dergelijke verbinding kan zijn gebaseerd op de ruimtelijke relatie tussen de objecten, of op hun gedeelde attributen. QGIS verschaft gereedschappen om deze associaties af te handelen, zoals:
Algoritmes voor Processing die een nieuwe laag kunnen maken als resultaat van de verbinding, met name Koppel attributen op basis van plaats, Koppel attributen op dichtstbijzijnde, Attributen koppelen op veldwaarde, …
SQL-query’s om een nieuwe laag te maken uit Databronnen beheren of als een virtuele laag
Eigenschappen voor koppelingen od instellingen voor relaties die tijdelijk attributen of objecten in een laag uitbreiden met die van objecten in een andere laag, gebaseerd op enige overeenkomend(e) attribu(u)t(en).
Koppelingen en relaties zijn technische concepten die zijn geleend van databases om het meeste te halen uit de gegevens die zijn opgeslagen in tabellen, door hun inhoud te combineren. Het idee is dat objecten (rijen) van verschillende lagen (tabellen) met elkaar kan worden gekoppeld. Het aantal rijen dat overeenkomt met elkaar kan elke waarde zijn (nul, een, veel).
12.4.1. Objecten koppelen tussen twee lagen
Koppelingen in QGIS maken het voor u mogelijk om objecten van de huidige laag te koppelen aan objecten van een andere geladen vectorlaag. Of zij ruimtelijk ingeschakeld zijn of het type geometrie maakt niet uit. De koppeling is gebaseerd op een attribuut dat is gedeeld door de lagen, in een relatie een-tot-een.
Een koppeling maken met een laag (hieronder geïdentificeerd als doellaag):
Klik op de knop
Nieuwe koppeling maken. Het dialoogvenster Vectorkoppeling toevoegen verschijnt.Selecteer de Koppellaag waarmee u de doelvectorlaag wilt verbinden
Specificeer het Koppelveld (uit de
koppellaag) en het Doelveld (uit dedoellaag). Dat zijn de velden die worden gebruikt om overeenkomende objecten te vinden in beide lagen, als zij gemeenschappelijke waarden hebben.Druk op OK en een overzicht van de geselecteerde parameters wordt toegevoegd aan het paneel Koppelingen.
Fig. 12.109 Een attributentabel koppelen aan een bestaande vectorlaag
De stappen hierboven zullen een koppeling maken waar ALLE attributen, van het eerste overeenkomende object in de koppellaag, worden toegevoegd aan het object van de doellaag. De volgende logica wordt gebruikt om objecten te paren, gedurende een proces van koppelen:
Alle objecten in de doellaag worden teruggegeven, ongeacht of zij een overeenkomst hebben
Als het doelveld duplicaat-waarden bevat, worden deze objecten toegewezen aan hetzelfde object uit de koppellaag.
Als het koppelveld dubbele overeenkomende waarden bevat, wordt alleen het eerst opgehaalde object gekozen.
Notitie
Koppelingen in QGIS zijn gebaseerd op een enkel veld dat overeenkomt, dus de meeste keren zou u er voor moeten zorgen dat waarden in het overeen te komen veld uniek zijn.
QGIS verschaft nog wat meer opties om de koppeling aan te passen:
Koppellaag in virtueel geheugen ‘cachen’: stelt u in staat waarden in het geheugen te cachen (zonder geometrieën) uit de gekoppelde laag om opzoekacties te versnellen.
Index voor attributen aanmaken op het koppelveld om opzoeken sneller te maken
Dynamisch formulier: helpt om de koppelvelden direct te synchroniseren, overeenkomstig het Doelveld. Op deze manier worden ook beperkingen voor de koppelvelden ook correct bijgewerkt. Onthoud dat het standaard is uitgeschakeld, omdat het heel tijdrovend kan zijn als u heel veel objecten hebt of ontelbare koppelingen.Als de doellaag bewerkbaar is, dan zullen enkele pictogrammen worden weergegeven in de attributentabel naast velden, om te informeren over hun status:
: de koppellaag is niet geconfigureerd om te worden bewerkt. Als u in staat wilt zijn om gekoppelde objecten uit de attributentabel van het doel te bewerken, dan moet u de optie
Bewerkbare samengevoegde laag selecteren.
: de koppellaag is wel geconfigureerd om te worden bewerkt, maar de huidige status is Alleen-lezen.
: de koppellaag is te bewerken, maar de mechanismen voor synchroniseren zijn niet geactiveerd. Als u automatisch een object wilt toevoegen in de koppellaag als een object in de doellaag wordt gemaakt, dan moet u de optie
Bijwerken bij bewerken selecteren. Symmetrisch, de optie
Stapel verwijderen moet worden geactiveerd als u automatisch gekoppelde objecten wilt verwijderen.
Gekoppelde velden: in plaats van het toevoegen van alle velden uit de gekoppelde laag, kunt u een subset specificeren.
Voorvoegsel voor naam aangepast veld voor gekoppelde velden, om botsingen tussen namen van velden te vermijden
12.4.2. Relaties instellen tussen twee lagen
Anders dan koppelingen die een koppeling een-tot-een definiëren tussen objecten van twee lagen, helpen relaties u verbindingen te maken tussen meerdere objecten van twee of meer lagen. Als zodanig zijn relaties instellingen op het niveau van het project en worden ingesteld in tab
Relaties. Daar kunt u:
Relatie toevoegen waarvan het type kan zijn:polymorfische relatie die u kunt toevoegen of bewerken met de toegewezen gereedschappen in het keuzemenu voor de actie.
Notitie
Er is nog geen eenvoudige manier om een niet-polymorfische relatie te bewerken als die eenmaal is gemaakt. Alleen de naam kan worden bewerkt met een dubbelklik. Voor elke andere parameter van een dergelijke relatie zult u die moeten verwijderen en opnieuw maken.
Relaties ontdekken: QGIS is in staat om bestaande relaties te ontdekken uit ondersteunde indelingen voor databases (PostgreSQL, GeoPackage, ESRI File Geodatabase, …). Dit kan een goede manier zijn om het definiëren van relaties te makkelijker te maken.
Fig. 12.110 Tab Relaties
12.4.2.1. Relaties een-tot-veel (1-N)
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 in de meeste regio’s meerdere vliegvelden liggen.
Fig. 12.111 Regio Alaska met vliegvelden
Lagen en sleutels
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 relatie 1-n te demonstreren, de lagen regions en airports laden uit de voorbeeld gegevensset. In de praktijk behoort elk vliegveld tot precies één regio, terwijl elke regio een onbepaald aantal vliegvelden kan hebben (een typische een tot veel-relatie).
In aanvulling op de attributen die de vliegvelden beschrijven, heeft de laag aiports een ander veld fk_region, dat optreedt als een secundaire sleutel (als u een database hebt wilt u waarschijnlijk daar een beperking voor maken). Dit veld fk_region zal altijd een ID van een region bevatten. Het kan worden gezien als een verwijzing naar de region waartoe het behoort.
Alles wat u hoeft te doen is QGIS de relatie te vertellen tussen de lagen zodat u een aangepast formulier voor bewerken kunt maken en QGIS zorgt dan voor de instelling. Het werkt met verschillende providers (dus u kunt het ook gebruiken met Shapefiles en CSV-bestanden).
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 . 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 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 hetID.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 ditfk_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
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).
Fig. 12.112 Toevoegen van een relatie tussen de lagen regions en airports
Op de tab Relaties kunt u ook drukken op de knop
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.
Fig. 12.113 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
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
is voor het opslaan van alle bewerkingen in de kindlaag (airport).De knop
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
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
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
verwijdert het/de geselecteerde vliegveld(en) permanent.Het symbool
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
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
kunt u op de kaart inzoomen op de geselecteerde kindobjecten.De twee knoppen
en
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.
Fig. 12.114 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:
Selecteer het record dat eerder werd toegevoegd in het objectformulier van de verwijzingslaag.
Gebruik het gereedschap voor digitaliseren
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
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.
Fig. 12.115 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 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.
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
als u kiest voor de knop Toevoegen nieuwe objecten toestaan in het menu 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. 12.116 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.
Fig. 12.116 Ouderobjecten selecteren met waarden van hun kind
12.4.2.2. 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, genaamd locations. U kunt de code uitvoeren met 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 de duidelijkheid 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 . 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 of dus zouden zij moeten worden gemaakt met . GeoPackage ondersteunt geen argumenten ADD CONSTRAINT, dus de tabel airports_airlines zou in twee stappen moeten worden gemaakt:
Maak de tabel met alleen het veld
IDmetMet , 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
airlinesen de draaitabel;en een tweede tussen de tabel
airportsen de draaitabel.
Een gemakkelijker manier om dit te doen (alleen voor PostgreSQL) is met Relaties ontdekken in . 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.
Fig. 12.117 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 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 voor de lagen airports en airlines. Voor de eerste zouden we de optie airlines (id) kiezen en voor de tweede de optie airports (id).
Fig. 12.118 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.
Fig. 12.119 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 een veld geometrie hebben, zou het interessant kunnen zijn om de optie Op kaart identificeren () 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.
12.4.2.3. Polymorfische relaties
Het doel
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_id.
Polymorfische-relaties definiëren
Eerst moeten we QGIS laten weten van de polymorfische relaties tussen de lagen. Dat wordt gedaan in . Open de tab Relaties en klik op de kleine pijl die naar beneden wijst naast de knop
Relatie toevoegen, zodat u de optie Polymorfische relatie toevoegen kunt selecteren in het nieuw verschenen keuzemenu.
Fig. 12.120 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 ditreferenced_id.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
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_layerzijn.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 laagdecode_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
plantsenanimalszijn. U moet de primaire sleutel definiëren van de verwezen lagen vanuit de keuzelijst, dus is hetfid. 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.
Fig. 12.121 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_id integer NOT NULL,
image_filename text NOT NULL,
CONSTRAINT documents_pkey PRIMARY KEY (fid)
);
Als eenmaal relaties zijn gemaakt, zal het paneel voor resultaten van Objecten identificeren de gerelateerde objecten weergeven, wat u in staat stelt de gerelateerde gegevens direct te bekijken.
12.4.2.4. In gegevensset opgeslagen relaties
Anders dan de hierboven vermelde relaties, die worden gemaakt in de projecteigenschappen en alleen van toepassing zijn in het actieve project, kan QGIS ook relaties op het niveau van databases lezen, d.i. verbindingen die zijn gedefinieerd tussen lagen in de gegevensset. Dit wordt ondersteund voor databaseproviders zoals PostgreSQL, SpatiaLite, GeoPackage, ESRI FileGeodatabase. Wanneer dergelijke ouder- en kindlagen in een project worden geladen, kan QGIS automatisch de instellingen voor de relaties detecteren en op de juiste wijze de tab vullen. Dit kan ook worden geactiveerd met de knop
Relaties ontdekken.
Voor sommige gegevenstypen (bijv. GeoPackage, SpatiaLite of ESRI FileGeodatabase) maakt QGIS het ook mogelijk om de relaties tussen de tabellen in de database te maken en te bewerken. Dat kan worden beheerd via het paneel Browser. Vanuit het paneel Browser, klik met rechts op het item van de database, selecteer Nieuwe relatie… en vul in het nieuwe dialoogvenster de volgende opties in:
Naam: stel de naam in voor de nieuwe relatie.
Kardinaliteit: definieer de kardinaliteit voor de relatie.
Sterkte: specificeer de sterkte voor de relatie.
Onder de groep Tabellen, stel uw tabellen voor Ouder en Kind in.
Onder de groep Velden, stel uw Ouder-veld en Kind-veld in.
In het gedeelte Geavanceerd kunt u, afhankelijk van het type database, instellen:
Gerelateerde type tabel:
features: voor standaard tabellen met objecten.
media: voor tabellen die mediabestanden hebben opgeslagen.
simple_attributes: voor tabellen met gegevens van eenvoudige attributen.
attributes: voor tabellen van gegevens met complexe attributen.
tiles: voor tabellen die gegevens van tegels opslaan.
Label Voorwaarts: een naam om de relatie uniek te kunnen identificeren bij het navigeren van de oudertabel naar de kindtabel.
Label Omdraaien: een naam om de relatie uniek te kunnen identificeren bij het navigeren van de kindtabel naar de oudertabel.
Toepassen van het dialoogvenster zal een knoop Relaties toevoegen onder het item van de database, met de nieuwe relatie als kind-item.
Bewerken of verwijderen van bestaande relaties kan worden gedaan door met rechts te klikken op de relatie in het paneel Browser.
Fig. 12.122 Beheren van in gegevensset opgeslagen relaties in het paneel Browser
12.4.3. 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.
12.4.3.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.
Fig. 12.123 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.
AWS S3: De bron wordt gepusht naar een server die het protocol AWS Simple Storage Service ondersteunt en het attribuut wordt bijgewerkt met de URL daarvan. Amazon Web Service en MinIO 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 of AWS S3 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.
Notitie
U moet, om de AWS S3 externe opslag te kunnen gebruiken, een type AWS S3 voor authenticatie gebruiken.
12.4.3.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.
Fig. 12.124 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
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
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.

