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 rumsliga 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 insticksprogram behöver du inte bry dig: allt är redan förberett åt dig.
Tillgång till information om rumsligt 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 rumsliga 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)>