In deze blog laat ik zien hoe je het probleem van verdwenen stijlen na hernoemen/verplaatsen van de SpatiaLite database kunt oplossen in QGIS.
Opslaan van stijlen in SpatiaLite
Sinds QGIS 2.4 kun je voor elke tabel met geometrische gegevens in SpatiaLite ook de stijlen mee opslaan. Dit kon al eerder in PostGIS. Dat werkt fantastisch zolang je de database maar niet verplaatst of hernoemd. Er ontstaat een probleem met die stijlen wanneer de SpatiaLite database wordt hernoemd of op een andere plaats wordt opgeslagen. De mee opgeslagen stijlen worden dan niet meer toegepast op de vanuit SpatiaLite ingelezen kaartlagen.
Als voorbeeld gebruiken we de voorbeeld spatialite database zwartsluis.sqlite. De SpatiaLite database zwartsluis.sqlite is gemaakt m.b.v. de QGIS plugin Basis NL waarna de gegevens die niet binnen de woonplaats Zwartsluis vallen zijn verwijderd. Dit bestand, 8 MB groot, kan gedownload worden via volgende link: http://qgis.nl/zwartsluis.zip
In dit voorbeeld heb ik na de download, het bestand Zwartsluis.sqlite in de folder C:\geodata\bag\ geplaatst!
- Open in QGIS via het menu Kaartlagen >> Laag toevoegen >> SpatiaLite laag toevoegen, het dialoogvenster waarmee je de SpatiaLite database Zwartsluis.sqlite kunt openen.
- Gebruik de knop [Nieuw] om een nieuwe verbinding te maken voor zwartsluis.sqlite. Aan de lijst van verbindingen wordt de verbinding naar Zwartsluit.sqlite toegevoegd, selecteer deze en druk nu op [Verbinden].
In eerste instantie wordt in de dialoog alleen tabellen met geometrie getoond. - Vink nu eerst de optie Dialoogvenster openhouden aan.
Selecteer nu de 5 tabellen en laad deze met de knop [Toevoegen].
We zien dat er willekeurige stijlen zijn toegekend aan de nieuwe lagen. Dit zijn niet de stijlen die bij de tabellen mee op zijn geslagen. Ook wordt op deze schaal alles getekend! Stel dat deze database nu de BAG van heel Nederland zou bevatten dan zou deze nu meer dan 20 miljoen objecten proberen te tekenen. Het is in zo’n geval ook zeker verstandig om voor het bijladen het aanvinkvakje (Her)teken (rechts onderin QGIS) even te ontvinken.
- In de dialoog SpatiaLite Tabel(len) toevoegen vink je nu de optie Ook tabellen zonder geometrie aan. Nu worden er veel meer tabellen getoond, zoek de tabel layer_styles, selecteer deze en laad deze met de knop [Toevoegen].
In de legenda met lagen is layer_styles nu toegevoegd, we gaan nu deze tabel aanpassen zodat de stijlen wel goed worden toegepast. Wanneer we de inhoud van de tabel bekijken, zien we dat in het veld f_table_catalog de database naar een andere plaats verwijst dan waar deze nu staat. We gaan dit corrigeren met Veld berekening. Met Veld berekening kun je nieuwe velden toevoegen, maar ook de inhoud van bestaande velden bewerken!
- Selecteer de laag layer_styles en kies via de rechtermuisknop in het snelmenu Open attributentabel.
- Vervolgens selecteren we in Attributen tabel linksboven in de knoppenbalk het gele potlood (=Bewerken aan/uitzetten), waarmee ook de knop met het telraam (= Open Veldberekening) wordt geactiveerd.
- Selecteer nu de knop met de afbeelding van het telraam, daarmee openen we de dialoog Veld berekening.
- Vink nu het aanvinkvak Bestaande velden vernieuwen aan.
Selecteer in de keuzelijst eronder het veld f_table_catalog. - Plaats in het tekstvak de bestandsnaam van de SpatiaLite database, met volledig pad, en zet vervolgens om de tekst apostrophs (geen aanhalingstekens). Gebruik als scheidingsteken in de padnaam niet het de “backslash” = ‘\’ die met name word gebruikt op het Windows OS maar “forward slash” = ‘/’. Controleer of bij uitvoer voorvertoning (onder het tekstvak) de goede nieuwe inhoud voor het veld wordt weergegeven. Druk vervolgens op [OK].
Je ziet in Attributen tabel dat de verwijzing naar de SpatiaLite tabel nu wel klopt!
- Druk nu wederom op de knop met het symbool van het gele potlood, linksboven in de dialoog van Attributen tabel en bevestig de vraag dat de wijzigingen moeten worden opgeslagen.
- Hierna kies je voor een nieuw project (huidig project niet opslaan) en laad je nogmaals de lagen van de SpatiaLite tabel zoals eerder aangegeven.
Nu zijn de goede stijlen wel toegepast! Wanneer je via de PDOK plugin de ‘BRT achtergrondkaart‘ toevoegt en inzoomt op de haven van Zwartsluis krijg je het volgende te zien:
Over Spatialite
SpatiaLite is een relationele database die bestaat uit 1 bestand met de mogelijkheid om er spatiale tabellen in op te slaan. SpatiaLite is gebaseerd op SQLite, de meest gebruikte relationele database ter wereld (o.a. op smartphones).
Voor meer info over SpatiaLite en evt. downloads zie http://www.gaia-gis.it/gaia-sins. Het cookbook van SpatiaLite bevat vele recepten die smaken naar meer!
SpatiaLite heeft een aantal voordelen t.o.v. PostGis, je hoeft niet eerst een PostGis server te installeren en te beheren. SpatiaLite is een snelle database en je kunt er prima met meerdere gebruikers tegelijkertijd in lezen. Doordat alle data in een bestand zit kun je deze gemakkelijk naar iemand opsturen en deze kan de SpatiaLite database openen in QGIS en direkt gebruiken.
PostGIS is in de volgende gevallen een betere keuze:
- Meerdere schrijvers of veel lezers
- Gecontroleerde toegang (authenticatie)
- Meer en betere tools voor spatiale bewerkingen
- Veel betere Query optimizer
Wanneer je veel werkt met spatiale queries in de database zelf, kun je dit beter in PostGIS dan in SpatiaLite doen.
Ook ESRI ondersteunt sinds versie 10.2 het gebruik van SpatiaLite. Maar om echt met de data te werken, moet je dan wel de gegevens vanuit SpatiaLite importeren in een geodatabase. Helaas!
Sinds QGIS 2.12 worden de gegevens waarmee je toegang krijgt tot de PostGIS database versleuteld opgeslagen. In eerdere versies van QGIS werden in de registry of elders de gebruikersnaam en wachtwoord goed leesbaar opgeslagen en was de toegang via QGIS tot de PostGIS database niet goed beveiligd.
Diethard Jansen (GIS-hulp)
Leave a comment