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 ID:

    # 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:

    • : const: PostgisCrsId - ID utilisés dans les bases de données PostGIS.

    • : const: InternalCrsId - ID utilisés dans la base de données interne de QGIS.

    • : const: EpsgCrsId - ID affecté par l’organisation EPSG

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

  • préciser le SCR par son well-know 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 des SCR ​​invalides et ensuite utiliser l’une des fonctions : func: `create*`pour l’initialiser. Dans l’exemple suivant, nous utilisons la chaîne Proj4 pour initialiser la 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.

Pour l’initialisation des systèmes de référence spatiale, QGIS a besoin de rechercher les valeurs appropriées dans sa base de données interne: file: srs.db. Ainsi, dans le cas où vous créez une application indépendante, vous devez définir les chemins correctement avec: func: QgsApplication.setPrefixPath sinon il ne parviendra pas à trouver la base de données. Si vous utilisez les commandes de la console python de QGIS ou que vous développez un plugin, ne vous en inquiétez pas : tout est déjà mis en place pour vous.

Accès aux informations du 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 faire la transformation entre les différents systèmes de référence spatiale en utilisant la classe: class: QgsCoordinateTransform . La meilleure façon de l’utiliser est de créer la source et la destination du SCR et de construire l’instance de la classe : class: QgsCoordinateTransform avec ceux-ci. Ensuite, il suffit d’appeler à plusieurs reprises la fonction :func: transform pour faire la transformation. Par défaut, il fait la transformation dans un sens, mais il est aussi capable de faire la transformation 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