Viktigt

Översättning är en gemenskapsinsats du kan gå med i. Den här sidan är för närvarande översatt till 100.00%.

2. Lastning av projekt

Råd

Kodsnuttarna på den här sidan behöver följande import om du befinner dig utanför pyqgis-konsolen:

1from qgis.core import (
2    Qgis,
3    QgsProject,
4    QgsPathResolver
5)
6
7from qgis.gui import (
8    QgsLayerTreeMapCanvasBridge,
9)

Ibland behöver du ladda ett befintligt projekt från ett plugin eller (oftare) när du utvecklar en fristående QGIS Python-applikation (se: Python-tillämpningar).

För att ladda ett projekt i den aktuella QGIS-applikationen måste du skapa en instans av klassen QgsProject. Det här är en singletonklass, så du måste använda dess instance()-metod för att göra det. Du kan anropa dess read()-metod genom att skicka sökvägen till det projekt som ska laddas:

 1# If you are not inside a QGIS console you first need to import
 2# qgis and PyQt classes you will use in this script as shown below:
 3from qgis.core import QgsProject
 4# Get the project instance
 5project = QgsProject.instance()
 6# Print the current project file name (might be empty in case no projects have been loaded)
 7# print(project.fileName())
 8
 9# Load another project
10project.read('testdata/01_project.qgs')
11print(project.fileName())
testdata/01_project.qgs

Om du behöver göra ändringar i projektet (t.ex. lägga till eller ta bort några lager) och spara dina ändringar, anropa metoden write() i din projektinstans. Metoden write() accepterar också en valfri sökväg för att spara projektet på en ny plats:

# Save the project to the same
project.write()
# ... or to a new file
project.write('testdata/my_new_qgis_project.qgs')

Både funktionerna read() och write() returnerar ett booleskt värde som du kan använda för att kontrollera om operationen lyckades.

Observera

Om du skriver en fristående QGIS-applikation måste du instansiera en QgsLayerTreeMapCanvasBridge för att synkronisera det laddade projektet med canvas, som i exemplet nedan:

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. Lösning av dåliga vägar

Det kan hända att lager som laddats i projektet flyttas till en annan plats. När projektet laddas igen är alla lagerstigar trasiga. Klassen QgsPathResolver hjälper dig att skriva om lagersökvägen inom projektet.

Dess setPathPreprocessor()-metod gör det möjligt att ställa in en anpassad sökvägsförberedande funktion för att manipulera sökvägar och datakällor innan de löses till filreferenser eller lagerkällor.

Processorfunktionen måste acceptera ett enda strängargument (som representerar den ursprungliga filsökvägen eller datakällan) och returnera en bearbetad version av denna sökväg. Funktionen för sökvägspreprocessor anropas före alla hanterare av dåliga lager. Om flera förbehandlare är inställda kommer de att anropas i sekvens baserat på den ordning i vilken de ursprungligen ställdes in.

Några användningsområden:

  1. ersätta en föråldrad väg:

    def my_processor(path):
        return path.replace('c:/Users/ClintBarton/Documents/Projects', 'x:/Projects/')
    
    QgsPathResolver.setPathPreprocessor(my_processor)
    
  2. ersätta en databas värdadress med en ny:

    def my_processor(path):
        return path.replace('host=10.1.1.115', 'host=10.1.1.116')
    
    QgsPathResolver.setPathPreprocessor(my_processor)
    
  3. ersätta lagrade databasuppgifter med nya:

    1def my_processor(path):
    2    path= path.replace("user='gis_team'", "user='team_awesome'")
    3    path = path.replace("password='cats'", "password='g7as!m*'")
    4    return path
    5
    6QgsPathResolver.setPathPreprocessor(my_processor)
    

På samma sätt finns en setPathWriter()-metod tillgänglig för en sökvägsritarfunktion.

Ett exempel på att ersätta sökvägen med en variabel:

def my_processor(path):
  return path.replace('c:/Users/ClintBarton/Documents/Projects', '$projectdir$')

QgsPathResolver.setPathWriter(my_processor)

Båda metoderna returnerar ett id som kan användas för att ta bort den förprocessor eller skrivare som de lade till. Se removePathPreprocessor() och removePathWriter().

2.2. Använda flaggor för att påskynda saker

I vissa fall där du kanske inte behöver använda ett fullt fungerande projekt, utan bara vill komma åt det av en viss anledning, kan flaggor vara till hjälp. En fullständig lista över flaggor finns tillgänglig under ProjectReadFlag. Flera flaggor kan läggas till tillsammans.

Om vi t.ex. inte bryr oss om faktiska lager och data utan bara vill komma åt ett projekt (t.ex. för inställningar för layout eller 3D-vy) kan vi använda flaggan DontResolveLayers för att kringgå datavalideringssteget och förhindra att dialogrutan för felaktiga lager visas. Följande kan göras:

readflags = Qgis.ProjectReadFlags()
readflags |= Qgis.ProjectReadFlag.DontResolveLayers
project = QgsProject.instance()
project.read('C:/Users/ClintBarton/Documents/Projects/mysweetproject.qgs', readflags)

För att lägga till fler flaggor måste pythonoperatorn Bitwise OR (|) användas.