Support de projections

Système de coordonnées de référence

Les systèmes de coordonnées de référence (SCR) sont encapsulés par la classe : class:QgsCoordinateReferenceSystem . Les instances de cette classe peuvent être créées de différentes façons :

  • Spécifier le SCR par son identifiant

    # PostGIS SRID 4326 is allocated for WGS84
    crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.PostgisCrsId)
    

    QGIS utilise trois identifiants différents pour chaque système de référence:

    • PostgisCrsId — Identifiants utilisés dans les bases de données PostGIS.

    • InternalCrsId — Identifiants utilisés dans la base de données QGIS.

    • EpsgCrsId — Identifiants définis par l’organisation EPSG.

    Sauf indication contraire dans le deuxième paramètre, le SRID de PostGIS est utilisé par défaut.

  • Spécifier le SCR par un Well-Known-Text (WKT)

    wkt = 'GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]],'
           PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295],'
           AXIS["Longitude",EAST], AXIS["Latitude",NORTH]]'
    crs = QgsCoordinateReferenceSystem(wkt)
  • Créer un SCR non valide et utiliser ensuite une des fonctions create*() pour l’initaliser. Dans l’exemple qui suit, nous utilisons une chaîne de caractères Proj4 pour initialiser une projection

    crs = QgsCoordinateReferenceSystem()
    crs.createFromProj4("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
    

Il faut vérifier si la création (c’est à dire la recherche dans la base de données) du SCR a réussi. La fonction :: func: isValid doit retourner : const: true.

Veuillez noter que pour initialiser des systèmes de références spatiales, QGIS doit rechercher les valeurs appropriées dans sa base de données interne srs.db. Ainsi, lorsque vous créez une application QGIS indépendante, vous devez en définir les chemins par défaut correctement avec la fonction QgsApplication.setPrefixPath() sinon l’application ne pourra pas retrouver la base de données des projections. Si vous utilisez les commandes depuis la console Python de QGIS ou si vous développez une extension, vous n’avez pas à vous en préoccuper: tout est déjà géré pour vous.

Accéder à l’information sur le système de référence spatiale

print "QGIS CRS ID:", crs.srsid()
print "PostGIS SRID:", crs.srid()
print "EPSG ID:", crs.epsg()
print "Description:", crs.description()
print "Projection Acronym:", crs.projectionAcronym()
print "Ellipsoid Acronym:", crs.ellipsoidAcronym()
print "Proj4 String:", crs.proj4String()
# check whether it's geographic or projected coordinate system
print "Is geographic:", crs.geographicFlag()
# check type of map units in this CRS (values defined in QGis::units enum)
print "Map units:", crs.mapUnits()

Projections

Vous pouvez réaliser des transformations entre deux systèmes de références spatiales différents en utilisant la classe QgsCoordinateTransform. Le moyen le plus simple de l’utiliser est de créer un SCR source et un autre cible, puis de construire une instance de la classe QgsCoordinateTransform avec. Ensuite, appelez répétitivement la fonction transform() pour lancer la transformation. Par défaut, la transformation va de la source vers la cible mais elle peut également être lancée en sens inverse:

crsSrc = QgsCoordinateReferenceSystem(4326)    # WGS 84
crsDest = QgsCoordinateReferenceSystem(32633)  # WGS 84 / UTM zone 33N
xform = QgsCoordinateTransform(crsSrc, crsDest)

# forward transformation: src -> dest
pt1 = xform.transform(QgsPoint(18,5))
print "Transformed point:", pt1

# inverse transformation: dest -> src
pt2 = xform.transform(pt1, QgsCoordinateTransform.ReverseTransform)
print "Transformed back:", pt2