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()
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