De codesnippers op deze pagina hebben de volgende import nodig als u buiten de console van PyQGIS bent:
1 2 3 4 5 6 7 8 | from qgis.core import (
QgsProject,
QgsPathResolver
)
from qgis.gui import (
QgsLayerTreeMapCanvasBridge,
)
|
2. Projecten laden¶
Soms moet u een bestaand project uit een plug-in laden of (nog vaker) bij het ontwikkelen van een zelfstandige toepassing in Python voor QGIS (zie: Toepassingen in Python).
U dient een instance te maken van de klasse QgsProject
om een project in de huiidge toepassing QGIS te laden . Dit is een klasse singleton, dus u moet eerst de methode instance()
ervan gebruiken om dat te doen. U kunt de methode read()
ervan aanroepen, waarin het pad van het te laden project wordt doorgegeven:
1 2 3 4 5 6 7 8 9 10 11 | # If you are not inside a QGIS console you first need to import
# qgis and PyQt classes you will use in this script as shown below:
from qgis.core import QgsProject
# Get the project instance
project = QgsProject.instance()
# Print the current project file name (might be empty in case no projects have been loaded)
# print(project.fileName())
# Load another project
project.read('testdata/01_project.qgs')
print(project.fileName())
|
testdata/01_project.qgs
Als u aanpassingen moet maken aan het project (bijvoorbeeld enige lagen toevoegen of verwijderen) en uw wijzigingen opslaan, roep de methode write()
van uw instance voor het project aan. De methode write()
accepteert ook een optioneel pad voor het opslaan van het project op een nieuwe locatie:
# Save the project to the same
project.write()
# ... or to a new file
project.write('testdata/my_new_qgis_project.qgs')
Beide functies read()
en write()
geven een Booleaanse waarde terug die u kunt gebruiken om te controleren of de bewerking succesvol was.
Notitie
U dient, als u een zelfstandige toepassing voor QGIS schrijft, een klasse QgsLayerTreeMapCanvasBridge
te instantiëren zoals in het voorbeeld hieronder om het geladen project te synchroniseren met het kaartvenster:
bridge = QgsLayerTreeMapCanvasBridge( \
QgsProject.instance().layerTreeRoot(), canvas)
# Now you can safely load your project and see it in the canvas
project.read('testdata/my_new_qgis_project.qgs')
2.1. Slechte paden oplossen¶
Het kan voorkomen dat lagen, die zijn geladen in het project, worden verplaatst naar een andere locatie. Wanneer het project opnieuw wordt geladen, zijn alle paden foutief.
De klasse QgsPathResolver
met de methode setPathPreprocessor()
maakt het mogelijk een pre-processor functie voor aangepaste paden in te stellen, die het mogelijk maakt paden en databronnen voorafgaand te bewerken om bestandsverwijzingen of laagbronnen te repareren.
De processorfunctie moet een argument van één enkele tekenreeks accepteren (die het originele bestandspad of databron weergeeft) en geeft een verwerkte versie van dat pad terug.
De pre-processorfunctie voor het pad wordt aangeroepen vóór enige afhandeling van slechte paden.
Enkele gebruiksgevallen:
een verouderd pad vervangen:
def my_processor(path): return path.replace('c:/Users/ClintBarton/Documents/Projects', 'x:/Projects/') QgsPathResolver.setPathPreprocessor(my_processor)
het hostadres van een database vervangen door een nieuw:
def my_processor(path): return path.replace('host=10.1.1.115', 'host=10.1.1.116') QgsPathResolver.setPathPreprocessor(my_processor)
opgeslagen inloggegevens voor een database vervangen door nieuwe:
1 2 3 4 5 6
def my_processor(path): path= path.replace("user='gis_team'", "user='team_awesome'") path = path.replace("password='cats'", "password='g7as!m*'") return path QgsPathResolver.setPathPreprocessor(my_processor)