Viktigt
Översättning är en gemenskapsinsats du kan gå med i. Den här sidan är för närvarande översatt till 100.00%.
8. Stöd för projektioner
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 QgsCoordinateReferenceSystem,
3 QgsCoordinateTransform,
4 QgsProject,
5 QgsPointXY,
6)
8.1. Referenssystem för koordinater
Koordinatreferenssystem (CRS) är inkapslade av QgsCoordinateReferenceSystem-klassen. Instanser av denna klass kan skapas på flera olika sätt:
ange CRS med dess ID
# EPSG 4326 is allocated for WGS84 crs = QgsCoordinateReferenceSystem("EPSG:4326") print(crs.isValid())
True
QGIS stöder olika CRS-identifierare med följande format:
EPSG:<code>— ID tilldelat av EPSG-organisationen - hanteras medcreateFromOgcWms()POSTGIS:<srid>— ID som används i PostGIS-databaser - hanteras medcreateFromSrid()INTERNAL:<srsid>— ID som används i den interna QGIS-databasen - hanteras medcreateFromSrsId()PROJ:<proj>- hanterad medcreateFromProj()WKT:<wkt>- hanterad medcreateFromWkt()
Om inget prefix anges antas WKT-definitionen.
ange CRS genom dess välkända text (WKT)
1wkt = 'GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]],' \ 2 'PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295],' \ 3 'AXIS["Longitude",EAST], AXIS["Latitude",NORTH]]' 4crs = QgsCoordinateReferenceSystem(wkt) 5print(crs.isValid())
True
skapa en ogiltig CRS och sedan använda en av funktionerna
create*för att initialisera den. I följande exempel använder vi en Proj-sträng för att initiera projektionen.crs = QgsCoordinateReferenceSystem() crs.createFromProj("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs") print(crs.isValid())
True
Det är klokt att kontrollera om skapandet (d.v.s. uppslagningen i databasen) av CRS har lyckats: isValid() måste returnera True.
Observera att för initialisering av spatiala referenssystem måste QGIS leta upp lämpliga värden i sin interna databas srs.db. Om du skapar en oberoende applikation måste du därför ställa in sökvägar korrekt med QgsApplication.setPrefixPath(), annars kommer den inte att hitta databasen. Om du kör kommandona från QGIS Python-konsolen eller utvecklar ett tillägg behöver du inte bry dig: allt är redan förberett åt dig.
Tillgång till information om spatialt referenssystem:
1crs = QgsCoordinateReferenceSystem("EPSG:4326")
2
3print("QGIS CRS ID:", crs.srsid())
4print("PostGIS SRID:", crs.postgisSrid())
5print("Description:", crs.description())
6print("Projection Acronym:", crs.projectionAcronym())
7print("Ellipsoid Acronym:", crs.ellipsoidAcronym())
8print("Proj String:", crs.toProj())
9# check whether it's geographic or projected coordinate system
10print("Is geographic:", crs.isGeographic())
11# check type of map units in this CRS (values defined in QGis::units enum)
12print("Map units:", crs.mapUnits())
Utdata:
1QGIS CRS ID: 3452
2PostGIS SRID: 4326
3Description: WGS 84
4Projection Acronym: longlat
5Ellipsoid Acronym: EPSG:7030
6Proj String: +proj=longlat +datum=WGS84 +no_defs
7Is geographic: True
8Map units: 6
8.2. CRS-omvandling
Du kan göra transformationer mellan olika spatiala referenssystem genom att använda klassen QgsCoordinateTransform. Det enklaste sättet att använda den är att skapa ett CRS för källa och destination och konstruera en QgsCoordinateTransform-instans med dem och det aktuella projektet. Sedan anropar du bara upprepade gånger transform()-funktionen för att göra transformationen. Som standard gör den framåtriktad transformation, men den kan också göra invers transformation.
1crsSrc = QgsCoordinateReferenceSystem("EPSG:4326") # WGS 84
2crsDest = QgsCoordinateReferenceSystem("EPSG:32633") # WGS 84 / UTM zone 33N
3transformContext = QgsProject.instance().transformContext()
4xform = QgsCoordinateTransform(crsSrc, crsDest, transformContext)
5
6# forward transformation: src -> dest
7pt1 = xform.transform(QgsPointXY(18,5))
8print("Transformed point:", pt1)
9
10# inverse transformation: dest -> src
11pt2 = xform.transform(pt1, QgsCoordinateTransform.ReverseTransform)
12print("Transformed back:", pt2)
Utdata:
Transformed point: <QgsPointXY: POINT(832713.79873844375833869 553423.98688333143945783)>
Transformed back: <QgsPointXY: POINT(18 4.99999999999999911)>